0x00 EN

리서치 / 일일 리포트

  • 읽은 자료 4건
  • 정본 반영 2개 파일
  • 레이더 2건
한 줄 요약X가 For You 홈 랭커를 영상 이어 보기와 프로필 체류 시간까지 읽는 모델로 바꾸고, 같은 날 랭킹 가중치 7개를 다시 맞췄다.

오늘 함께 본 다른 변화는 다음과 같다.

  • X가 Phoenix에 Grok 분석 행동을 예측하는 항을 만들었지만 가중은 0.0이다.
  • X의 visibility-filtering이 동적 상품 광고 라벨이 붙은 포스트에 참여 제한을 건다.
  • Alibaba가 노출되지 못한 고득점 후보를 recall에 다시 넣어 Taobao 피드의 발견 카테고리를 3.5% 늘렸다고 보고했다.

1홈 이탈 집계가 기본이 되고 가중치 7개가 바뀌었다 — X

자료 xai-org/x-algorithm 021afa4 — X(xAI), 2026-11-05, 코드. 이 노트들이 붙인 번호로는 4세대+57이다(4세대+N은 이 노트들이 2026-08-13 4세대 공개 뒤의 커밋에 차례로 붙인 번호다).

배경 X For You(팔로우하지 않은 계정의 포스트까지 섞어 주는 추천 타임라인)는 Phoenix(X의 Grok 기반 랭킹 트랜스포머)가 예측한 행동별 확률에 가중치를 곱해 더한 값으로 포스트를 정렬한다. 이 가중치와 스위치의 기본값은 크론 미러(프로덕션 설정 기본값을 매일 레포에 동기화한 파일)로 공개된다. 2026-10-06 커밋은 홈 이탈(home excursion, 홈 피드에서 영상을 열어 이어 보거나 작성자 프로필로 건너가 머문 시간)을 예측하는 연속값 헤드를 만들었지만 기본 off로 두었다. 이번 커밋은 2026-11-04 sync를 반영해 홈 이탈 집계와 점수 수신을 기본으로 켜고, 랭킹 가중치 7개를 한꺼번에 바꿨다.

새로 알게 된 것A. 서빙 홈 랭커가 홈 이탈 이력을 담는 집계로 바뀌었다

  • home-mixer(For You 요청을 받는 서비스)가 Phoenix에 보내는 이력 집계의 기본값이 홈 이탈 변형으로 바뀌었다 확인 — home-mixer/params/param.rs:166-171.
    • PhoenixAggregationType: DENSE_WITH_LONG_DWELL → DENSE_WITH_LONG_DWELL_HOME_EXCURSION.
    • 이 집계는 2026-10-20 커밋 때 섀도 클러스터(실제 요청 일부를 실험 모델에도 보내고 점수는 로그로만 남기는 경로) Experiment16Fou에서만 쓰였다.
  • Phoenix 응답에서 홈 이탈 두 점수를 꺼내는 스위치도 기본 on이 됐다 확인 — 같은 파일 307-311행.
    • EnableHomeExcursionScores: false → true.
  • 그래도 home-mixer 쪽 가중합에서 홈 이탈 세 항은 여전히 0.0으로 고정돼 있다 확인 — home-mixer/scorers/value_model.rs:39-41.
    • 꺼낸 점수는 VMRanker(슬레이트 재정렬 서비스) 요청과 로그로 넘어간다. 순위에 직접 들어가는 효과는 집계 변경, 다시 말해 모델 입력 쪽에서 나온다 추정. 근거는 home-mixer가 이 항의 가중을 상수 0.0으로 쓴다는 점이다.

새로 알게 된 것B. 같은 sync에서 가중치 7개가 서로 다른 배율로 바뀌었다

  • favorite·share·cont_dwell_time은 올랐고, video_open·click·cont_click_dwell_time은 내렸고, not_interested의 벌점은 조금 커졌다 확인 — home-mixer/params/param.rs:399-512.

    • cont_dwell_time은 체류 시간 연속값, cont_click_dwell_time은 클릭해 들어간 뒤의 체류 시간 연속값에 곱하는 가중이다.
    favorite               0.66    → 0.708   (×1.073)
    video_open             0.02    → 0.0
    click                  0.3     → 0.274   (×0.913)
    share                  2.0     → 2.118   (×1.059)
    cont_dwell_time        0.006   → 0.0075  (×1.25)
    cont_click_dwell_time  0.4     → 0.385   (×0.9625)
    not_interested       −52.272   → −53.07  (×1.015)
    
  • 이전 세 번의 조정은 정확히 1.1배씩이었지만 이번 배율은 제각각이다 확인(산술). 모델 입력이 바뀐 날 함께 들어왔으므로 새 모델의 확률 분포에 맞춘 재보정으로 보인다 추정. 근거는 두 변경이 같은 sync 시각(2026-11-04T16:00:31Z)에 들어왔다는 점뿐이다.

  • video_open 가중이 0이 되면서, 영상을 열 확률은 home-mixer 가중합에서 직접 점수를 받지 않는다 확인. vm-ranker 미러는 여전히 0.07이다 확인 — vm-ranker/params.rs.

새로 알게 된 것C. 동적 상품 광고 라벨이 붙은 포스트는 참여가 제한된다

  • visibility-filtering(포스트마다 이 뷰어에게 보여도 되는지 판정하는 단계)에 동적 상품 광고 규칙이 생겼다 확인 — visibility-filtering/rules/tweet_rules.rs:1137-1142.
    • 조건은 SafetyLabelType::DYNAMIC_PRODUCT_AD 라벨이고, 대상은 모든 뷰어이며, 처분은 LimitedEngagementReason::DynamicProductAd다.
    • 이 규칙은 홈 타임라인 hydration 수준의 규칙 목록에 들어갔다.
  • 홈 타임라인의 프로모션 포스트용 판정 수준이 따로 생겼다 확인 — visibility-filtering/rules/levels.rs:371-374.
    • TIMELINE_HOME_PROMOTED_HYDRATION은 뷰어 쪽 규칙으로 차단 관계 하나만 보고, 포스트 쪽은 홈 hydration의 자체 규칙을 그대로 쓴다.

새로 알게 된 것그 밖의 변경

  • Following 탭 광고 블렌더가 광고를 넣지 못한 사유(포스트 부족, 인접 포스트 위험, 간격 한도 등)를 기록한다 확인 — home-mixer/ads/following_ad_blender.rs. 배치 규칙은 그대로인 것으로 보인다 추정. 근거는 차단 판정 순서가 핸들, 키워드, 저위험 순으로 이전과 같다는 점이다.
  • 광고 노출 이력 캐시를 다른 데이터센터에도 쓰는 스위치가 기본 on으로 생겼다 확인 — EnableAdsHistoryXdcCacheWrite, 같은 param.rs 941-946행.
  • 안전 라벨 조회에 새 캐시 계층이 생겼고, 섀도·서빙 버킷 기본값이 0이라 꺼져 있다 확인 — safety-label-source/dragonfly.rs.
  • VMRanker가 캐러셀 모델 JSON 파일을 디렉터리에서 읽어 이름으로 내주는 API를 얻었다 확인 — vm-ranker/carousel_model.rs. 어떤 모델이 들어가는지는 공개되지 않았다.
  • 페이지 RL 재순위기(한 페이지에 놓을 포스트를 슬롯 순서대로 고르는 모델)의 행동 점수에 DM 공유와 링크 복사 항이 가중 0.0으로 생겼다 확인 — phoenix/xrex/models/page_rl.py.
  • grox PTOS(정책 기반 위반 판정 계층)의 스팸 판정이 미디어에 태그된 계정도 멘션 수에 센다 확인 — grox/flows/ptos/task_filter.py.
  • Phoenix retrieval 요청에 작성자 포함·제외 목록 필드가 생겼다 확인. 광고용 연속 행동 슬롯 6·7번은 영상 시청 초와 영상 길이로 이름이 바뀌었다 확인 — recsys.proto.

"These weights reflect a combination of how much an action is valued in ranking and typical propensities of these actions across the X network (e.g. negative feedback is overall rare)." — home-mixer/params/param.rs (코드 주석), 2026-11-05

정본 반영 services/x.md ## 한 줄 요약의 기준 커밋을 021afa4로 올렸다. ### 가중치 양수 표의 favorite·video_open·click·share·cont_dwell_time·cont_click_dwell_time 칸과 부정 표의 not_interested 칸을 현재 값과 기준으로 고쳤고, 이전 값은 새로 만든 '이 절의 변경 이력' 목록으로 옮겼다. ### 랭커 입력 피처와 SID 재구성 도입과 홈 이탈 단락, ## 광고의 동적 상품 광고 단락, ## 열린 질문의 4세대+45 질문 2 아래 불릿, ## 용어 표의 홈 이탈 행, ## 출처 기준 커밋 표를 고쳤고, 변경 이력 요약표에 한 행을 추가했다.

의미 X의 홈 랭커는 이제 "열고 얼마나 머물렀나"를 이력 입력으로 읽는 모델이다. 근거는 학습 프리셋과 서빙 집계가 하루 차이로 함께 바뀌었다는 점이다. 가중치 재조정이 이 전환에 맞춘 것인지는 미러만으로 확인할 수 없으므로 추정으로 둔다.

↑ 목차

2홈 랭커 학습이 홈 이탈 시간을 입력과 헤드로 쓴다 — X

자료 xai-org/x-algorithm b508926 — X(xAI), 2026-11-04, 코드. 이 노트들이 붙인 번호로는 4세대+56이다.

배경 홈 이탈 헤드는 "영상을 열 확률 × 열었을 때 이어 볼 초"처럼 확률 헤드와 곱해 쓰도록 설계됐지만, 지금까지 공개 학습 설정에서 이 헤드를 학습시키는 손실은 보이지 않았다. 이번 커밋은 H100 GPU용 홈 랭커 학습 프리셋에 그 손실과 이력 입력을 함께 켰고, Grok 분석 행동을 위한 가중치 자리를 0.0으로 만들었다.

새로 알게 된 것A. 학습 프리셋이 홈 이탈 시간을 이력 입력과 예측 대상으로 함께 켰다

  • home_direct_packed 프리셋이 이력 항목마다 영상 이어 보기 초와 프로필 체류 초를 임베딩에 더한다 확인 — phoenix/xrex/models/recsys_feature_prep.py.
    • 값은 0~300초로 자른 뒤 log1p(x)/log1p(300)으로 정규화하고, 0으로 초기화한 학습 벡터에 곱해 더한다.
    • 플래그는 enable_home_excursion_history이고 기본은 False다. 이 프리셋에서만 True다.
  • 같은 프리셋은 두 연속 헤드를 영상을 연 경우와 프로필을 누른 경우에만 학습시킨다 확인 — phoenix/xrex/configs/xrecsys.py:262-313, 532-549.
    • 손실 비중은 영상 이어 보기 0.013, 프로필 체류 0.0035다. 손실 형태는 기존 체류 헤드와 같은 CREAD(시간을 여러 임계값 초과 여부로 나눠 학습하는 방식)다.
    • 조건부 학습은 condition_action_index(CLIENT_TWEET_VIDEO_OPEN, CLIENT_TWEET_CLICK_PROFILE)로 걸고, 홈 타임라인 두 지면에서만 계산한다.

새로 알게 된 것B. Grok 분석 행동을 위한 가중치 항이 0.0으로 생겼다

  • 공유 value model과 두 미러에 grok_analyze 가중치가 생겼고 기본값은 0.0이다 확인 — home-mixer/params/param.rs:483-488.
    • 가중합의 항은 29개에서 30개가 됐다(xai-value-model/scoring.rs).
  • 이 항은 포스트를 Grok으로 분석하는 행동의 예측으로 보인다 추정. 근거는 이름뿐이고, 2026-11-05 커밋의 home-mixer Phoenix 스코어러에는 이 점수를 채우는 코드가 없다.

새로 알게 된 것그 밖의 변경

  • Phoenix 학습의 gRPC 데이터 로더 경로가 삭제됐다 확인 — phoenix/xrex/data/grpc_recsys.py(삭제).
  • 답글 two-tower 학습에 rust_kafka 데이터셋 변형이 생겼고, two-tower 평가가 ld 헤드 전용에서 혼합 헤드 일반형으로 바뀌었다 확인 — phoenix/xrex/configs/xrecsys_two_tower_evals.py.
  • 학습 입력 TweetInfo에 작성자 참여 수 필드가 생겼다 확인 — recsys.proto 필드 49 authorEngagementCounts.
  • visibility-filtering hydration 계층이 크게 다시 쓰였다 확인. 정책 변화 여부는 읽지 않았다.

정본 반영 services/x.md ### 랭커 입력 피처와 SID 재구성에 홈 이탈 단락을 추가했고, 가중치 표에 grok_analyze 행을 추가했으며, 변경 이력 요약표에 한 행을 추가했다.

의미 홈 이탈 헤드는 2026-10-06에 자리만 생긴 뒤 한 달 만에 학습 손실과 이력 입력을 얻었다. 다만 home-mixer 가중합에서는 여전히 0이므로, 지금은 순위가 아니라 모델 표현을 바꾸는 신호다.

↑ 목차

3노출 못 된 고득점 후보를 recall에 다시 넣는다 — Alibaba

자료 From Waste to Discovery: Recycling High-Scored Unexposed Candidates in Taobao Feed Recommendation — Taobao & Tmall Group of Alibaba, 2026-11-04 v1, 논문.

배경 추천 피드는 유저가 새 관심사를 찾게 하려고 덜 노출된 콘텐츠를 밀어 주곤 하지만, 정보가 적은 콜드 아이템은 랭커가 과대평가해 참여만 깎기 쉽다. 이 논문은 랭커가 높게 매기고도 자리에서 밀려 노출되지 않은 아이템을 버리지 않고 재활용하자고 제안한다. 이 논문은 그런 아이템을 30일 동안 모아 recall(후보 생성) 단계에 다시 넣는 채널 URED를 Taobao 피드에 배포한 결과를 보고한다.

새로 알게 된 것A. 노출되지 않은 고득점 후보는 발견을 늘리면서 참여를 깎지 않았다

  • 세션마다 랭킹 상위 200개 가운데 유저가 최근 보지 않은 카테고리이면서 노출되지 않은 아이템을 모은다 확인 — HTML 판.
    • 요청마다 최대 1000개를 다른 recall 채널과 함께 통합 풀에 넣고, 조회는 요청당 O(1)이다.
  • 온라인 A/B에서 발견 카테고리 +3.47%, 콘텐츠 다양성 +8.47%, 완주 영상 조회 +2.62%를 얻었다 확인 — 같은 논문.
    • 실험은 각각 1주 넘게 돌았고, 대조군 10%, 처리군 5~10% 트래픽이다.
    • 수집 기간을 하루로 줄이면 발견 효과가 +0.55%(유의하지 않음)로 줄고, 점수 필터 없이 무작위로 넣으면 효과가 없다.

"URED has been deployed in production in the Taobao feed recommendation system for over six months, serving tens of millions of daily active users." — URED (논문), 2026-11-04

정본 반영 radar.md ## 이번 달 신규에 Alibaba URED 항목을 추가했다.

의미 탐색을 위해 콜드 아이템을 밀지 않고, 랭커가 이미 확신한 미노출 후보로 탐색을 대신할 수 있다는 프로덕션 진술이다. 추적 서비스가 같은 장치를 쓴다는 근거는 없으므로 레이더에 둔다.

↑ 목차

레이더

  • Alibaba URED — 노출 못 된 고득점 후보를 다시 recall — arXiv 2611.05997.
  • "추천 모델 스케일링 법칙" 스레드에 Meta Axia를 추가했다 — arXiv 2611.05643. 모델마다 스케일링 법칙을 적은 실험으로 찾는 도구이고, 초록은 Meta 광고 시스템에서 누적 온라인 0.36% 향상을 보고한다.
  • arXiv cs.IR 30건을 triage했다. 지역 커머스 생성형 retrieval 논문은 배포 수치가 개발 단계 측정이라 넣지 않았다.

↑ 목차

다음에 볼 것

↑ 목차