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.
작동 방식 (요청 흐름)
- 쿼리 하이드레이션 – 시청자의 최근 행동, 팔로우 목록, 블록/뮤트 정보 등을 가져옵니다.
- 후보 소스 –
thunder/(in‑network)와phoenix/+simclusters/(out‑of‑network)에서 병렬로 가져옵니다. - 후보 하이드레이션 – 각 트윗에 텍스트, 미디어 임베딩, 저자 레이블, 언어, 참여 수 등을 추가합니다.
- 사전 스코어링 필터 – 오래된 트윗, 중복, 자기 게시물, 구독자 전용 콘텐츠 등을 제거합니다.
- 스코어링 –
PhoenixScorer는 각 행동의 확률을 예측합니다.RankingScorer는 가중합, 저자 감쇠, out‑of‑network 할인, 신규 저자 부스팅을 적용합니다.VMRanker는 외부 재순위 서비스를 선택적으로 호출합니다.
- 선택 –
TopKScoreSelector가 가장 높은 점수를 가진 후보를 유지합니다. - 포스트 선택 필터 – 가시성 필터링이 각 게시물을 레이블 저장소와 비교하여 제거된 게시물은 삭제하고, 인터스티셜 게시물은 플래그 처리합니다.
- 블렌딩 – 비게시물(광고, 팔로우 제안, 프롬프트 등)이 인터리브됩니다.
- 사이드 이펙트 – 인플루언스 기록, 캐시 갱신, 광고 클릭 기록 등.
주목할 만한 최근 업데이트 (2026년 8월 기준)
- 가중치 문서화 –
home-mixer/params/param.rs와home-mixer/scorers/ranking_scorer.rs에 주석 추가. 가중치는 예측된 행동 확률에 곱해지며, 원시 참여 수에는 곱해지지 않음을 명확히 설명. - 브라질 2026 선거 필터 – 새로운
Brazil2026ElectionFilter로, 브라질 선거법원이 표시한 계정의 게시물은 시청자가 그 계정을 팔로우하지 않는 한 제거됩니다. - 합성 학습 파이프라인 –
phoenix/에 합성 데이터 생성 코드와 프로토타입 학습 실행 코드가 추가되어, 이전의 "Phoenix 데모 모델"을 대체했습니다. - 가시성 필터링 확장 – 새로운 모듈(
visibility-filtering/)과 관련 레이블 소스를 추가하여 필터의 투명성과 구성 가능성을 향상시켰습니다.
이 리포지토리에 포함되지 않은 것
이 리포지토리는 의도적으로 다음을 제외합니다:
- 실시간 프로덕션 데이터 저장소(예: 트윗 데이터베이스, 사용자 프로필 저장소).
- X에서 사용하는 대규모 학습 인프라(대규모 Spark/TF 파이프라인).
- 요청 경로 코드 외의 실시간 서빙 인프라(로드 밸런서, API 게이트웨이 등).
라이선스
프로젝트는 Apache 2.0 라이선스 하에 배포되며, 출처를 명시하면 사용, 수정, 배포가 허용됩니다.
비전문가를 위한 TL;DR
- 이 코드는 X에서 보는 개인화된 타임라인의 엔진입니다.
- 팔로우한 게시물과 알고리즘이 선택한 게시물을 혼합하고, 최신 AI 모델로 스코어링한 후, 안전성 및 관련성 규칙을 적용하여 표시합니다.
- 대규모 ML, 규칙 기반 모더레이션, 엔지니어링 기술을 결합한 실제 운영 수준의 추천 시스템에 대한 희귀한 통찰입니다.
관련
- Dispatch
- 프로젝트
- 프로젝트
- 프로젝트
- 프로젝트