xai-org/x-algorithm

Algorithm powering the For You feed on X

X For You 피드 알고리즘 (x‑ai‑org/x‑algorithm)

무엇인가요 – 이 리포지토리는 X(이전의 트위터)의 For‑You 타임라인을 구동하는 프로덕션 수준의 코드를 포함합니다. 사용자가 팔로우하는 계정의 게시물(in‑network 경로)과 다른 곳에서 발견된 게시물(out‑of‑network 경로) 두 가지 콘텐츠 스트림을 결합한 후, Transformer 기반 모델로 필터링 및 순위 매깁니다.

왜 중요한가요 – 이 피드는 X의 핵심 사용자 경험입니다. 대규모 추천 시스템, 실시간 ML 파이프라인, 알고리즘적 큐레이션의 사회적 영향을 연구하는 누구에게나 그 작동 방식을 이해하는 것은 매우 가치 있습니다.


핵심 개념

개념 설명
In‑network 소스 thunder/ – 시청자가 팔로우하는 계정의 최신 트윗을 메모리에 보관하는 저장소.
Out‑of‑network 소스 phoenix/ – 시청자가 팔로우하지 않은 계정의 트윗의 관련성을 예측하는 리트리ieval 모델.
simclusters/ – 유사성 기반 클러스터링을 통해 추가적인 out‑of‑network 트윗을 노출.
스코어링 모델 Transformer(Phoenix라고 명명)는 시청자의 최근 참여 이력과 함께 Like, Retweet, Reply, Dwell‑time, Report 등의 행동 확률을 예측합니다.
가중치 예측된 행동 확률에 수동으로 조정된 가중치(see home-mixer/params/param.rs)를 곱한 후 합산하여 단일 관련성 점수를 생성합니다.
가시성 필터링 visibility-filtering/는 사용자 블록, 미트, 계정 레이블, 국가, 구독 상태 등 풍부한 신호를 기반으로 각 게시물을 ALLOW(표시), INTERSTITIAL(예: 성인 콘텐츠 경고), 또는 DROP(숨김)으로 결정합니다.
블렌딩 파이프라인 순위 매긴 후, 비게시물(광고, "누구를 팔로우할지" 제안, 프롬프트 등)은 Blender(home-mixer/candidate_pipeline/for_you_candidate_pipeline.rs)를 통해 혼합됩니다.
레이블링 경로 지속적인 백그라운드 작업은 agatha/, bdsm/, clip/, media‑model‑proxy/ 등의 분류기와 scarecrow/, botmaker/의 규칙 엔진을 사용해 게시물과 계정에 레이블을 부여합니다. 이 레이블은 가시성 필터에 공급됩니다.

리포지토리 구조 (개요)

  • home-mixer/ – 요청 시점 파이프라인으로 후보를 하이드레이트하고, 사전 스코어링 필터를 실행하며, Phoenix로 스코어링하고, 포스트 선택 필터를 적용한 후 상위 K개 게시물을 선택합니다.
  • visibility-filtering/ – 레이블 + 시청자 행동을 기반으로 ALLOW/INTERSTITIAL/DROP 결정을 수행하는 로직.
  • phoenix/ – 랭킹 Transformer의 학습 코드, 추론 래퍼, 합성 데이터 생성 코드.
  • simclusters/ – out‑of‑network 트윗의 클러스터 기반 리트리ieval.
  • thunder/ – 팔로우한 계정의 최신 트윗을 메모리 캐시로 유지.
  • botmaker/, botmaker-rules/, scarecrow/ – 가시성 필터가 소비하는 레이블을 생성하는 규칙 엔진 인프라.
  • agatha/, bdsm/, user-cred-v2/, clip/, media-model-proxy/ – 계정, 미디어, 텍스트를 스코어링하는 ML 모델.
  • abuse-enforcement-service/ – 모델 스코어에 따라 계정을 일시 정지하거나 콘텐츠를 숨기는 강제 로직.
  • under‑the‑hood‑label‑transparency‑tool/ – 사용자가 자신의 타임라인에 영향을 미치는 레이블의 집계 통계를 확인할 수 있는 UI.

작동 방식 (요청 흐름)

  1. 쿼리 하이드레이션 – 시청자의 최근 행동, 팔로우 목록, 블록/뮤트 정보 등을 가져옵니다.
  2. 후보 소스thunder/(in‑network)와 phoenix/ + simclusters/(out‑of‑network)에서 병렬로 가져옵니다.
  3. 후보 하이드레이션 – 각 트윗에 텍스트, 미디어 임베딩, 저자 레이블, 언어, 참여 수 등을 추가합니다.
  4. 사전 스코어링 필터 – 오래된 트윗, 중복, 자기 게시물, 구독자 전용 콘텐츠 등을 제거합니다.
  5. 스코어링
    • PhoenixScorer는 각 행동의 확률을 예측합니다.
    • RankingScorer는 가중합, 저자 감쇠, out‑of‑network 할인, 신규 저자 부스팅을 적용합니다.
    • VMRanker는 외부 재순위 서비스를 선택적으로 호출합니다.
  6. 선택TopKScoreSelector가 가장 높은 점수를 가진 후보를 유지합니다.
  7. 포스트 선택 필터 – 가시성 필터링이 각 게시물을 레이블 저장소와 비교하여 제거된 게시물은 삭제하고, 인터스티셜 게시물은 플래그 처리합니다.
  8. 블렌딩 – 비게시물(광고, 팔로우 제안, 프롬프트 등)이 인터리브됩니다.
  9. 사이드 이펙트 – 인플루언스 기록, 캐시 갱신, 광고 클릭 기록 등.

주목할 만한 최근 업데이트 (2026년 8월 기준)

  • 가중치 문서화home-mixer/params/param.rshome-mixer/scorers/ranking_scorer.rs에 주석 추가. 가중치는 예측된 행동 확률에 곱해지며, 원시 참여 수에는 곱해지지 않음을 명확히 설명.
  • 브라질 2026 선거 필터 – 새로운 Brazil2026ElectionFilter로, 브라질 선거법원이 표시한 계정의 게시물은 시청자가 그 계정을 팔로우하지 않는 한 제거됩니다.
  • 합성 학습 파이프라인phoenix/에 합성 데이터 생성 코드와 프로토타입 학습 실행 코드가 추가되어, 이전의 "Phoenix 데모 모델"을 대체했습니다.
  • 가시성 필터링 확장 – 새로운 모듈(visibility-filtering/)과 관련 레이블 소스를 추가하여 필터의 투명성과 구성 가능성을 향상시켰습니다.

이 리포지토리에 포함되지 않은 것

이 리포지토리는 의도적으로 다음을 제외합니다:

  • 실시간 프로덕션 데이터 저장소(예: 트윗 데이터베이스, 사용자 프로필 저장소).
  • X에서 사용하는 대규모 학습 인프라(대규모 Spark/TF 파이프라인).
  • 요청 경로 코드 외의 실시간 서빙 인프라(로드 밸런서, API 게이트웨이 등).

라이선스

프로젝트는 Apache 2.0 라이선스 하에 배포되며, 출처를 명시하면 사용, 수정, 배포가 허용됩니다.


비전문가를 위한 TL;DR

  • 이 코드는 X에서 보는 개인화된 타임라인의 엔진입니다.
  • 팔로우한 게시물과 알고리즘이 선택한 게시물을 혼합하고, 최신 AI 모델로 스코어링한 후, 안전성 및 관련성 규칙을 적용하여 표시합니다.
  • 대규모 ML, 규칙 기반 모더레이션, 엔지니어링 기술을 결합한 실제 운영 수준의 추천 시스템에 대한 희귀한 통찰입니다.

관련

  • Dispatch
  • 프로젝트
  • 프로젝트
  • 프로젝트
  • 프로젝트