- 읽은 자료 2건
- 정본 반영 1개 파일
- 레이더 1건
오늘 함께 본 다른 변화는 다음과 같다.
- X For You 영상 캐러셀의 정렬 점수에 메인 랭킹 점수 항이 생겼지만, 가중이 0.0이라 순서는 그대로다.
- Kuaishou가 광고 생성형 추천 GR4AD의 후속으로 배포 기준선 대비 광고 수익 +3.07%를 보고했다.
1랭커 학습에 광고 집계와 시각 입력이 생겼다 — X
자료 xai-org/x-algorithm@7fef3ba — xAI, 2026-10-30, 코드. 이 노트들이 붙인 번호로는 4세대+53이다(4세대+N은 2026-08-13 4세대 공개 뒤의 커밋에 이 노트들이 차례로 붙인 번호다).
배경 Phoenix(X For You의 후보마다 행동별 참여 확률을 예측하는 Grok 기반 트랜스포머 랭커)는 유저 이력과 후보를 한 시퀀스로 읽는다. 지금까지 이 시퀀스의 토큰에는 "이 이력이 몇 분 전 일인가"나 "이 광고가 최근 몇 번 클릭됐나" 같은 집계 값이 명시 입력으로 들어가지 않았다. 2026-09-18 커밋(4세대+24)에서 요청에 광고 참여 집계(EngagementCounts)를 싣는 통로가 생겼지만, 모델이 그 값을 어디서 쓰는지는 열린 질문으로 남아 있었다. 이번 커밋은 그 집계와 이력 경과 시간을 임베딩으로 바꿔 랭커 입력에 더하는 학습 옵션을 기본 off로 추가했다.
새로 알게 된 것A. 광고 참여 집계는 버킷 임베딩이 되어 후보 임베딩에 더해진다
광고 후보마다 세 묶음의 집계를 만든다: 광고 자체, 뷰어와 광고주 쌍, 뷰어 전체다 확인 —
xai-recsys/src/util.rs:177-214.- 묶음마다 행동 7종을 기간 8개(1시간부터 28일까지)로 세므로, 후보 하나에 피처가 3 × 7 × 8 = 168개 붙는다.
- 셈은 log2 버킷(셈 값의 이진 자릿수, 0~32의 33칸)으로 바꾼다.
pub const COUNTERS: [i32; 7] = [1, 2, 14, 3, 4, 5, 8]; pub const WINDOWS_SECS: [u32; 8] = [ 3_600, 10_800, 43_200, 86_400, 259_200, 604_800, 1_209_600, 2_419_200, ]; pub const NUM_BUCKETS: usize = 33; pub fn bucket(count: u32) -> u8 { (u32::BITS - count.leading_zeros()) as u8 }학습 모델은 버킷마다 작은 임베딩을 찾아 이어 붙이고, 선형 사영으로 후보 임베딩 폭에 맞춰 더한다 확인 —
recsys_model.py:3674-3695.- 켜는 스위치는
ads_counts_emb_dim(기본 0)이고, 데이터 쪽read_ads_engagement_counts(기본 False)도 함께 켜야 한다 — 같은 파일:1245. - 사영 행렬은 0으로 초기화한다. 그래서 옵션을 켠 직후 모델 출력은 끄고 있을 때와 같다.
- 데이터 로더는 negative 샘플이 섞인 후보 시퀀스에서는 이 옵션을 거부한다.
- 켜는 스위치는
서빙 쪽에도 같은 버킷을 채우는 함수가 생겼지만, 이 커밋 diff 안에는 호출하는 곳이 없어 서빙에서 이미 쓰는지는 알 수 없다 추정 —
util.rs:547.- 서빙 모델 config에도
ads_count_features필드가 생겼고 기본값은 false다.
- 서빙 모델 config에도
새로 알게 된 것B. 이력 경과 시간과 세션 활동량이 시각 입력으로 들어간다
- 이력 각 항목에 "요청 시각보다 몇 초 앞섰나"를 로그로 줄이고 사인·코사인 성분을 붙여 이력 임베딩에 더한다 확인 —
recsys_model.py:3697-3722.- 식은
x = log1p(dt) / 15이고, 주파수 8개의 Fourier 성분을 쓴다(RECENCY_FOURIER = 8) — 같은 파일:176-186. - 요청 시각은 후보 노출 시각의 최댓값으로 잡는다.
- 식은
- 후보 임베딩에는 세션 요약 값이 더해진다 확인 — 같은 파일:3724-3753.
- 마지막 활동 뒤 경과 시간, 마지막 외부 링크 열기와 링크 장기 체류 뒤 경과 시간을 각각 넣는다.
- 최근 5분, 1시간, 1일 안의 이력 수를 로그로 줄여 넣는다.
- 켜는 스위치는
wallclock_recency(기본 False)다. 기존 feature prep 경로와는 함께 켤 수 없다 확인 — 같은 파일:1217-1223.
새로 알게 된 것C. 영상 캐러셀 점수에 메인 랭킹 점수 항이 생겼지만 가중은 0.0이다
- For You 세로 영상 캐러셀(피드 6번째 자리에 세로 영상 3~5개를 묶어 넣는 모듈, 기본 off)의 정렬 점수에 네 번째 항으로 메인 랭킹의 가중합 점수가 더해졌다 확인 —
util/video_carousel.rs:28-65.- 새 가중
VideoCarouselWeightedScoreWeight의 기본값은 0.0이다 —params/param.rs:1263-1268. - 점수가 같으면 영상을 열 확률(
video_open)이 높은 쪽을 앞에 둔다.
- 새 가중
- 캐러셀용 추가 후보 수 30이 상수에서 조절 가능한 파라미터로 바뀌었고, 값은 30 그대로다 확인 —
params/param.rs:1281-1286. - immersive 지면(몰입형 영상 뷰어) 모델 점수는 캐시된 포스트를 다시 쓰는 요청에서도 계산하고, 이미 점수가 있는 후보는 다시 묻지 않는다 확인 —
scorers/immersive_video_scorer.rs:28-63.
새로 알게 된 것그 밖의 변경
- 2026-10-13 커밋(4세대+40)에서 생긴 행동 react_with_video가 post_video로 이름이 바뀌었고, 가중치 0.0은 그대로다 확인 —
params/param.rs:471-476.- proto 행동 44가
SERVER_TWEET_POST_VIDEO가 됐고, 재순위 로그와 섀도 트래픽 로그에 이 점수가 추가됐다.
- proto 행동 44가
- 체류 시간 회귀 헤드는 0초 미만이나 1일 초과 정답을 손실과 지표에서 빼고, 빠진 수를 지표로 남긴다 확인 —
recsys_model.py. - 임베딩 테이블 옵티마이저(rowwise Adagrad)에 최근 갱신된 행의 weight decay 면제 구간과 bf16 확률적 반올림 옵션이 기본 off로 생겼다 확인 —
optimizers/recsys/rowwise_adagrad.py. - 광고 proto에 관심 카테고리, 언어, 성별, OS 타깃 정보 메시지가 생겼다 확인 —
recsys.proto. - VF(visibility-filtering, 포스트마다 이 뷰어에게 보여도 되는지 판정하는 계층)의 알림 판정이 계정 단위 외에 멘션, 답글, 미디어 태그 포스트 단위 판정을 받게 됐다 확인 —
visibility-filtering/filter_notifications.rs. - abuse-enforcement 서비스에 정지 정책 구분(플랫폼 조작, CSE)과 롤백·백필 경로 변경이 들어갔다. 피드 랭킹과는 관계가 없다 확인 —
types/src/action_control.rs. - UTH(Under the Hood, 유저가 자기 계정에 붙은 노출 영향 라벨을 조회하는 투명성 툴)의 일일 배치 잡 여러 개가 수정됐다. 내용은 읽지 않았다 확인 —
under-the-hood/scalding/.
정본 반영 services/x.md ## 한 줄 요약의 기준 커밋을 7fef3ba로 올렸다. ### 랭커 입력 피처와 SID 재구성 도입에 두 보조 입력 문장을 더하고 근거 단락을 추가했다. ## 피드 지면 캐러셀 항목에 가중합 점수 항 하위 불릿을 추가했고, 가중치 표의 react_with_video 행을 post_video로 고쳤다. 4세대+24 미공개 목록의 EngagementCounts 소비 지점 질문 아래에 답 불릿을 달았고, 출처 sha 표와 변경 이력 요약표에 한 행씩 추가했다.
의미 2026-09-18부터 열려 있던 "광고 참여 집계를 모델이 어디서 쓰나"라는 질문에 학습 코드가 답했다: 후보 토큰 임베딩에 더한다. 다만 학습과 서빙 양쪽 스위치가 기본 off이고 서빙 호출부가 diff에 보이지 않으므로, 프로덕션 랭커가 이 입력으로 학습됐는지는 추정으로 둔다. 시각 입력은 링크 열기 같은 외부 이탈 행동 뒤 경과 시간을 따로 세므로, 세션 맥락을 랭킹에 넣으려는 실험으로 보인다 추정.
2광고 생성형 추천의 후속 버전이 수익을 더 올렸다 — Kuaishou(레이더)
자료 Towards Reliable, Scalable, and Value-Aligned Generative Recommendation for Large-Scale Advertising — Kuaishou, 2026-10-28 v1, 논문.
배경 생성형 추천은 아이템을 SID(semantic ID, 의미가 비슷한 아이템이 앞자리를 공유하도록 만든 코드 열)로 나타내고, 모델이 그 코드를 한 자리씩 생성해 후보를 고른다. Kuaishou는 이 방식의 광고 추천 GR4AD를 이미 배포했고, 운영하면서 SID 경계에 민감한 문제와 beam search가 수익이 높은 후보를 일찍 잘라 내는 문제를 겪었다고 쓴다. 이번 논문은 그 후속 GR4AD-X가 세 가지를 고쳐 수익을 더 올렸다고 보고한다.
새로 알게 된 것A. 배포 기준선 대비 누적 광고 수익이 3.07% 올랐다
- Kuaishou 광고 플랫폼의 대규모 A/B에서 배포된 GR4AD 대비 누적 수익 +3.07%를 지연과 처리량 제약 안에서 냈다고 쓴다 확인 — arXiv 초록.
- 아이템 하나에 SID를 여러 경로로 배정해 경계 민감도를 줄인다.
- 백본을 넓히거나 깊게 하는 대신 여러 축으로 용량을 늘린다.
- 접두어 단위 보상, 가치 기반 beam 가지치기, 판별형 재순위를 한 모델에 묶는다.
"Large-scale online A/B tests on the Kuaishou advertising platform demonstrate that GR4AD-X achieves a cumulative revenue improvement of 3.07% over the deployed GR4AD baseline while satisfying strict latency and throughput constraints." — GR4AD-X (논문), 2026-10-28
정본 반영 정본에는 반영하지 않았다. radar.md ### 생성형 retrieval / semantic ID 스레드에 추가 근거 한 줄과 세부 불릿을 더했다.
의미 SID 생성형 추천을 배포한 회사가 운영 중에 드러난 문제를 고친 후속 보고가 또 나왔다. 2026-10-21의 Alibaba 논문(SID 재배정 문제)과 같은 흐름이다. 본문은 읽지 않았고 근거는 초록뿐이다.
레이더
- Kuaishou GR4AD-X — SID 스레드 추가 근거(radar.md).
- arXiv cs.IR 30건을 triage했다. Taobao UGR, 전자상거래 광고 PFA, 음식 배달 광고 PALATE는 프로덕션 A/B를 주장하지만 도메인이 한정된 증분이라 넣지 않았다.
다음에 볼 것
- Meta Q3 2026 실적발표 전사본 — 검색 결과 요약에 Instagram Reels가 "여러 릴스를 한 번에 순서로 매기는" 모델로 바뀌었고 Facebook Reels 랭킹이 보는 이력을 두 배로 늘렸다는 발언이 있다. 이 세션에서는 전사본 원문을 열 수 없어 정본에 반영하지 않았다. 원문으로 확인하면 instagram.md와 facebook.md 랭킹 절에 들어갈 내용이다.
- X 서빙이 광고 집계 버킷 함수를 호출하는지 — 다음 커밋에서 호출부가 생기면 추정을 풀 수 있다.
조회 실패: ai.meta.com/blog — 목록이 2026-07 글까지만 보여 최근 글을 확인하지 못했다 조회 실패: research.netflix.com/publications — 목록 페이지에서 게시물 목록을 읽지 못했다 조회 실패: Meta Q3 2026 실적발표 전사본 — 원문 호스트에 접근하지 못했다