ML Systems and Recommendations
대규모 랭킹·추천·검색 ML 시스템의 아키텍처, 임베딩, 인과 측정 패턴
개요
추천·랭킹·검색은 대형 플랫폼에서 가장 중요한 경험을 구동한다. 그러나 프로덕션 모델은 거의 항상 가장 큰 모델이 아니라 — 밀리초 지연·비용 제약 하에 수백만 사용자의 거대 후보 집합을 스코어하는 compact·latency-sensitive 모델이다. 이 긴장(풍부한 행동·딥러닝 vs 저지연·저비용)이 이 영역의 거의 모든 설계를 형성한다. 공통 해법은 무거운 계산을 오프라인에서 한 번, 가벼운 스코어링을 온라인에서 여러 번이다.
후보 생성 → 랭킹 funnel
대규모 시스템은 후보를 단계적으로 좁힌다(recall vs latency trade-off):
| 단계 | 목적 | 대표 기술 |
|---|---|---|
| Retrieval (L1) | 거대 후보 → 수백 (recall 우선) | ANN(IVFPQ), two-tower 임베딩, 후보 생성 |
| Light Ranking | 수천 → 수백 (throughput 우선) | GBDT(XGBoost/LightGBM), 사전 계산 피처 |
| Heavy Ranking (L2) | 정밀 스코어 (precision 우선) | DLRM, DCNv2, full real-time 피처 |
| Auction/Selection | 최종 결정·가격 | quality multiplier + second-price 경매 |
- ML Ranking Systems — MMoE/Hetero-MMoE, Bayesian tree, multi-objective
- Ad Tech Data Infrastructure — 광고 랭킹 3-stage funnel + 경매(How Ads Ranking Works), CTV, MTA
Two-Tower 임베딩과 시맨틱 검색
쿼리와 아이템을 각각 인코딩해 공유 임베딩 공간에서 유사도를 스코어하는 two-tower(dual encoder) 패턴이 저지연·예측 가능 비용의 표준. LLM은 강력하나 수십 ms·일 수십억 쌍 스코어링엔 너무 비쌈.
- Multimodal Search — Zepto 시맨틱 검색, Criteo CLEPR(retail media guardrail), LinkedIn MUSE(13억 프로필, Matryoshka 임베딩, LLM-as-Judge teacher)
- How We Rebuilt Search Ranking at Faire with Deep Learning — 딥러닝 검색 랭킹
- LLM-as-Judge — MUSE Teacher가 임베딩의 supervision 신호(engagement 아닌 qualification)
행동 시퀀스와 임베딩 증류
긴 사용자 행동 history를 직접 서빙하는 대신, 오프라인 시퀀스 모델로 고정 길이 임베딩으로 증류하고 다수 온라인 모델이 dense feature로 재사용(“one producer, many consumers”):
- Generative Recommender Systems — Shopify autoregressive 추천(RoPE, negative sampling)
- Feature Store — Pinterest User-Sequence 플랫폼, Indeed UBM(multi-sequence → unified single-sequence, 다운스트림 lift 2배)
- Semantic IDs — Instacart RQ-VAE 계층 코드, generative retrieval(+34% add-to-cart), catalog audit
- Distilling Long-Tail User Behavior into Embeddings at Indeed · Making User-Sequence Data Cheaper and Faster at Pinterest
인과 측정 — 클릭을 넘어서
랭킹은 engagement에 최적화되지만, 진짜 가치(인과적 기여)는 다르다. exposure/survivor bias가 핵심 함정:
- Causal Inference — Meta DoubleML(A/B 불가 시 콘텐츠 가치), CATE/uplift vs uptake
- Ad Tech Data Infrastructure — auction log에 loser 포함(counterfactual·exposure bias 보정)
- Predicting Risk in Content Launches at Netflix — boosted tree 회귀로 launch 위험 예측
- Predicting Rider Conversion in Sparse Data Environments with Bayesian Trees — sparse 환경 Bayesian
그래프를 ML 피처로
- Knowledge Graph Infrastructure — Uber DeepETT(graph-aware transformer, 그래프 임베딩 사전 계산으로 GNN 이점 + 상수 시간 추론), Airbnb identity graph
- Uber DeepETT - Real-Time Traffic Forecasting with Graph-Aware Transformer
공통 교훈
- 오프라인 무거움, 온라인 가벼움: 무거운 시퀀스/그래프 모델은 오프라인에서 임베딩으로 증류, 온라인은 dense feature
- recall vs latency를 단계별로 trade: funnel의 각 stage가 다른 균형점
- engagement ≠ 인과 가치: exposure bias 관리가 “year 3에도 좋은 모델”을 가름
- embedding이 결정: RQ-VAE/quantizer는 embedding이 주는 구조를 압축할 뿐 — 비즈니스 문제로 embedding 선택
- calibration이 경매·다운스트림을 좌우: raw score는 확률 아님(uncalibrated면 경매 수식·다운스트림 모델이 깨짐)
dew_277~286 — LLM이 funnel 전체를 관통하다
같은 임베딩을 retrieval과 ranking 양쪽에 쓴다
LinkedIn Follows Recommendation 재구축이 이 흐름의 대표 사례다. 문제는 익숙하다 — 휴리스틱 후보 생성 + 인기도 기반 랭킹이 인기 없지만 강한 매치를 놓치고, 신규 회원에게 쓸 것이 거의 없다.
해법의 구조:
- 프로필을 서술형 프롬프트로 — Templated가 아니라 Narrative Prompting. 결측 필드를 자연스럽게 다루고, 미묘한 의미를 보존하고, LLM 사전학습과 정렬되며, 명시적 태그 없이도 latent interest 추론을 지원
- bi-encoder + InfoNCE로 Follow 예측에 fine-tune (LoRA는 q/k/v/dense에만, mixed precision, gradient checkpointing)
- 오프라인(Ray + FAISS
IndexFlatIPexact KNN) / 온라인(Proxima + 호스팅 벡터 검색) 두 EBR 경로 - ⭐ 같은 임베딩을 L2 랭커의 피처로도 — 4,096차원을 task-aware supervised projection(랭킹 DNN과 공동 학습)으로 64~128차원 압축, 학습 후 projection 레이어만 추출해 온라인 서빙
4번이 핵심 설계 결정이다:
EBR이 레거시 생성기와 나란히 돌 때 같은 임베딩으로 랭커를 학습시키면 랭커가 LLM 출처 후보를 그래프·인기도 출처 후보 대비 잘못 스코어링하는 것을 방지한다.
“그 임베딩을 후보 찾기와 순위 매기기 둘 다에 재사용한 것이 파이프라인 전체가 서로 다른 방향으로 당기는 대신 같은 이해에서 작동하게 만들었다.”
적격 후보 집합이 1천만 미만이면 ANN 대신 exact KNN이 실용적이라는 점도 실무적으로 유용하다 — 근사의 복잡도를 공짜로 피할 수 있는 구간이 생각보다 넓다.
추천의 효과를 어떻게 측정하는가
Recommendation Impact Measurement — propensity score matching, ATE, diversion ratio, exposure/selection/targeting 분해. 클릭이 아니라 증분 효과를 본다.
평가자를 평가하기
LLM-as-Judge에 Netflix의 라이프사이클 관점이 더해졌다. 추천 설명(recommendation explanation)이 러닝 예제인데, 이 도메인의 특수성이 결론을 만든다 — 오도하거나 근거가 빈약한 설명은 설명이 쌓으려는 바로 그 신뢰를 침식한다.
- “맞는 답, 틀린 이유” 실패 모드 → RART로 rationale 불일치까지 focus set에
- 드리프트 밴드를 그 주 rater들의 불일치 폭으로 — 어려운 주에는 밴드도 넓어진다
- 드롭 > 서빙 — “나쁜 출력은 신뢰 위험이고, 없는 출력은 기회를 포기할 뿐이다”
- ⚠️ 오프라인 judge 일치는 필요했지만 회원 가치를 보이기에 충분하지 않았다 — 온라인 A/B가 별도로 필요했다
모델링 자체를 에이전트에게
Agentic ML Modeling — 수년간 다듬어진 성숙한 GBDT 베이스라인에서도 held-out MAE 3~5% 개선. 단, 단일 마법 실험이 아니라 가설 수립·기각·재방문의 복리였다. 새 실패 모드(leakage, cheating, 다중 검정)가 이 접근의 실질적 비용이다.
관련 위키
- Evaluation and Measurement — 증분 효과 분해와 오프라인/온라인 검증
- ML Ranking Systems
- Generative Recommender Systems
- Multimodal Search
- Semantic IDs
- Feature Store
- Ad Tech Data Infrastructure
- Causal Inference
- Knowledge Graph Infrastructure
- Multimodal Data Processing Engine — 멀티모달 임베딩 생성 인프라
- LLM Fine-Tuning — 도메인 모델 학습
- Recommendation Impact Measurement — 증분 효과 측정
- Vector Database Selection — 임베딩을 어디에 담을 것인가
- LLM-as-Judge — judge 라이프사이클과 RART
- Agentic ML Modeling — 모델링 루프의 자동화
- Human-in-the-Loop Labeling
관련 이슈: DEW #256, #258, #259, #260, #261, #262, #264, #266, #268, #269, #270, #271, #273, #274, #275, #276, #278, #281, #282, #284, #286