Thunder팔로우 내 후보
Thunder가 사용자가 팔로우하는 계정의 최신 게시물을 공급합니다.
후보 게시물 검색부터 개인화 순위 계산, 최종 노출 검사까지 공개된 시스템 전체를 한 페이지로 정리했습니다. 모든 숫자는 감사한 고정 커밋의 코드로 이어집니다.
실시간 보장이 아닌 코드 스냅샷입니다
이 가이드는 아래의 고정 커밋을 기준으로 합니다. Feature Switch와 A/B 테스트가 사용자나 작성자별로 기본값을 덮어쓸 수 있습니다.
가장 먼저 바로잡아야 할 개념
‘링크 복사 +20’은 한 번 복사할 때 20점이 붙는다는 뜻이 아닙니다.
Phoenix가 ‘이 사용자가 이 게시물의 링크를 복사할 확률’을 예측하고, 순위 계산기가 그 예측 확률에 20을 곱합니다. 좋아요, 답글, 신고 등도 같은 방식입니다.
01 / 개요
피드는 요청할 때마다 다시 만들어집니다. 팔로우 안팎의 시스템과 공유 인기 게시물 목록이 후보를 모으고, 같은 모델이 각 후보에 대한 사용자의 행동 가능성을 예측합니다.
ThunderThunder가 사용자가 팔로우하는 계정의 최신 게시물을 공급합니다.
Phoenix + SimClusters + Popular postsPhoenix retrieval, SimClusters, 인기 게시물 목록이 팔로우하지 않은 계정의 게시물을 공급합니다. 기본 설정에서 팔로우 외 답글과 재게시는 필터로 제거됩니다.
xai-value-model + vm-rankerPhoenix가 이 사용자의 행동을 예측하고 xai-value-model이 합치며, vm-ranker가 보정과 다양화를 적용한 뒤 필터링을 거칩니다.
02 / 처리 흐름
순위 계산은 한 단계일 뿐입니다. 게시물은 점수 계산 전에 탈락하거나 선정된 뒤에도 사라질 수 있습니다.
Phoenix가 행동을 예측하고 공유 value model이 가중 점수를 계산하며, vm-ranker가 다시 계산해 작성자·네트워크 보정을 적용합니다.
xai-value-model/scoring.rs:69-140vm-ranker의 DPP가 선정되지 않은 게시물의 점수를 0으로 만들고, 점수 순으로 상위 K개를 남깁니다. vm-ranker 호출이 실패하면 이 보정 없이 로컬 점수를 사용합니다.
vm-ranker/scoring/mod.rs:40-9403 / 가중치
home-mixer/params/param.rs에 미러된 기본값입니다. 가중치는 횟수가 아니라 예측값에 곱해지며, 0은 기본 설정에서 더해지지 않는다는 뜻입니다. 공유 라이브러리에는 여기서 0으로 고정된 항목 3개가 더 있고, vm-ranker/params.rs에는 정적 기본값이 다른 항목이 5개 있어 공개 코드만으로 운영 값을 단정할 수 없습니다.
좋아요
FavoriteWeight답글
ReplyWeight재게시
RetweetWeight사진 확대
PhotoExpandWeight동영상 열기
VideoOpenWeight게시물 상세 열기
ClickWeight외부 링크 열기
OpenLinkWeight작성자 프로필 열기
ProfileClickWeight품질 동영상 시청(VQV)
VqvWeight공유 버튼 누르기
ShareWeightDM으로 보내기
ShareViaDmWeight링크 복사
ShareViaCopyLinkWeight체류 여부(이진값)
DwellWeight인용 게시물
QuoteWeight인용 원문 열기
QuotedClickWeight인용 동영상 품질 시청
QuotedVqvWeight초당 체류 시간
ContDwellTimeWeight클릭 후 초당 체류 시간
ContClickDwellTimeWeight작성자 팔로우
FollowAuthorWeight관심 없음
NotInterestedWeight작성자 차단
BlockAuthorWeight작성자 뮤트
MuteAuthorWeight게시물 신고
ReportWeight머물지 않고 넘김
NotDwelledWeight아직 탐색되지 않은 게시물
PostUnexploredWeight동영상 게시
PostVideoWeight맞팔 답글 부스트
BidirectionalFollowReplyWeightBoost맞팔 체류 부스트
BidirectionalFollowDwellWeightBoost기본값 0은 모델 출력이 사라졌다는 뜻이 아닙니다. 표준 설정에서 직접 기여도가 0이라는 뜻입니다.
조건부 부스트는 26개 가중치와 별도이며 코드 조건이 맞을 때만 적용됩니다.
04 / 필터와 안전
후보 자격, 필터, 안전 라벨, 선정 후 검사는 가중 점수와 별개이며 도달 범위를 제한하거나 게시물을 완전히 제거할 수 있습니다.
For You 후보의 중복을 제거하고 48시간을 넘긴 게시물을 제외합니다. 이는 For You 점수 계산 후보에 대한 규칙이며 X의 모든 화면에 해당하지는 않습니다.
home-mixer/filters차단, 뮤트, 뮤트 키워드, 이미 본 항목, 구독 접근 권한을 점수 계산 전에 적용합니다.
home-mixer/filters같은 작성자의 게시물이 반복되면 점차 감점해 한 작성자가 피드를 독점하지 못하게 합니다.
xai-value-model/scoring.rs:183-204팔로우하지 않은 계정의 게시물에는 별도 배율을 적용할 수 있습니다.
xai-value-model/scoring.rs:206-215계정과 게시물 라벨이 노출 규칙을 작동시켜 콘텐츠를 제거하거나 경고 화면 뒤에 둘 수 있습니다.
visibility-filtering순위 계산 후에도 노출 검사가 실행되므로 점수만으로 모든 노출 결과를 설명할 수 없습니다.
home-mixer/filters/vf_filter.rs신고 1회가 좋아요 468회를 없앤다.
아닙니다. X도 코드 주석과 README에서 밝히듯이, 두 가중치 모두 행동 횟수가 아니라 ‘이 사용자의 예측 확률’에 곱해집니다. (좋아요 가중치가 0.66이 되어 비율 자체도 이제 약 355입니다.)
외부 링크가 있으면 직접 감점된다.
26개 가중치에 직접적인 링크 페널티는 없습니다. 링크 열기 예측은 작은 양수 가중치입니다. 링크가 다른 예측에 미치는 영향은 가중치만으로 알 수 없습니다.
답글은 팔로우 외 사용자에게 절대 닿지 않는다.
공개 기본값에서는 팔로우 외 답글이 점수 계산 전에 제거됩니다. 하지만 답글 전용 인덱스와 플래그(EnablePhoenixOonReplies)가 생겼으므로 실험까지 단정할 수는 없습니다.
커밋 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:31648시간이 ‘모든 경로’에 적용된다거나, 답글이 어떤 인덱스에도 없다거나, 10초 초과 동영상이 기본적으로 VQV 점수를 얻는다고 더는 설명하지 않습니다.
home-mixer/candidate_pipeline/phoenix_candidate_pipeline.rs:42705 / 출처
이 가이드는 공개 소스에서 확인한 구현과 실제 서비스에 대한 추정을 분리합니다.
확인됨: 이 커밋의 공개 코드와 기본값(핵심 For You 경로는 직접 읽었고, 전체 파일은 스크립트로 목록화했으며 모든 줄을 읽지는 않았습니다). 확인되지 않음: 비공개 서비스, 공개되지 않은 규칙, Grox 프롬프트, 실시간 실험 배정, 특정 계정에 실제 적용된 정확한 설정.
Akira Papa의 독립적인 코드 분석이며 X의 공식 입장이 아닙니다.