X Community Notes Scoring (Bridging Algorithm)
Community Notes decides which notes show on a post using bridging-based ranking: a matrix-factorization model surfaces a note only if it is rated helpful by raters who usually disagree with each other, not by simple majority vote. Open-source and actively maintained (last pushed 2026-06-17). Source: twitter/communitynotes scoring/src/scoring, github.com/twitter/communitynotes, 2026-06-17
Core mechanism — matrix factorization for "bridging"
The scorer models the rating matrix the way a recommender models user↔item preferences. Each rater and each note get a learned latent factor (a viewpoint/polarity coordinate) plus an intercept term: Source: scoring/src/scoring/matrix_factorization/matrix_factorization.py + model.py
predicted_rating(rater i, note j) ≈ μ + b_i + b_j + f_i · f_j
f_i,f_j— latent factors that absorb partisan agreement (raters who lean the same way agreeing is explained byf_i · f_j, not by the note being good).b_j(the note intercept) — the helpfulness signal that survives after polarity is factored out. A high intercept means raters across the factor spectrum find the note helpful.
A note is rated "Helpful" (and shown) only when this polarity-adjusted intercept clears a threshold (documented around 0.40). That is the "bridging" property: it rewards notes that bridge divides rather than notes that win a one-sided popularity contest. Source: communitynotes scoring source + project documentation
Scorer stack
The pipeline runs several matrix-factorization scorers and reconciles them with explicit rules. Verified files under scoring/src/scoring/: Source: twitter/communitynotes tree, 2026-06-17
| File / dir | Role |
|---|---|
mf_core_scorer.py |
Primary MF scorer over the core rater set |
mf_expansion_scorer.py, mf_expansion_plus_scorer.py |
Extend scoring to newer / broader raters |
mf_group_scorer.py, mf_multi_group_scorer.py |
Group-specific models |
mf_topic_scorer.py, topic_model.py |
Topic-conditioned scoring |
reputation_matrix_factorization/ |
Rater reputation: diligence + helpfulness models, weighted loss |
helpfulness_scores.py, contributor_state.py |
Contributor helpfulness + status |
pflip_model.py, pflip_plus_model.py |
Predict whether a note's status will flip |
tag_consensus.py, tag_filter.py |
Reason-tag consensus / filtering |
incorrect_filter.py, quasi_clique_detection.py |
Filter low-quality notes; detect coordinated rating rings |
scoring_rules.py, run_scoring.py, runner.py |
Rule reconciliation + orchestration |
Why it matters
- Bridging ≠ majority. Coordinated brigading does not pass: agreement that correlates with the polarity factor is discounted, and
quasi_clique_detection.pyactively looks for collusion. Source: scoring source, 2026-06-17 - Different problem from the For You feed. The ranker (X For You Algorithm (2026 Open Source)) optimizes predicted engagement; Community Notes optimizes cross-viewpoint agreement on helpfulness. Both are open-source signals worth understanding when posting on X — a noted post can lose reach.
Architecture Position
| Axis | Value |
|---|---|
| Family | AI serving and public algorithms |
| Boundary owned | Community Notes bridging algorithm and scoring architecture. |
| Read with | X For You Algorithm (2026 Open Source), Consensus Protocols (Raft and Paxos) |
| Use this page when | understanding public consensus/ranking algorithms |
Timeline
-
2026-07-01 | Architecture category refresh added this page to the AI serving and public algorithms family, linked it to Architecture System Map, and kept it standalone because it owns this boundary: Community Notes bridging algorithm and scoring architecture. Source: User request, 2026-07-01
-
2026-06-17 | Captured alongside the For You algorithm (Kevin paste + "store … keep in mind when xposting"). Verified the matrix-factorization / reputation scorer stack in
scoring/src/scoring; documented the bridging-intercept mechanism. Source: User, 2026-06-17; twitter/communitynotes, 2026-06-17