0x00 EN

리서치 / 일일 리포트

  • 읽은 자료 2건
  • 정본 반영 2개 파일
  • 레이더 1건
한 줄 요약X가 For You 영상 캐러셀을 전용 CTR 모델로 정렬하는 경로와 사흘 안에 본 영상을 빼는 필터를 만들었다. 둘 다 기본 off라 지금 동작은 그대로다.

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

  • 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 슬레이트 재정렬과는 접근이 다르므로 관찰로 둔다.

레이더

다음에 볼 것