X(구 트위터)의 For You 피드를 열면 누가 시켜서 보는 것도 아닌데 마치 내 취향을 꿰뚫는 글이 줄줄이 나타난다. 그런데 정작 "왜 이 글이 나에게 보이는가"를 설명해 달라고 하면 대부분 답하지 못한다. 다행히 xAI는 2025~2026년에 걸쳐 X의 추천 시스템 핵심 소스를 xai-org/x-algorithm 저장소에 Apache 2.0 라이선스로 공개했고, 2026년 5월 15일 업데이트에서는 실제로 돌아가는 엔드투엔드 추론 파이프라인과 사전학습된 미니 모델까지 함께 풀었다.
이 문서는 그 저장소를 한 줄씩 따라가면서 누구나 이해할 수 있는 수준으로 알고리즘의 모든 단계를 풀어 쓰는 것을 목표로 한다. 코드를 읽지 못해도 괜찮다. 후보가 어떻게 모이고, 어떻게 걸러지고, 어떤 점수를 받아 최종 피드로 뽑히는지, 그리고 그 점수를 만드는 Grok 기반 트랜스포머가 어떤 원리로 "이 사람이 좋아할 확률"을 계산하는지를 단계별로 설명한다.
새 알고리즘의 코드명은 Phoenix다. 2023년 공개됐던 구버전 twitter/the-algorithm이 SimClusters, TwHIN, Heavy Ranker 같은 수십 개의 부품을 손으로 짜 맞춰 만든 시스템이었다면, 새 Phoenix는 xAI의 Grok-1 언어모델 트랜스포머를 추천용으로 개조해 단일 거대 모델이 거의 모든 판단을 내리도록 단순화됐다. 코드베이스는 Rust 약 63%, Python 약 37%이며, 모델은 JAX와 dm-haiku 기반이다.
- X 알고리즘 오픈소스 소스코드: https://github.com/xai-org/x-algorithm
핵심 포인트: X For You 피드는 4단계로 작동한다고 외워두면 좋다. (1) 후보 수집: Thunder가 팔로우한 사람 글을, Phoenix Retrieval이 모르는 사람 글을 가져온다. (2) 데이터 채우기: 본문·작성자·미디어를 붙인다. (3) 점수 매기기: Grok 트랜스포머가 좋아요·답글·체류·신고 등 19개 액션 확률을 동시 예측해 가중합을 낸다. (4) 필터·다양성·광고: 정책 위반을 막고 같은 작성자가 도배되지 않게 조정한 뒤 광고를 끼워 넣는다.
1. 저장소 구조와 2026년 5월 업데이트의 의미
저장소 루트에는 다섯 개의 핵심 디렉터리가 있다. 각 디렉터리는 서로 다른 "부서"라고 생각하면 쉽다. **home-mixer/**는 전체 흐름을 지휘하는 총괄 부서, **thunder/**는 인맥 글을 빠르게 꺼내주는 창고 부서, **phoenix/**는 머신러닝 두뇌, **candidate-pipeline/**은 모든 부서가 공유하는 공용 프레임워크, **grox/**는 콘텐츠 안전과 분류를 담당하는 정책 부서다.
2026년 5월 업데이트는 그동안 코드만 공개되고 "실제로 돌려볼 수는 없다"는 비판을 받아온 부분을 정면으로 해결했다. 사전학습된 미니 Phoenix 모델이 약 3GB 아카이브로 Git LFS를 통해 함께 배포되며, phoenix/run_pipeline.py 한 줄로 retrieval과 ranking을 순차 실행할 수 있다. 256차원 임베딩, 4개 어텐션 헤드, 2개 트랜스포머 레이어로 구성된 소형 버전이지만 구조는 프로덕션과 동일하다.
새로 추가된 컴포넌트도 주목할 만하다. Grox라는 콘텐츠 이해 서비스가 처음 공개돼 스팸 탐지, 카테고리 분류, PTOS(Platform Terms of Service) 정책 집행을 담당한다. home-mixer/ads/ 모듈은 광고가 피드에 어떻게 삽입되는지, 브랜드 안전 시그널이 어떻게 인접 콘텐츠를 통제하는지 코드 레벨에서 보여준다. 그 외에 followed topics, starter packs, impression bloom filters, mutual follow graphs 같은 쿼리 하이드레이터(query hydrator)가 추가돼 사용자 컨텍스트가 훨씬 풍부해졌다.
1.1 2023년 the-algorithm과 새 Phoenix의 차이
같은 X(트위터)지만 두 버전의 철학은 완전히 다르다. 비유하자면 2023년 버전은 20명의 전문가가 각자 점수를 매겨 회의실에서 합의하는 방식이었고, 새 버전은 한 명의 천재가 모든 자료를 한꺼번에 보고 즉답하는 방식이다.
| 구분 | 2023년 the-algorithm | 2026년 xai-org/x-algorithm (Phoenix) |
|---|---|---|
| 핵심 모델 | MaskNet 기반 Heavy Ranker (약 4,800만 파라미터) | Grok-1 기반 트랜스포머 |
| 보조 임베딩 | SimClusters, TwHIN, Real Graph 등 다수 | 사실상 없음 (행동 시퀀스 자체) |
| 수작업 피처 | 수천 개 | 거의 0개 |
| 예측 라벨 수 | 10개 | 19개 |
| 주력 언어 | Scala | Rust + Python(JAX) |
| 학습 방식 | 배치 학습 | 실시간 지속 학습 |
| 휴리스틱 룰 | Twitter Blue 부스트 등 다수 | 학습된 모델에 통합 |
핵심 변화는 "피처 엔지니어링의 종말"이다. 예전에는 "이 사람이 이 토픽 커뮤니티에 속할 확률", "이 작성자와 사회적 거리" 같은 신호를 사람이 일일이 설계해서 모델에 넣어줬다. 새 Phoenix는 그냥 "이 사람이 최근에 어떤 글에 어떤 액션을 했는지"의 원본 시퀀스를 트랜스포머에게 그대로 던져주고, 모델이 알아서 패턴을 찾는다.
2. 전체 파이프라인: 새로고침 한 번에 일어나는 일
사용자가 X 앱에서 For You 피드를 새로 고침하는 순간, 약 1초 안에 다음 일곱 단계가 순서대로 일어난다. 각 단계를 "식당 주문"에 비유하면서 따라가 보자.
2.1 1단계 쿼리 하이드레이션: 손님 정보 파악
식당 직원이 먼저 "이 손님이 누구이고, 무엇을 좋아하며, 최근에 뭘 먹었는지"를 확인하는 단계다. Home Mixer는 다음 정보를 한꺼번에 끌어모은다.
- 최근 인게이지먼트 이력(어떤 글에 좋아요·답글·리포스트·체류했는지)
- 팔로잉 목록과 상호 팔로우 그래프
- 팔로우 토픽과 스타터 팩(관심 분야 묶음)
- 노출 블룸 필터(이미 본 글 빠르게 확인용 자료구조)
- IP와 언어 설정
- 직전 세션에서 서빙된 글 이력
특히 impression bloom filter가 흥미롭다. 블룸 필터는 "이 글을 본 적 있는가"를 메모리 효율적으로 확인하는 확률적 자료구조로, 수만 개의 ID를 수십 KB 안에 압축해 "확실히 없음" 또는 "있을 수도 있음"을 빠르게 판별한다. 이걸 쓰는 이유는 단순하다. 사용자가 이미 본 글을 또 보여주지 않기 위해서다.
2.2 2단계 후보 소싱: 메뉴 후보 모으기
메뉴를 추천하기 전에 추천할 만한 음식 후보를 잔뜩 모으는 단계다. X에는 두 개의 주요 후보 소스가 있다.
Thunder(인네트워크)는 사용자가 팔로우한 사람들의 최근 글을 가져온다. 모든 X 사용자의 포스트 생성·삭제 이벤트를 Kafka 메시지 큐로 실시간 받아 인메모리에 저장하기 때문에 외부 DB를 거치지 않고 서브밀리초 단위 조회가 가능하다. 한 사용자당 원본 글, 답글·리포스트, 동영상 글을 따로 보관해 필요에 따라 골라 쓴다.
Phoenix Retrieval(아웃오브네트워크)은 팔로우 관계가 전혀 없는 글로벌 코퍼스에서 "이 사람이 좋아할 만한 글"을 머신러닝으로 찾아낸다. 수억 개의 후보 중에서 단 수백 개를 추려야 하므로 무거운 모델은 쓸 수 없다. 그래서 Two-Tower 구조라는 효율적인 방식을 사용한다(자세한 동작은 다음 섹션에서 설명).
새 업데이트에서는 후보 소스가 더 다양해졌다. Phoenix MoE(Mixture of Experts), Phoenix 토픽 기반, 프롬프트 기반, 광고, Who-to-Follow 추천 등이 모두 후보 단계에서 합류한다. 그래서 한 번의 피드 요청에 수천~수만 개의 후보가 모이고, 이후 단계에서 점차 줄어든다.
2.3 3단계 후보 하이드레이션: 후보에 살 붙이기
후보 ID만 모았다고 끝이 아니다. 본문 텍스트, 첨부 미디어, 작성자 이름과 인증 상태, 동영상 길이, 인용 게시물 확장, 언어 코드, 미디어 감지, 인게이지먼트 카운트, 브랜드 안전 시그널, 상호 팔로우 점수 같은 부가 정보를 ID마다 채워 넣는다. 새 업데이트에서는 이런 하이드레이터가 대거 추가됐고, 가능한 한 병렬로 실행돼 지연을 최소화한다.
이 단계가 중요한 이유는 다음 필터와 모델이 의사결정을 내릴 때 필요한 데이터가 여기서 채워지기 때문이다. 본문이 없으면 언어를 판별할 수 없고, 작성자 정보가 없으면 차단 여부를 확인할 수 없다.
2.4 4단계 사전 스코어링 필터: 부적합 후보 솎아내기
점수를 매기기 전에 "애초에 보여줄 수 없는 글"을 먼저 제거한다. 점수 계산은 비싸기 때문에 가능한 한 일찍 후보를 줄이는 게 효율적이다. 사전 필터는 다음 10개로 구성된다.
DropDuplicatesFilter: 중복 포스트 ID 제거CoreDataHydrationFilter: 본문·작성자 로딩에 실패한 글 제거AgeFilter: 너무 오래된 글 제거(최신성 보장)SelfpostFilter: 본인이 쓴 글 제거RepostDeduplicationFilter: 같은 원문의 리포스트 중복 제거IneligibleSubscriptionFilter: 구독 권한 없는 유료 콘텐츠 제거PreviouslySeenPostsFilter: 이미 본 글 제거PreviouslyServedPostsFilter: 같은 세션 내 서빙된 글 제거MutedKeywordFilter: 뮤트 키워드 포함 글 제거AuthorSocialgraphFilter: 차단·뮤트한 작성자의 글 제거
2.5 5단계 스코어링: Phoenix가 점수를 매기는 순간
살아남은 후보(수백~수천 개)에 대해 Grok 기반 트랜스포머가 본격적으로 작동한다. 사용자 행동 이력과 각 후보를 입력으로 받아 좋아요, 답글, 리포스트, 인용, 클릭, 프로필 클릭, 동영상 시청, 사진 확장, 공유, 체류, 작성자 팔로우, 관심 없음, 작성자 차단, 작성자 뮤트, 신고 등 19개 액션의 확률을 동시에 출력한다.
그다음 가중합 스코어러(Weighted Scorer)가 이 확률들을 하나의 점수로 합친다. 식은 단순하다.
최종 점수 = Σ (가중치 × P(액션))
좋아요·리포스트 같은 긍정 액션은 양의 가중치를, 신고·차단·뮤트 같은 부정 액션은 큰 음의 가중치를 받는다. 그래서 사용자가 신고할 가능성이 높은 글은 점수가 강하게 깎인다. 그다음 작성자 다양성 스코어러(Author Diversity Scorer)가 같은 작성자의 후속 후보 점수를 점진적으로 감쇠시켜 한 사람이 피드 상단을 독점하지 못하게 한다. OON Scorer는 아웃오브네트워크 콘텐츠 점수를 별도 가중치로 조정해 "인맥 글 vs 모르는 사람 글"의 균형을 맞춘다.
2.6 6단계 셀렉션: 상위 K개 고르기
점수가 매겨졌으면 단순히 내림차순 정렬해 상위 K개를 선택한다. K는 한 번의 피드 응답에 보낼 글 수로, 사용자가 스크롤하면서 더 보면 새로 요청이 발생한다.
2.7 7단계 사후 필터와 광고 삽입
마지막으로 한 번 더 안전 점검을 한다. VFFilter(Visibility Filter)는 삭제된 글, 스팸, 폭력·고어 콘텐츠를 최종 제거하고, DedupConversationFilter는 같은 대화 스레드의 여러 분기가 동시에 노출되지 않게 정리한다. 그 뒤 광고 블렌딩 모듈이 정해진 슬롯에 광고를 삽입한다. 이때 광고는 폭력적이거나 정치적으로 민감한 게시물 근처에 들어가지 않도록 브랜드 안전 시그널을 참조한다.
3. Phoenix 모델: Grok 트랜스포머가 추천을 하는 방법
Phoenix는 사실 하나의 모델이 아니라 두 단계 파이프라인을 통칭한다. 첫 단계는 수억 개에서 수백 개로 줄이는 리트리벌(retrieval), 두 번째 단계는 수백 개를 정밀하게 정렬하는 랭킹(ranking)이다. 두 단계 모두 Grok-1에서 가져온 트랜스포머 코어를 공유하지만, 입력 구조와 어텐션 마스크 설계가 다르다.
3.1 리트리벌 단계: Two-Tower 구조 이해하기
Two-Tower는 이름 그대로 두 개의 탑을 따로 세우는 구조다. 한 탑은 사용자를, 다른 탑은 게시물을 각각 따로 "벡터(숫자 묶음)"로 변환한다. 그런 다음 두 벡터의 내적(dot product)으로 유사도를 계산해 가까운 것끼리 매칭한다.
왜 이렇게 분리하는가? 모든 게시물의 벡터는 미리 계산해 둘 수 있기 때문이다. 사용자가 요청을 보내는 순간 그 사용자의 벡터 하나만 새로 계산하고, 미리 만들어 둔 수억 개 게시물 벡터와 내적을 보면 된다. 이때 ANN(Approximate Nearest Neighbor) 검색으로 정확도를 조금 양보하고 속도를 수십 배 끌어올린다.
구체적으로 동작을 풀어보면 다음과 같다. 먼저 User Tower가 사용자의 최근 행동 시퀀스(예: 어떤 글에 좋아요·체류·답글했는지)를 트랜스포머에 입력해 평균 풀링한 단일 사용자 임베딩([B, D])을 만든다. Candidate Tower는 2층 MLP로 게시물별 임베딩([N, D])을 만들어 둔다. 추론 시점에는 두 벡터의 내적이 가장 큰 상위 K개를 즉시 가져오면 된다.
3.2 랭킹 단계: 후보 격리 어텐션 마스크의 핵심
리트리벌이 "넓게 훑기"라면 랭킹은 "좁게 파기"다. 수백 개의 후보 각각에 대해 좀 더 비싸지만 정확한 트랜스포머를 통과시켜 19개 액션 확률을 산출한다. 이때 핵심 설계가 후보 격리(Candidate Isolation)다.
랭킹 모델 입력은 세 부분이다.
- 사용자 임베딩 한 개(
[B, 1]): 사용자 ID 해시 기반 - 행동 이력 임베딩(
[B, S, D]): 최근 S=127개 글의 본문·작성자·액션·노출 표면 정보 - 후보 임베딩(
[B, C, D]): 점수를 매길 후보 C=64개의 본문·작성자·노출 표면 정보
어텐션 마스크는 다음 규칙을 따른다.
| 어텐션 방향 | 허용 여부 |
|---|---|
| 사용자·이력 ↔ 사용자·이력 | 양방향 전체 허용 |
| 후보 → 사용자·이력 | 허용(맥락 참조) |
| 후보 → 다른 후보 | 차단(자기 자신만 가능) |
왜 후보끼리는 못 보게 막을까? 답은 일관성과 캐싱 가능성 때문이다. 만약 후보 A가 같은 배치에 후보 B가 있는지 없는지에 따라 점수가 달라지면, A의 점수는 매번 다른 후보 조합으로 다시 계산해야 한다. 후보 격리는 "A의 점수는 오직 사용자와 사용자 이력에만 의존"하게 만들어 점수가 결정론적이고 재사용 가능하도록 보장한다.
트랜스포머를 통과한 결과에서 후보 위치(이력 다음 위치들)의 출력만 뽑아내고, 이를 액션 헤드(unembedding projection)에 통과시켜 각 후보·각 액션 별 로짓([B, num_candidates, num_actions])을 얻는다. 시그모이드를 씌우면 각 액션 확률이 된다.
3.3 해시 기반 임베딩의 마법
X 같은 거대 플랫폼에서 사용자 ID와 게시물 ID는 사실상 무한히 늘어난다. 모든 ID에 고유 임베딩을 부여하면 메모리가 폭발한다. Phoenix는 이를 해시 트릭(hashing trick)으로 해결한다.
사용자·아이템·작성자 어휘를 각각 100만 슬롯의 해시 테이블로 표현하고, 엔티티당 해시 함수 2개를 적용한다. 두 해시값에 해당하는 임베딩을 합산(또는 평균)해 최종 표현으로 쓴다. 이렇게 하면 다음 두 가지 이점이 생긴다.
첫째, 메모리가 ID 개수와 무관하게 고정된다(100만 슬롯 × 임베딩 차원). 둘째, 해시 함수 2개를 사용하므로 충돌 확률이 곱해져서 사실상 거의 충돌하지 않는다(예를 들어 두 다른 ID가 두 해시 모두에서 충돌할 확률은 매우 낮음).
3.4 19개 액션 멀티 헤드 예측의 진짜 의미
많은 사람들이 "트위터 알고리즘은 좋아요만 본다"고 오해한다. Phoenix는 19개 액션을 동시에 예측한다는 점에서 단일 라벨 학습보다 훨씬 풍부하다. 액션 종류를 성격별로 분류하면 다음과 같다.
| 카테고리 | 액션 | 가중치 부호 | 의미 해석 |
|---|---|---|---|
| 강한 긍정 확산 | repost, share | 큰 양수 | 적극적으로 남에게 퍼뜨림 |
| 관계 형성 | follow_author, profile_click | 큰 양수 | 작성자 자체에 관심 |
| 명시적 동의 | favorite, reply, quote | 양수 | 의견 동의·대화 참여 |
| 미디어 소비 | video_view, photo_expand | 양수 | 시각 정보를 자세히 확인 |
| 약한 관심 | click, dwell | 작은 양수 | 일단 멈춰서 본 정도 |
| 약한 부정 | mute_author, not_interested | 음수 | 적극 차단까지는 아니나 거부 |
| 강한 부정 | block_author, report | 큰 음수 | 명확한 거부·정책 위반 신호 |
같은 "클릭"이라도 그냥 클릭과 프로필까지 들어가 보는 클릭은 다른 가치를 가지고, 같은 "부정 반응"이라도 관심 없음과 신고는 다른 가중치를 가진다. 이렇게 풍부한 라벨을 모두 사용함으로써 사용자의 진짜 의도에 더 가까운 점수를 얻을 수 있다.
4. Grox와 광고 블렌딩: 알고리즘의 안전망과 수익화
추천 점수가 아무리 높아도 노출돼서는 안 되는 글이 있다. 그리고 X는 광고로 수익을 내야 한다. 이 두 가지를 담당하는 것이 Grox와 광고 블렌딩 모듈이다.
4.1 Grox: 콘텐츠 이해와 정책 집행
Grox는 2026년 5월 업데이트에서 처음 공개된 콘텐츠 이해 파이프라인이다. 다음 컴포넌트들로 구성된다.
- 스팸 분류기: 봇·낚시·도배성 글 탐지
- 카테고리 분류기: 정치, 스포츠, 뉴스, 엔터테인먼트 등 토픽 자동 분류
- 임베더: 게시물의 의미 벡터 생성(다른 시스템이 재사용)
- 태스크 실행 엔진: 분류·임베딩 작업을 배치/실시간으로 처리
- PTOS 정책 집행: 플랫폼 이용 약관 위반 자동 탐지
랭킹 점수가 "이 글이 얼마나 매력적인가"라면, Grox는 "이 글을 노출해도 되는가"라는 별도 질문에 답한다. 그래서 점수가 높아도 Grox에서 위반 판정을 받으면 사후 필터 단계에서 제거된다.
4.2 광고 블렌딩과 브랜드 안전성
광고는 일반 콘텐츠 후보와 완전히 별도의 파이프라인으로 가져온다. 그러나 최종 피드에 끼워 넣는 단계에서 일반 콘텐츠의 점수와 광고 입찰가, 광고 슬롯 규칙, 브랜드 안전 시그널을 종합해 위치를 결정한다.
특히 민감 콘텐츠 경계(sensitive content boundaries) 처리가 주목할 만하다. 인접한 게시물이 폭력적이거나 정치적으로 논쟁적이면, 특정 카테고리의 광고는 그 근처에 배치되지 않도록 자동 조정된다. 광고주 입장에서 "내 광고가 어떤 글 옆에 떠 있느냐"는 브랜드 안전 이슈를 알고리즘이 직접 관리한다는 뜻이다.
5. 크리에이터와 마케터를 위한 실전 해석
알고리즘 구조를 이해했다면 이제 "내 게시물을 어떻게 만들어야 하는가"라는 실무 질문에 답할 차례다. Phoenix의 학습 신호를 기준으로 단계별 전략을 정리한다.
5.1 점수를 끌어올리는 패턴
- 첫 줄 후킹과 체류 시간: dwell과 photo_expand가 학습 신호이므로 첫 문장에서 결론·궁금증·시각 자극을 배치해 손가락을 멈추게 한다.
- 답글·인용 유도: reply와 quote는 명시적 동의 시그널이다. 질문형 마무리, 의견 분기 포인트, 토론 주제를 의도적으로 설계한다.
- 저장·공유 가치: repost와 share는 가장 강한 양수 가중치를 가진다. 단순 감상보다 참고할 만한 인사이트, 정리된 데이터, 체크리스트 형태가 강하다.
- 작성자 정체성 강화: profile_click과 follow_author도 학습된다. 고정글, 프로필 소개, 일관된 토픽이 갖춰져 있어야 클릭 후 팔로우로 이어진다.
- 토픽 일관성: 사용자 시퀀스를 트랜스포머가 직접 본다는 것은, 한 사용자가 같은 토픽을 반복 소비하면 그 토픽이 강하게 매칭된다는 뜻이다. 니치 분야라도 꾸준히 같은 주제를 다루면 아웃오브네트워크 리트리벌에서 추천될 확률이 올라간다.
5.2 점수를 깎아먹는 패턴
- 클릭베이트 후 실망: 클릭은 받았지만 곧 mute·not_interested가 쌓이면 장기 점수가 떨어진다.
- 답글 폭격·인용 도배: 인위적 인게이지먼트는 Grox 스팸 분류기에 잡힐 가능성이 크다.
- 신고 빈도 높은 표현: 강한 정치적·폭력적·혐오 표현은 report 확률을 키워 강하게 페널티된다.
- 같은 작성자 도배: 작성자 다양성 스코어러가 동일 작성자의 후속 후보 점수를 깎으므로, 짧은 시간 안에 여러 번 올리는 것보다 한 번 잘 만든 게시물이 유리하다.
- 포맷 단조로움: not_interested 시그널은 "비슷한 패턴 반복"에서도 발생한다. 텍스트·이미지·동영상·스레드를 섞어 노출 표면(product surface)을 다양화하는 편이 좋다.
6. 직접 돌려보는 방법과 공개 모델의 한계
공개된 미니 Phoenix는 노트북 환경에서도 추론을 시험해볼 수 있다. uv sync로 의존성을 설치하거나 pip로 jax jaxlib dm-haiku numpy를 깔고, Git LFS로 oss-phoenix-artifacts.zip을 받아 압축을 풀면 약 1.4GB짜리 사용자·아이템·작성자 해시 임베딩 테이블과 모델 파라미터, 그리고 약 53만 7천 개의 스포츠 토픽 포스트 코퍼스(sports_corpus.npz)가 들어 있다.
예제 사용자 시퀀스는 NFL·NBA·NHL 관련 포스트 3개에 좋아요·체류 액션이 부여된 상태이며, run_pipeline.py를 실행하면 537K 후보 중 상위 200개를 리트리벌하고, 그중 N개에 대해 좋아요·답글·리포스트·체류·동영상 시청 확률을 출력한다. --top_k_retrieval, --top_k_display 인자로 깊이와 출력 개수를 조정할 수 있다.
다만 한계도 명확하다. 공개 모델은 프로덕션의 미니 버전이며, 실제 X는 더 큰 임베딩과 더 깊은 트랜스포머, 실시간 지속 학습 파이프라인을 사용한다. 광고 모듈은 코드 구조만 공개돼 있고 광고 모델 가중치나 입찰 로직은 빠져 있다. 사용자 어휘 100만 슬롯도 실제 규모와 다르다. 그래서 알고리즘 구조와 추론 동작의 학습용 레퍼런스로는 훌륭하지만, 특정 계정의 노출 결과를 재현하는 용도로는 적합하지 않다.
7. 마무리
위에서 살펴본 xai-org/x-algorithm 기반 X(구 트위터) For You 피드의 핵심 내용을 정리하면 다음과 같습니다.
핵심 요약:
- Home Mixer가 전체 흐름을 지휘하고, Thunder가 팔로우 글을, Phoenix가 모르는 사람 글을 후보로 가져온 뒤 Grok 트랜스포머가 최종 점수를 매긴다
- Phoenix는 Two-Tower 리트리벌과 후보 격리 어텐션을 사용하는 랭킹 트랜스포머의 두 단계 파이프라인이다
- 점수는 좋아요·답글·리포스트·체류·신고 등 19개 액션 확률의 가중합이며, 부정 액션은 강한 음수 가중치로 점수를 끌어내린다
- 해시 기반 임베딩과 후보 격리 마스크가 거대 규모와 일관된 점수를 동시에 달성하는 핵심 트릭이다
- Grox는 스팸·정책 위반을 별도 분류기로 처리해 안전망 역할을 하고, 광고 모듈은 브랜드 안전 시그널로 인접 콘텐츠를 통제한다
- 작성자 다양성 스코어러와 사전·사후 필터가 도배 방지와 정책 준수를 보장한다
크리에이터·브랜드는 첫 줄 후킹·체류 시간·일관된 토픽 정체성을 축으로 콘텐츠를 설계하고, 부정 액션을 부르는 패턴을 피하는 전략이 효과적입니다. 엔지니어·연구자는 공개된 미니 Phoenix 추론 파이프라인을 직접 돌려보면서 후보 격리 마스킹·해시 임베딩·다중 액션 예측 구조를 학습용 레퍼런스로 활용하는 것이 알고리즘 이해의 가장 빠른 길입니다.