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 경매

Two-Tower 임베딩과 시맨틱 검색

쿼리와 아이템을 각각 인코딩해 공유 임베딩 공간에서 유사도를 스코어하는 two-tower(dual encoder) 패턴이 저지연·예측 가능 비용의 표준. LLM은 강력하나 수십 ms·일 수십억 쌍 스코어링엔 너무 비쌈.

행동 시퀀스와 임베딩 증류

긴 사용자 행동 history를 직접 서빙하는 대신, 오프라인 시퀀스 모델로 고정 길이 임베딩으로 증류하고 다수 온라인 모델이 dense feature로 재사용(“one producer, many consumers”):

인과 측정 — 클릭을 넘어서

랭킹은 engagement에 최적화되지만, 진짜 가치(인과적 기여)는 다르다. exposure/survivor bias가 핵심 함정:

그래프를 ML 피처로

공통 교훈

  1. 오프라인 무거움, 온라인 가벼움: 무거운 시퀀스/그래프 모델은 오프라인에서 임베딩으로 증류, 온라인은 dense feature
  2. recall vs latency를 단계별로 trade: funnel의 각 stage가 다른 균형점
  3. engagement ≠ 인과 가치: exposure bias 관리가 “year 3에도 좋은 모델”을 가름
  4. embedding이 결정: RQ-VAE/quantizer는 embedding이 주는 구조를 압축할 뿐 — 비즈니스 문제로 embedding 선택
  5. calibration이 경매·다운스트림을 좌우: raw score는 확률 아님(uncalibrated면 경매 수식·다운스트림 모델이 깨짐)

dew_277~286 — LLM이 funnel 전체를 관통하다

같은 임베딩을 retrieval과 ranking 양쪽에 쓴다

LinkedIn Follows Recommendation 재구축이 이 흐름의 대표 사례다. 문제는 익숙하다 — 휴리스틱 후보 생성 + 인기도 기반 랭킹이 인기 없지만 강한 매치를 놓치고, 신규 회원에게 쓸 것이 거의 없다.

해법의 구조:

  1. 프로필을 서술형 프롬프트로 — Templated가 아니라 Narrative Prompting. 결측 필드를 자연스럽게 다루고, 미묘한 의미를 보존하고, LLM 사전학습과 정렬되며, 명시적 태그 없이도 latent interest 추론을 지원
  2. bi-encoder + InfoNCE로 Follow 예측에 fine-tune (LoRA는 q/k/v/dense에만, mixed precision, gradient checkpointing)
  3. 오프라인(Ray + FAISS IndexFlatIP exact KNN) / 온라인(Proxima + 호스팅 벡터 검색) 두 EBR 경로
  4. ⭐ 같은 임베딩을 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, 다중 검정)가 이 접근의 실질적 비용이다.

관련 위키

관련 이슈: DEW #256, #258, #259, #260, #261, #262, #264, #266, #268, #269, #270, #271, #273, #274, #275, #276, #278, #281, #282, #284, #286