- 읽은 자료 2건
- 정본 반영 2개 파일
- 레이더 1건
오늘 함께 본 다른 변화는 다음과 같다.
- X의 멘션·답글 알림이 위험 답글 라벨이 붙은 포스트를 팔로하지 않는 수신자에게 보내지 않게 됐다.
- Alibaba가 노출과 클릭을 한 사슬로 보는 재순위 evaluator를 Taobao 전체 트래픽에 배포했다고 보고했다.
1영상 캐러셀에 전용 CTR 모델과 시청 필터가 생겼다 — X
자료 xai-org/x-algorithm 2e2295b — X(xAI), 2026-11-06, 코드. 이 노트들이 붙인 번호로는 4세대+58이다(4세대+N은 이 노트들이 2026-08-13 4세대 공개 뒤의 커밋에 차례로 붙인 번호다).
배경 X For You(팔로우하지 않은 계정의 포스트까지 섞어 주는 추천 타임라인)에는 피드 6번째 자리에 세로 영상 3~5개를 묶어 넣는 캐러셀 모듈이 있다. 2026-10-08에 기본 off로 생긴 뒤, 캐러셀 안의 영상 순서는 Phoenix(X의 Grok 기반 랭킹 트랜스포머)가 예측한 확률들에 가중을 곱해 더한 값으로 정해 왔다. 지금까지는 "영상을 열 확률"만 가중이 0이 아니어서 사실상 그 확률 순이었다. 이번 커밋은 그 가중합을 캐러셀 전용 CTR(클릭률) 모델로 바꿀 수 있는 경로와, 최근 본 영상을 캐러셀에서 빼는 필터를 기본 off로 추가했다.
새로 알게 된 것A. 캐러셀 순서를 정하는 전용 로지스틱 회귀 모델이 생겼다
스위치를 켜면 캐러셀 영상의 점수는 가중합 대신 "영상을 열 확률의 logit과 영상 임베딩"을 입력으로 받는 선형 모델의 출력이 된다 확인 —
home-mixer/util/video_carousel_ctr_model.rs:20-34.- 영상 임베딩은 1024차원이고, 모델 파일의 가중치 개수가 1024가 아니면 모델을 버린다.
- 열 확률은 1e-6~1−1e-6으로 자른 뒤 logit으로 바꾸고, 모델이 정한 하한(
video_open_logit_min)보다 작아지지 않게 한다.
self.intercept + self.video_open_weight * video_open_logit + embedding_term // embedding_term = Σ embedding[i] * embedding_weights[i]모델은 코드에 들어 있지 않고, home-mixer(For You 요청을 받는 서비스)가 VMRanker(슬레이트 재정렬을 맡는 별도 서비스)에서 이름으로 받아 온다 확인 —
query_hydrators/video_carousel_ctr_model_query_hydrator.rs:23-64.- 받은 모델은 60초마다 백그라운드에서 다시 받는다. 첫 요청은 모델 없이 기존 가중합으로 처리한다.
- 모델이 학습된 임베딩 버전이 서빙 설정의 임베딩 버전과 다르면 모델을 쓰지 않는다. 테스트의 예시 버전 이름은 v8_search_1이다.
- 스위치
EnableVideoCarouselCtrModel은 기본 false이고, 모델 이름VideoCarouselCtrModelName은 빈 문자열이다 —params/param.rs.
같은 커밋에서 가중합 쪽에도 "영상을 열 확률 × 홈 영상 이어 보기 예상 초" 항이 다섯 번째로 더해졌고, 가중 기본값은 0.0이다 확인 —
util/video_carousel.rs:58-74.- 이어 보기 초는 2026-11-04 커밋에서 홈 랭커가 새로 예측하게 된 홈 이탈(홈 피드에서 영상을 열어 이어 본 시간) 헤드의 값이다. 값이 없으면 0으로 친다.
- 파라미터는
VideoCarouselVideoContinuationWeight(기본 0.0)다.
새로 알게 된 것B. 최근 3일 안에 캐러셀에서 본 영상을 다시 넣지 않는 필터가 생겼다
- 스위치를 켜면 유저별 캐러셀 시청 기록을 Redis에서 읽어, 지난 3일 안에 캐러셀로 본 영상과 그 원본 포스트를 캐러셀 후보에서 뺀다 확인 —
query_hydrators/video_carousel_seen_query_hydrator.rs:9-46.- 상수는
SEEN_WINDOW_MS = 3일,MAX_IDS = 2_000이다. 키 접두사는vcs:1:이다. - 같은 기록이 캐러셀 후보 필터와 top-K 선택기의 추가 캐러셀 후보 양쪽에서 쓰인다 —
filters/video_carousel_filter.rs,selectors/top_k_score_selector.rs. - 스위치
EnableVideoCarouselSeenFilter는 기본 false다. Redis 연결에 실패하면 필터가 아무것도 하지 않는 클라이언트로 바뀐다.
- 상수는
- 이 커밋에는 기록을 쓰는 쪽 코드가 없다 추정. 근거는 diff에서 이 키에 쓰는 코드가 테스트의
zadd_prune_expire호출뿐이라는 점이다.
새로 알게 된 것C. 알림과 Home 타임라인의 가시성 규칙이 조금 바뀌었다
- 멘션·답글 알림은 RISKY_HIGH_VIZ_REPLY(노출이 큰 위험 답글에 붙는 안전 라벨) 라벨이 붙은 포스트를 수신자가 작성자를 팔로하지 않을 때 보내지 않는다 확인 —
visibility-filtering/rules/tweet_rules.rs:1022-1027.- 새 규칙은
NOTIFICATIONS_WRITER_V2_MENTION과_REPLY두 레벨에만 들어갔다 —rules/levels.rs:217, 261. - golden corpus(규칙 결과를 고정한 기대값 테스트)는 팔로워와 작성자 본인에게는 그대로 보임을 고정한다.
- 새 규칙은
- 지역 제한 미디어(요청 국가에서 볼 수 없는 미디어) 규칙은 이제 작성자 본인에게 걸리지 않고,
TimelineHome레벨에도 새로 들어갔다 확인 —tweet_rules.rs:891-896.- 규칙의 대상이
Everyone에서NonAuthors로 바뀌었다. TimelineHomeRecommendations는 원래 이 규칙을 미디어 테이크다운 묶음 안에 갖고 있었고, 이번에 그 묶음을 풀어 더 앞에서 건다 —levels.rs:313, 346.
- 규칙의 대상이
새로 알게 된 것그 밖의 변경
- 크론 미러(프로덕션 설정 기본값을 매일 레포에 동기화한 파일) sync 시각이 2026-11-05T16:00:35Z로 바뀌었고, 랭킹 가중치는 바뀌지 않았다 확인 —
params/param.rs.- 섀도 트래픽(실제 요청 일부를 실험 모델에도 보내고 점수는 로그로만 남기는 경로) 대상에
Experiment22Fou·Experiment23Fou가 0.3 비율로 추가됐다.
- 섀도 트래픽(실제 요청 일부를 실험 모델에도 보내고 점수는 로그로만 남기는 경로) 대상에
- Like·Repost 알림의 가시성 판정이 행동한 계정뿐 아니라 수신자 본인의 포스트도 보게 됐다 확인 —
rules/notification_kind.rs. - page decode 재순위 요청에
eta,nuAuthor,nuSid,priorTau네 필드가 생겼고, home-mixer는 모두 비워 보낸다 확인 —scorers/page_decode_rerank_scorer.rs.- 이름으로 보아 작성자·SID(semantic ID, 아이템을 계층 코드로 나타낸 것) 단위 반복 벌점과 사전분포 온도다 추정. 근거는 필드 이름뿐이다.
- 이력 집계 종류에
DENSE_WITH_RECENT_IMPRESSIONS가 proto에 추가됐고, 아직 쓰는 곳은 없다 확인 —recsys.proto. - 학습 데이터에 광고 캠페인·라인 아이템·소재 형식을 해시 ID로 읽는 옵션이 기본 off로 생겼다 확인 —
phoenix/xrex/data/recsys/ad_side_ids.py.- 캠페인과 라인 아이템은 2^19 버킷으로 해시한다. 소재 형식은 카드 타입 48종과 미디어 타입 8종이다.
- immersive 지면 page RL 학습 프리셋의 후보 묶음 크기가 [32, 128]에서 128로 고정됐다 확인 —
phoenix/xrex/configs/xrecsys.py. - 필터 열 개가 공용 분할 함수를 쓰도록 바뀌었고, 정책 변화는 없다 확인 —
candidate-pipeline/filter.rs. - checkpoint 서버와 Phoenix 예측 서버에 DSCP(네트워크 패킷 우선순위 표시) 설정이 생겼다 확인 —
checkpoint_server.rs.
정본 반영 services/x.md ## 피드 지면의 캐러셀 정렬 점수 하위 불릿에 이어 보기 항과 CTR 모델 경로 두 줄을 추가했고, 캐러셀 항목에 3일 시청 필터 불릿을 추가했다. ## 안전성 / visibility-filtering / labeling 파이프라인 도입 뒤에 지역 제한 미디어와 알림 규칙 단락을 추가했다. ## 출처의 git 로그 기준을 2e2295b로 올렸고, 변경 이력 요약표에 4세대+58 행을 추가했다.
의미 X는 캐러셀 순서를 손으로 맞춘 가중합에서 학습된 모델로 옮길 준비를 하고 있다. 근거는 모델을 서비스 밖에서 받아 60초마다 갱신하는 경로까지 만들어 두었다는 점이다. 다만 캐러셀 자체와 두 기능이 모두 기본 off라 2e2295b 기준으로 실제 For You 동작은 바뀌지 않는다.
2노출과 클릭을 한 사슬로 보는 재순위 evaluator — Alibaba
자료 Beyond Independent Predictions: Learning the Browsing Journey for Sequence-Level Re-ranking — Alibaba Taobao & Tmall Group, 2026-11-05 v1, 논문.
배경 재순위의 Generator–Evaluator 방식은 후보 슬레이트(한 번에 노출하는 아이템 묶음)를 여러 개 만든 뒤 evaluator가 가장 좋은 것을 고른다. 보통 evaluator는 아이템마다 CTR을 따로 예측해 더하므로, 유저가 아래 아이템까지 내려가 볼지는 반영하지 못한다. 이 논문은 evaluator가 "보여 주기 → 실제로 보기 → 클릭"의 사슬을 함께 모델링하게 한다.
새로 알게 된 것A. Taobao 앱 A/B에서 클릭과 매출이 올랐고 전체 트래픽에 배포됐다고 쓴다
- 14일 온라인 A/B에서 클릭 +0.70%, 매출 +3.67%를 보고한다 확인 — arXiv HTML.
- 지연 증가는 0.5ms 미만이라고 쓴다.
- 저자 7명 가운데 5명이 Alibaba 소속이다 확인 — 같은 HTML.
"together with a 14-day online A/B test in the Taobao App (+0.70% clicks, +3.67% revenue) and full-traffic deployment, validate the effectiveness and robustness of our approach" — Beyond Independent Predictions (논문), 2026-11-05
정본 반영 추적 서비스와 직결되지 않아 radar.md ## 이번 달 신규에 "Alibaba ICE" 엔트리로만 추가했다.
의미 슬레이트 단위 평가가 이커머스 피드 프로덕션에서 쓰인다는 근거가 하나 더 늘었다. 같은 주의 ByteDance OneTrans-GSR도 슬레이트 전체를 평가하는 reward model을 쓴다. X의 VMRanker가 하는 DPP 슬레이트 재정렬과는 접근이 다르므로 관찰로 둔다.
레이더
- Alibaba ICE — 노출·클릭 사슬을 모델링하는 재순위 evaluator, Taobao 전체 트래픽 배포 (arXiv 2611.07591).
다음에 볼 것
- 캐러셀 시청 기록을 쓰는 쪽 코드 — 이번 커밋에는 읽는 쪽만 있어 추정으로 남겼다.
- 캐러셀 CTR 모델의 학습 코드나 모델 파일 — 무엇을 정답 라벨로 학습하는지 아직 공개되지 않았다.
- Reddit RSS 종료(2026-11-13) — 그 뒤 r/RedditEng 조회 방법을 미리 정해 둬야 한다.
조회 실패: ai.meta.com/blog — 목록이 2026-07 글까지만 보여 최근 글을 확인하지 못했다 조회 실패: research.netflix.com/publications — 페이지가 HTTP 404를 돌려줬다(루트 페이지로 대신 확인했고 신규 recsys 글은 0건이었다)