本文へ移動
X가이드
공개 소스 기반 필드 가이드7fef3ba

X가 For You 피드를 만드는 과정을 한눈에.

후보 게시물 검색부터 개인화 순위 계산, 최종 노출 검사까지 공개된 시스템 전체를 한 페이지로 정리했습니다. 모든 숫자는 감사한 고정 커밋의 코드로 이어집니다.

실시간 보장이 아닌 코드 스냅샷입니다

이 가이드는 아래의 고정 커밋을 기준으로 합니다. Feature Switch와 A/B 테스트가 사용자나 작성자별로 기본값을 덮어쓸 수 있습니다.

가장 먼저 바로잡아야 할 개념

‘링크 복사 +20’은 한 번 복사할 때 20점이 붙는다는 뜻이 아닙니다.

Phoenix가 ‘이 사용자가 이 게시물의 링크를 복사할 확률’을 예측하고, 순위 계산기가 그 예측 확률에 20을 곱합니다. 좋아요, 답글, 신고 등도 같은 방식입니다.

26개
home-mixer의 이름 있는 가중치(22개는 0이 아님)
26개
For You 파이프라인에 등록된 필터(일부는 기본 꺼짐)
48시간
For You 점수 계산 후보의 최대 게시물 나이
35개
요청 한 번에 남기는 기본 일반 게시물 수

01 / 개요

한 번의 요청, 여러 후보 소스, 하나의 개인화 모델

피드는 요청할 때마다 다시 만들어집니다. 팔로우 안팎의 시스템과 공유 인기 게시물 목록이 후보를 모으고, 같은 모델이 각 후보에 대한 사용자의 행동 가능성을 예측합니다.

Thunder

팔로우 내 후보

Thunder가 사용자가 팔로우하는 계정의 최신 게시물을 공급합니다.

Phoenix + SimClusters + Popular posts

팔로우 외 후보

Phoenix retrieval, SimClusters, 인기 게시물 목록이 팔로우하지 않은 계정의 게시물을 공급합니다. 기본 설정에서 팔로우 외 답글과 재게시는 필터로 제거됩니다.

xai-value-model + vm-ranker

개인화 점수

Phoenix가 이 사용자의 행동을 예측하고 xai-value-model이 합치며, vm-ranker가 보정과 다양화를 적용한 뒤 필터링을 거칩니다.

02 / 처리 흐름

실제 실행 순서로 보는 요청 경로

순위 계산은 한 단계일 뿐입니다. 게시물은 점수 계산 전에 탈락하거나 선정된 뒤에도 사라질 수 있습니다.

  1. 01

    요청 이해

    최근 행동, 팔로우, 차단, 뮤트, 키워드, 이미 본 게시물 등 사용자 맥락을 불러옵니다.

    home-mixer/query_hydrators
  2. 02

    후보 검색

    Thunder, Phoenix retrieval, SimClusters, 인기 게시물 목록을 조회합니다.

    home-mixer/sources
  3. 03

    게시물 정보 보강

    본문, 미디어, 작성자 정보, 라벨, 언어와 참여 메타데이터를 붙입니다.

    home-mixer/candidate_hydrators
  4. 04

    점수 계산 전 필터

    중복, 오래된 게시물, 차단·뮤트 계정, 이미 본 게시물, 접근 불가 구독 게시물 등을 제거합니다.

    home-mixer/filters
  5. 05

    예측 및 점수 계산

    Phoenix가 행동을 예측하고 공유 value model이 가중 점수를 계산하며, vm-ranker가 다시 계산해 작성자·네트워크 보정을 적용합니다.

    xai-value-model/scoring.rs:69-140
  6. 06

    다양화 및 선정

    vm-ranker의 DPP가 선정되지 않은 게시물의 점수를 0으로 만들고, 점수 순으로 상위 K개를 남깁니다. vm-ranker 호출이 실패하면 이 보정 없이 로컬 점수를 사용합니다.

    vm-ranker/scoring/mod.rs:40-94
  7. 07

    최종 노출 검사

    순서가 정해진 뒤에도 노출 필터와 대화 중복 제거가 게시물을 삭제할 수 있습니다.

    home-mixer/filters/vf_filter.rs

03 / 가중치

home-mixer의 26개 가중치와 2개 조건부 부스트

home-mixer/params/param.rs에 미러된 기본값입니다. 가중치는 횟수가 아니라 예측값에 곱해지며, 0은 기본 설정에서 더해지지 않는다는 뜻입니다. 공유 라이브러리에는 여기서 0으로 고정된 항목 3개가 더 있고, vm-ranker/params.rs에는 정적 기본값이 다른 항목이 5개 있어 공개 코드만으로 운영 값을 단정할 수 없습니다.

  • 01

    좋아요

    FavoriteWeight
    +0.66
  • 02

    답글

    ReplyWeight
    +5
  • 03

    재게시

    RetweetWeight
    +1
  • 04

    사진 확대

    PhotoExpandWeight
    +0.05
  • 05

    동영상 열기

    VideoOpenWeight
    +0.02
  • 06

    게시물 상세 열기

    ClickWeight
    +0.3
  • 07

    외부 링크 열기

    OpenLinkWeight
    +0.2
  • 08

    작성자 프로필 열기

    ProfileClickWeight
    0
  • 09

    품질 동영상 시청(VQV)

    VqvWeight
    0
  • 10

    공유 버튼 누르기

    ShareWeight
    +2
  • 11

    DM으로 보내기

    ShareViaDmWeight
    +5
  • 12

    링크 복사

    ShareViaCopyLinkWeight
    +20
  • 13

    체류 여부(이진값)

    DwellWeight
    +0.05
  • 14

    인용 게시물

    QuoteWeight
    +5
  • 15

    인용 원문 열기

    QuotedClickWeight
    +0.05
  • 16

    인용 동영상 품질 시청

    QuotedVqvWeight
    0
  • 17

    초당 체류 시간

    ContDwellTimeWeight
    +0.006
  • 18

    클릭 후 초당 체류 시간

    ContClickDwellTimeWeight
    +0.4
  • 19

    작성자 팔로우

    FollowAuthorWeight
    +4
  • 20

    관심 없음

    NotInterestedWeight
    -52.272
  • 21

    작성자 차단

    BlockAuthorWeight
    -31.2
  • 22

    작성자 뮤트

    MuteAuthorWeight
    -58.8
  • 23

    게시물 신고

    ReportWeight
    -234
  • 24

    머물지 않고 넘김

    NotDwelledWeight
    -0.02
  • 25

    아직 탐색되지 않은 게시물

    PostUnexploredWeight
    +0.015
  • 26

    동영상 게시

    PostVideoWeight
    0
  • 27

    맞팔 답글 부스트

    BidirectionalFollowReplyWeightBoost
    +15
  • 28

    맞팔 체류 부스트

    BidirectionalFollowDwellWeightBoost
    0

기본값 0은 모델 출력이 사라졌다는 뜻이 아닙니다. 표준 설정에서 직접 기여도가 0이라는 뜻입니다.

조건부 부스트는 26개 가중치와 별도이며 코드 조건이 맞을 때만 적용됩니다.

04 / 필터와 안전

점수가 높아도 반드시 노출되는 것은 아닙니다

후보 자격, 필터, 안전 라벨, 선정 후 검사는 가중 점수와 별개이며 도달 범위를 제한하거나 게시물을 완전히 제거할 수 있습니다.

G-01

시간과 중복

For You 후보의 중복을 제거하고 48시간을 넘긴 게시물을 제외합니다. 이는 For You 점수 계산 후보에 대한 규칙이며 X의 모든 화면에 해당하지는 않습니다.

home-mixer/filters
G-02

사용자 제어

차단, 뮤트, 뮤트 키워드, 이미 본 항목, 구독 접근 권한을 점수 계산 전에 적용합니다.

home-mixer/filters
G-03

작성자 다양성

같은 작성자의 게시물이 반복되면 점차 감점해 한 작성자가 피드를 독점하지 못하게 합니다.

xai-value-model/scoring.rs:183-204
G-05

안전 라벨

계정과 게시물 라벨이 노출 규칙을 작동시켜 콘텐츠를 제거하거나 경고 화면 뒤에 둘 수 있습니다.

visibility-filtering
G-06

최종 선정

순위 계산 후에도 노출 검사가 실행되므로 점수만으로 모든 노출 결과를 설명할 수 없습니다.

home-mixer/filters/vf_filter.rs

자주 나오는 세 가지 오해

신고 1회가 좋아요 468회를 없앤다.

아닙니다. X도 코드 주석과 README에서 밝히듯이, 두 가중치 모두 행동 횟수가 아니라 ‘이 사용자의 예측 확률’에 곱해집니다. (좋아요 가중치가 0.66이 되어 비율 자체도 이제 약 355입니다.)

외부 링크가 있으면 직접 감점된다.

26개 가중치에 직접적인 링크 페널티는 없습니다. 링크 열기 예측은 작은 양수 가중치입니다. 링크가 다른 예측에 미치는 영향은 가중치만으로 알 수 없습니다.

답글은 팔로우 외 사용자에게 절대 닿지 않는다.

공개 기본값에서는 팔로우 외 답글이 점수 계산 전에 제거됩니다. 하지만 답글 전용 인덱스와 플래그(EnablePhoenixOonReplies)가 생겼으므로 실험까지 단정할 수는 없습니다.

2026년 10월 31일 업데이트 내용

커밋 c65aa17에서 7fef3ba로 업데이트했습니다. 그 사이에 893개 파일이 바뀌었으며, 아래는 독자에게 가장 중요한 변경 사항입니다.

  • 점수 계산 이동

    ranking_scorer.rs가 삭제되었습니다. 계산은 공유 라이브러리 xai-value-model로 옮겨졌고 vm-ranker에서 다시 계산됩니다.

    xai-value-model/scoring.rs:69-140
  • 가중치 변경

    좋아요 0.5→0.66, 이진 체류 0→0.05, 체류 시간 0.004→0.006, 클릭 후 체류 0→0.4, 클릭 0.4→0.3, 동영상 열기 0.05→0.02, VQV 0.05→0, 미탐색 0.02→0.015, 관심 없음 −43.2→−52.272. 링크 복사는 20, 재게시는 1로 그대로입니다.

    home-mixer/params/param.rs:396-514
  • 새 소스와 더 많은 필터

    인기 게시물 소스가 기본으로 켜졌습니다(최대 500개). 등록된 필터는 21개에서 26개로 늘었고, 브라질 선거 필터는 삭제되었으며 FairShareRanking(켜짐), FavHoldout(꺼짐) 등이 추가되었습니다.

    home-mixer/candidate_pipeline/phoenix_candidate_pipeline.rs:420-444
  • 신규 작성자 슬롯 변경

    팔로워 50,000명 이하(이전 1,000명), 홈 노출 200회 미만(이전 1,000회), 게시 후 2시간 이내이며 톰슨 샘플링으로 선택합니다.

    home-mixer/params/param.rs:589-662
  • 참여 수가 모델 입력으로

    공개 학습 설정은 이제 좋아요, 답글, 재게시, 인용, 조회 수를 로그 변환해 모델에 입력합니다. 가중치는 여전히 사용자별 예측에 곱해집니다.

    phoenix/xrex/configs/xrecsys.py:316
  • 이 가이드의 정정

    48시간이 ‘모든 경로’에 적용된다거나, 답글이 어떤 인덱스에도 없다거나, 10초 초과 동영상이 기본적으로 VQV 점수를 얻는다고 더는 설명하지 않습니다.

    home-mixer/candidate_pipeline/phoenix_candidate_pipeline.rs:427

05 / 출처

확인된 사실과 확인되지 않은 영역

이 가이드는 공개 소스에서 확인한 구현과 실제 서비스에 대한 추정을 분리합니다.

감사 대상 저장소
xai-org/x-algorithm
감사 대상 커밋
7fef3ba19d82d1f76dec65f31b981ca817a2ea06
파라미터 미러 시각
2026-10-28T16:00:35Z
가이드 검토일
2026-10-31

확인됨: 이 커밋의 공개 코드와 기본값(핵심 For You 경로는 직접 읽었고, 전체 파일은 스크립트로 목록화했으며 모든 줄을 읽지는 않았습니다). 확인되지 않음: 비공개 서비스, 공개되지 않은 규칙, Grox 프롬프트, 실시간 실험 배정, 특정 계정에 실제 적용된 정확한 설정.

Akira Papa의 독립적인 코드 분석이며 X의 공식 입장이 아닙니다.