0x00

리서치 / 교차 서비스 topics

추천 파이프라인 안의 LLM

2026-08-13까지 공개된 1차 자료만 놓고 보면, X는 LLM을 심판으로, Meta는 광고 피처 인코더와 Groups Search의 오프라인 심판, 헤비 유저 요청의 그래프 경로 추론기로, Netflix는 랭커 그 자체로 넣었다 추정(프레이밍 검증). X는 콘텐츠 주석 파이프라인 Grox에서 LLM으로 포스트에 품질·안전 라벨을 미리 달아 둔다 확인(Grox 케이스). 그중 안전 라벨은 필터와 광고 인접성(포스트 옆에 광고를 붙여도 되는지) 판정으로 전달된다 확인(일반화 절). Meta는 미공개 short-form video 지면에서 헤비 유저의 그래프 경로 추론기로도 LLM을 쓴다고 밝혔다 확인(ConnectionMind 케이스). Netflix의 공개된 실험은 추천을 미리 일괄 계산해 두는 지면(배치 연산 지면)에 한정된다 확인(Netflix 케이스).

LLM과 VLM(이미지까지 함께 다루는 언어 모델)이 추천 시스템에 들어가는 자리는 여섯 군데다. 섞어서 말하면 혼동되니 자리별로 나누어 본다.

  1. 콘텐츠 주석 (nearline): 아이템 하나를 LLM에 입력해 품질/토픽/안전 라벨을 뽑아 KV 스토어에 적어 둔다. 서빙 때는 조회만 한다.
  2. 안전성 판정: 위 주석의 특수 케이스지만, 실패했을 때의 동작이 달라서 따로 본다. 판정이 없을 때 통과시키는 것을 fail-open, 막는 것을 fail-closed라고 한다.
  3. 랭킹 모델 자체: LLM 아키텍처를 랭커로 쓴다. 관련 논의는 sequence-transformer-ranking.md에 있다.
  4. 유저 관심사 요약: 유저 이력을 LLM으로 요약해 프로파일을 만든다.
  5. 오프라인 평가 (LLM-as-judge): 랭킹 결과의 품질을 LLM이 채점한다. 서빙 경로에는 들어가지 않는다.
  6. 유저 자연어 지시 파싱: 유저가 말로 랭킹 선호를 입력하면, 그것을 해석해 랭커에 반영한다.

두 회사는 정확히 반대 칸을 채웠다. X는 자리 1·2, Meta는 자리 5·6이다 추정. 아래 표의 각 칸은 이 노트 뒷부분의 1차 출처가 뒷받침하지만, "반대"라는 대조 자체는 공개된 것만 놓고 본 해석이다. 표의 "진술 없음" 칸도 전부 추정이다. 검사한 코퍼스는 아래 출처 목록(2026-08-09 열람)이고, 미공개 시스템에 대해서는 아무 말도 하지 않는다.

자리 X Meta
1 콘텐츠 주석 확실 (Grox) ads 한정, 둘 다 확실 (HIR = 엔티티, LLaTTE = fine-tuned LLaMA content embedding)
2 안전성 판정 확실 (PTOS, fail-closed) 진술 없음
3 LLM을 랭커로 트랜스포머 랭커가 있다(Phoenix) 광고는 여전히 비유(LLM-scale)다. 유기 피드에는 2026-08 ConnectionMind 진술이 나왔다(표 아래 보충)
4 유저 관심사 요약 확인 불가 진술 없음
5 LLM-as-judge 진술 없음 확실 (Groups Search, Llama 3)
6 자연어 지시 없음 제품은 있고, 모델은 미공개다

표의 자리 3(LLM을 랭커로)에서 Meta 유기 피드 칸을 보충하면 이렇다.

  • ConnectionMind 진술에서 Llama 3.1-8B는 그래프 경로 추론기로, 헤비 유저 5–10%의 온라인 hot path(요청이 올 때마다 실행되는 경로)를 서빙한다.
  • 나머지 90–95%는 그 LLM이 offline에서 discover한 meta-path(노드·엣지 유형의 순서로 정한 그래프 경로 패턴)로 학습된 Student GNN이 서빙한다.
  • 지면은 미공개다("short-form video platform"). 자세한 내용은 ConnectionMind 케이스에서 다룬다.

자리 3의 공백은 2026-07에 처음 깨졌고, 2026-08 Meta ConnectionMind가 두 번째 진술을 냈다. 처음 깬 것은 Netflix GenRec이다(Netflix 케이스).

⚠ 명제 변경(2026-08-13) 이전에는 이렇게 썼다: "유기 피드 랭킹 경로에 LLM이 들어간다는 1차 진술은 X·Meta 어느 쪽에도 없다". ConnectionMind가 그 진술을 내면서 이 명제의 절반이 뒤집혔다.

다만 두 회사가 LLM을 넣은 형태는 근본적으로 다르다.

  • Netflix GenRec은 랭커 그 자체다. LLM 백본에 catalog softmax 헤드를 붙였다.
  • Meta ConnectionMind는 그래프 경로 추론기다. LLM이 JSON으로 path 확장을 emit하고, F1 기반 GRPO(강화학습 기법의 하나)로 정렬한다.
  • ConnectionMind는 서빙 층에서 하이브리드를 택했다. 대다수 트래픽은 LLM이 오프라인에서 발굴한 meta-path로 학습된 GNN이 서빙하고, LLM은 헤비 유저 5–10%의 온라인 hot path만 커버한다.

두 사례에서 "LLM이 랭킹한다"의 실체가 다르다는 점이 이 자리에서 가장 주목할 부분이다.

케이스: X의 Grox (2026)

Grox는 X가 LLM으로 포스트에 라벨을 다는 nearline 콘텐츠 주석 파이프라인이다. 코드는 grox/에 있고, Kafka 기반이며, 요청 경로에는 들어가지 않는다. 확인 xai-org/x-algorithm, 2026 — grox/main.py, grox/data_loaders/kafka_loader.py

Grox는 프로세스 3개로 돌아간다. grox-engine, grox-dispatcher, gRPC 서버가 multiprocessing.Manager 큐로 통신한다. 확인 — grox/main.py, grox/schedules/context.py:19-28

무엇을 뽑는가 — plan 9개

3세대(0bfc279) 기준 Grox의 plan은 9개이고, 그중 4개는 멀티모달 포스트 임베딩을 만든다 확인 — grox/plans/의 plan_master.py 및 각 plan 파일. HEAD(862a123, 2026-10-17)에는 @register로 등록된 plan이 21개이고, plan 파일은 grox/flows/ 아래로 옮겨졌다 확인 — grox/flows/.

plan 산출물
plan_initial_banger quality score, description, tags, Grok 토픽, slop score, minor-presence score, image-editability
plan_post_safety "deluxe" 안전성 bool 메타데이터
plan_safety_ptos PTOS 정책 위반 판정 (2단계: 카테고리 탐지 → 정책별 판정)
plan_spam_comment 답글 스팸
plan_reply_ranking 답글 0–3점
plan_post_embedding_* (4개) 멀티모달 포스트 임베딩 v3/v4/v5_1

slop score — LLM이 "저품질 콘텐츠"를 정수로 매긴다

slop score는 LLM이 매기는 저품질 콘텐츠 점수(정수)이고, 실험이 아니라 계측된 프로덕션 기능이다. 확인 — grox/classifiers/content/banger_initial_screen.py:33-41, grox/tasks/task_pub.py:317, :175-178

  • 분류기 출력 스키마에서 slop_score: int | None이 1급 필드다.
  • 이 값은 slopScore로 영속화된다.
  • 값별 카운터까지 붙어 있다. 카운터 이름의 예는 task.publish_unified_post_annotations.slop_score_3.count다.

같은 VLM 호출 하나가 두 종류의 결과를 낸다. 하나는 품질 스크리닝(BANGER_INITIAL_SCREEN)이다. 다른 하나는 랭킹 시그널(GROK_RANKER)이다. 확인 — banger_initial_screen.py:49-52,157

안전 라벨은 fail-closed, 답글 품질은 fail-open

같은 서비스 안에서 처리 방식이 정반대다. LLM 결과가 없을 때 안전 라벨은 막는 쪽으로, 답글 품질은 통과시키는 쪽으로 처리한다 확인. 설계 의도가 뚜렷하다.

  • 브랜드 안전성: Grok(xAI의 LLM)이 채점하지 않은 포스트는 그냥 MediumRisk로 분류된다. 3세대(0bfc279)에서는 그 옆에 광고를 붙이지 않는다는 뜻이었다 확인 — home-mixer/models/brand_safety.rs:47-51
    • 2026-09-01 커밋(4세대+13)부터 기본 광고 블렌더는 multi-risk이고, MediumRisk 포스트 사이에도 BSR-high 광고를 놓는다 확인 — params/param.rs, x.md 광고 절.
  • 답글 랭킹: 결과가 없으면 점수가 최댓값 3.0으로 기본값 처리된다. 확인 — grox/tasks/task_pub.py:451

특정 snowflake ID 이후의 포스트는 PTOS_REVIEWED 라벨이 없으면 무조건 MediumRisk다. 기준 ID는 2_054_275_414_225_846_272이고, snowflake ID에는 생성 시각이 들어 있다. 즉 어느 시점부터 LLM 안전 심사를 광고 인접성의 전제 조건으로 명시했다. 확인 — home-mixer/models/brand_safety.rs:37,53

hallucination 가드

Grox는 LLM이 출력한 토픽 ID를 fetch해 온 allow-list와 대조한다. 모르는 ID는 버리고 카운터를 올린다. 확인 — grox/tasks/task_pub.py:232-265

JSON 파싱은 3단 fallback이다. pydantic model_validate_json, json_repair, 정규식 순서로 시도하고, 그래도 안 되면 예외를 낸다. 확인 — grox/classifiers/content/reply_ranking.py

temperature는 0이 아니라 0에 아주 가까운 값을 쓴다 확인(값 자체) — banger_initial_screen.py:45-47. 값은 temperature = 0.000001이다. zero-temperature 코드 경로를 피하려는 것으로 보이나, 코드에 이유는 없다 추정.

reasoning API 호출이 실패하면 아무 예외에서나 조용히 VLM으로 폴백한다. 모델 등급이 요청마다 달라질 수 있다는 뜻이다. 확인 — grox/classifiers/content/safety_ptos.py:269-280

안전성 2단계 구조

PTOS 안전성 판정은 카테고리 7종을 지원하고, 그중 AdultContent/ViolentMedia 2종만 "deluxe 4.2" 경로를 거친다. deluxe 모드에서는 AdultContent 재검사를 무조건 한 번 더 주입했다가, 위반이 없으면 제거한다. 가장 리스크가 큰 카테고리에 의도적으로 적용한 high-recall 2차 패스다. 확인 — safety_ptos.py:217-230, grox/tasks/task_safety_ptos_policy.py:39-61

↑ 목차

이 케이스에서 일반화할 수 있는 것

Grox 사례에서 LLM 출력은 요청 경로 밖에서 미리 만들어지고, 홈 랭커에는 직접 들어가지 않는다. 확인

  • LLM 주석은 nearline이 정석이다. 요청 경로에 LLM을 넣지 않고, Kafka로 미리 처리해서 KV에 적어 둔다. X는 dedup 캐시 9개로 60초 창 안의 중복 요청을 막는다. 확인 — grox/tasks/task_rate_limit.py:59…174
    • 9개 모두 TTLCache(maxsize=10_000, ttl=60)이다.
  • LLM 출력은 랭커에 직접 들어가지 않고 필터와 광고 레이어로 전달된다. X에서 Grok 안전 라벨은 필터와 브랜드 안전성 판정으로 간다. 토픽은 유저 쪽 multi-hot 피처로 간다. 3세대(0bfc279) 기준으로 랭킹 트랜스포머(Phoenix)는 ID 임베딩만 입력으로 받았다 확인 — home-mixer/models/query.rs:78-79, phoenix/runners.py:130-144
    • HEAD(862a123)의 Phoenix README는 랭킹 모델이 포스트의 멀티모달 임베딩에서 만든 semantic ID를 입력 피처로 받는다고 쓴다 확인 — phoenix/README.md:241-249, 411.
    • 같은 README는 멀티모달 포스트 임베딩 자체의 입력은 등록된 모든 랭킹 config에서 꺼져 있다고 쓴다 확인 — phoenix/README.md:412, 424-426.
  • 3세대(2026-05-15) 기준으로 멀티모달 임베딩은 만들었지만 홈 랭킹은 쓰지 않았다. 그때는 multimodal이 grox/ 밖에서 한 번도 나오지 않았다 확인 — repo-wide grep.
    • HEAD(862a123, 2026-10-17)에서는 multimodal이 grox/ 밖 28개 파일에 나온다 확인 — 2026-10-19 git grep.
    • home-mixer는 tweet_multimodal_embeddings 데이터셋을 읽어 For You 영상 캐러셀의 중복 제거에 쓰고, 이 중복 제거는 기본 on이다 확인 — post_v8_search_embedding_client.rs:14, params/param.rs:1107-1112.
    • 임베딩을 내보내는 싱크의 이름(StratoPostMultimodalEmbeddingMhSearchAi)은 검색을 가리킨다 확인 — grox/tasks/task_write_mm_embedding_sink.py:47.
    • 단 RECSYS_EMBED_V4라는 이름의 변종이 있으므로, 공개되지 않은 recsys 소비자가 내부에 있을 가능성은 높다 추정.

↑ 목차

아직 확인 못한 것 — 유저 관심사 요약

X가 LLM으로 유저 프로파일을 만드는지는 공개 소스만으로는 판정할 수 없다.

home-mixer(For You 피드 요청을 처리하는 X 서비스)는 유저별 추론 관심 토픽인 inferred_grok_topics를 읽기만 한다. 이 값은 32비트 multi-hot이고, Strato(X 내부의 데이터 조회 계층)에서 읽는다. 그것을 만드는 서비스는 공개 레포에 없다. 확인 — home-mixer/query_hydrators/inferred_grok_topics_query_hydrator.rs:22-27

Grox 안에는 유저 요약 태스크가 없다. TaskContext에 유저 필드가 아예 없고, TaskWithUser 추상 클래스는 있지만 구현체가 없다. 확인 — grox/schedules/types.py:56-69, grox/tasks/task.py


↑ 목차

Meta — 두 가지가 섞여 있다: LLM 표현(실재)과 LLM 비유(수사)

Meta 추천 문헌에서 LLM이라는 단어는 서로 다른 두 가지를 가리킨다. 하나는 LLM이 실제로 만든 표현(피처)이고, 다른 하나는 GEM·LLaTTE·MARM 블로그가 광고 모델을 LLM에 빗댄 비유다. 섞으면 결론이 정반대가 된다.

무엇 실체 어디
A. LLM = 표현(representation) fine-tuned LLaMA / 커스텀 LLM 추론 엔진이 콘텐츠·엔티티를 임베딩으로 인코딩하고, 그 벡터가 일반적인(non-LLM) 랭커의 입력 피처로 들어간다 실재한다 LLaTTE 논문("fine-tuned LLaMA models")과 HIR("customized LLM inference engine")이고, 둘 다 ads다
B. LLM = 아키텍처 비유 "LLM-inspired", "LLM-style scaling laws", "LLM-Scale"처럼 학습 규모·스케일링 곡선·파라미터 수를 LLM에 빗댄 말이다. 지칭 대상 모델은 언어 모델이 아니다 수사다 GEM·LLaTTE·MARM 블로그

A의 1차 출처는 아래 "자리 1"·"자리 3"의 인용문이고, B의 1차 출처는 바로 아래 표의 인용문이다 확인.

따라서 "Meta 광고 스택은 LLM 파생 피처를 실제로 소비한다"와 "Meta의 랭킹 모델은 LLM이 아니다"는 동시에 참이다 추정. 이 노트가 이전에 B만 보고 A까지 비유로 묶었던 것은 오류였다. 여기서 정정해 둔다.

↑ 목차

주의할 점 — "LLM-scale" ≠ "랭커가 LLM이다" (B의 문제)

Meta 광고 블로그의 LLM-scale류 표현은 랭커가 LLM이라는 뜻이 아니다. 세 블로그의 표현은 각각 학습 규모와 레시피, 스케일링 곡선 모양, 파라미터 수를 LLM에 빗댄 말이다. 확인 문서 본문 전수 확인, 2026-08-09:

표현 출처 실제 의미
"an LLM-inspired paradigm", "trained at the scale of large language models" GEM 블로그, 2025-11-10 학습 규모와 레시피의 비유다. 광고 추천 모델이지 언어 모델이 아니다
"predictable, LLM-style scaling laws" LLaTTE 블로그, 2026-08-05 스케일링 곡선 모양의 비유다. 같은 글이 스스로 차이를 명시한다: "Unlike LLMs, which process dense and continuous text, ads recommendation systems must integrate sparse ID features"
"Serve LLM-Scale Models for Ads" MARM 블로그, 2026-03-31 파라미터 수(O(1T))의 비유다

GEM·LLaTTE·MARM 블로그 본문에서 "Llama"라는 단어의 등장 횟수는 0회다 관찰 2026-08-09. 검사한 코퍼스는 위 표의 블로그 3편 본문이고, 각 본문을 받아 Llama/LLaMA 문자열을 센 결과가 0이다.

⚠ 단, 블로그 한정이다. LLaTTE 논문(arXiv 2601.20083)은 이렇게 명시한다 확인: "dense content embeddings produced by fine-tuned LLaMA models". 이 인용은 아래 자리 3에서 다시 다룬다. 블로그가 B(비유)만 말하고, 실재하는 LLM 피처인 A는 논문에만 남긴 사례다.

추정 언론과 요약글이 이 세 표현을 "Meta가 피드 랭킹에 LLM을 쓴다"로 옮기는 것을 여러 번 봤다. 이 옮김은 두 군데가 틀렸다: LLM이 들어가는 곳은 랭커가 아니라 입력 피처이고, 지면은 피드가 아니라 광고다.

↑ 목차

자리 1 — 콘텐츠 주석: 광고 엔티티에만 있다

Meta가 LLM으로 콘텐츠를 주석한다는 1차 진술은 광고 쪽 HIR에서 확인된다. HIR은 광고주·상품의 멀티모달 콘텐츠를 LLM 추론 엔진으로 처리해, 표현 학습의 입력 피처로 쓴다. 확인 Exploring Hierarchical Interest Representation For Meta Ads Deep Funnel Optimization, 2026-07-15

"We retrieve the multimodal information in summary text, images, and video and process it through a customized LLM inference engine that produces encoded feature inputs for our representation learning." "multimodal advertiser and product content processed through LLMs enriches sparse interactions, enabling generalization to rare and unseen entities." "These features are pulled from structured page metadata and advertiser catalog attributes and processed through vision or language models."

HIR은 X의 Grox와 구조가 같고 대상이 다르다. Grox는 유저가 올린 포스트를 주석하고, HIR은 광고주·상품 엔티티를 주석한다. 목적도 다르다. Grox의 목적은 품질·안전 판정(필터·광고 인접성 게이팅)이고, HIR의 목적은 콜드스타트 일반화다("rare and unseen entities").

추정 이것이 두 회사의 LLM 용도를 가르는 핵심이다. X는 LLM을 심판으로 쓰고, Meta(광고)는 피처 인코더로 쓴다. 같은 "content understanding"이라는 말이 정반대 역할을 가리킨다.

추정 Meta가 유기 피드 콘텐츠를 LLM으로 주석한다는 1차 진술은 찾지 못했다. 여기서 유기 피드는 Facebook Feed, Instagram Feed, Reels, Threads다. 검사한 코퍼스는 아래 출처 목록의 Meta 블로그·논문과 Transparency Center 시스템 카드 15종(2026-08-09 열람)이다. HIR은 명시적으로 ads deep funnel 문헌이다.

↑ 목차

자리 3 — LLaTTE의 "semantic feature" = A의 결정적 증거

LLaTTE 논문은 semantic feature가 스케일링의 전제조건이라고 쓴다. 확인 LLaTTE (arXiv 2601.20083), 2026-01-27:

"semantic features bend the scaling curve: they are a prerequisite for scaling, enabling the model to effectively utilize the capacity of deeper and longer architectures."

블로그도 스케일링 축 가운데 하나로 "content/semantic enrichment"를 든다 확인.

같은 논문은 이 semantic feature의 출처가 LLM이라고 직접 쓴다 확인 (2026-08-09 HTML 전문 확인):

"we introduce dense content embeddings produced by fine-tuned LLaMA models as well as Content Understanding models processing heterogeneous multimodal signals (e.g., text and images)" "when LLaMA content embeddings are enabled..."

즉 "semantic feature = LLM 출력"은 추정이 아니라 확인이다. 블로그는 이 사실을 말하지 않고, 논문만 말한다.

이 지점에서 A와 B가 갈린다. LLaTTE 모델 자체는 LLM이 아니지만, 그 입력에는 LLaMA가 만든 벡터가 들어간다. 앞부분이 B("Unlike LLMs…")이고 뒷부분이 A이며, 두 문장이 같은 글에 있다.

LLaTTE의 이 주장은 sequence-transformer-ranking.md의 대립과 직결된다. HSTU(Meta 유기 추천 쪽의 시퀀스 모델)는 "raw categorical engagement feature"만으로 충분하다고 하고, LLaTTE는 semantic feature가 스케일링의 전제조건이라고 한다. 같은 회사의 두 계보가 반대로 말한다.

↑ 목차

자리 5 — Meta가 블로그에서 Llama를 이름으로 부르는 유일한 곳

Facebook Groups Search 블로그는 Llama 3를 검색 결과 채점용 자동 심판으로 쓴다고 밝힌다. 확인 Modernizing the Facebook Groups Search, 2026-04-21

"We utilize Llama 3 with multimodal capabilities as an automated judge to grade search results against queries."

용도가 중요하다. 이 채점은 build verification test(BVT) 안의 오프라인 평가이고, 서빙 경로가 아니다. 프롬프트를 "somewhat relevant" 범주를 인식하도록 설계했다는 세부 사항까지 공개돼 있다.

같은 글은 LLM을 랭킹에 넣는 일을 미래형으로 쓴다:

"LLMs in Ranking: We plan to apply LLMs directly within the ranking stage." "Adaptive Retrieval: We are exploring LLM-driven adaptive retrieval strategies..."

즉 2026-08 시점 Meta의 공개 문헌에서 "LLM을 랭킹 단계에 직접 넣는다"는 계획이지 배포가 아니다 추정. 위 인용문의 미래형은 확인이지만, "공개 문헌 전체에 배포 진술이 없다"는 부분은 같은 코퍼스(블로그·논문·카드 15종) 한정이다. 그것도 피드가 아니라 Groups 검색 이야기다.

⚠ 여기서 "직접"이 중요하다. LLM 출력을 피처로 넣는 것은 ads 쪽에서 이미 배포돼 있다(위 A).

↑ 목차

자리 6 — 제품은 있는데 모델을 안 밝힌다

Meta에는 X에 없는 것이 하나 있다. 유저가 자연어로 랭킹에 지시하는 표면이다.

  • Threads Dear Algo / Your Algo: 공개 포스트에 Dear Algo라고 쓰고, 더 보거나 덜 보고 싶은 것을 적는 방식이다. 안내 문구는 이렇다: "Just type 'Dear Algo' in a public Threads post, followed by what you'd like to see more or less of." 적용 창은 공개 3일, 비공개 1·3·7일이다. 확인 상세는 threads.md에 있다.
  • Instagram Your Algorithm: AI가 유저의 관심 토픽을 요약해 보여 주고, 자유 텍스트 입력을 받는다. Feed·Reels·Explore 전역에 적용된다. 확인 상세는 instagram.md에 있다.

두 제품 모두 어떤 모델이 자연어를 파싱하는지 밝히지 않는다. Instagram은 "AI"라고만 쓴다. 관찰 2026-08-09 (검사한 코퍼스: 위 뉴스룸 글 2건 본문)

추정 자유 텍스트를 받아 토픽 선호로 바꾸는 구조라, LLM이거나 최소한 텍스트 분류기가 있어야 한다. 하지만 경량 토픽 분류기로도 구현할 수 있으므로 "LLM일 것"이라고 단정할 근거가 없다.

추정 이것은 자리 4(유저 관심사 요약)의 제품화된 형태이기도 하다. Instagram이 "AI가 요약한 당신의 관심 토픽"을 유저에게 보여준다는 것은 그 프로파일이 내부에 존재한다는 뜻이다. X의 inferred_grok_topics는 같은 대상의 반대편이다. X에서는 이 값을 읽기만 하고, 생산자는 공개되지 않았다. 즉 X는 파이프라인만 보이고 제품이 안 보이며, Meta는 제품만 보이고 파이프라인이 안 보인다.

↑ 목차

케이스: Meta ConnectionMind — 자리 3(LLM을 랭커로)의 Meta 첫 프로덕션 A/B 진술 (2026-08)

ConnectionMind는 Meta가 LLM을 추천의 온라인 서빙 경로에 넣었다고 밝힌 논문이다. Llama 3.1-8B가 헤비 유저 5–10%의 요청을 직접 맡고, 나머지는 그 LLM이 찾은 그래프 경로로 학습한 가벼운 GNN이 맡는다. 지면은 공개하지 않았다. 확인 — ConnectionMind: Leveraging Social Networks and Large Language Models for Personalized Recommendation at Meta (arXiv 2608.10187), 2026-08-10

저자는 6명이다. 1저자 Haoyu Han은 Michigan State University 인턴이고, 나머지 5명은 Meta Platforms(Menlo Park) 소속이다. 내부 팀명(Core Ranking / GenAI 등) 소속 각주는 없다. 확인 같은 논문

핵심은 세 가지다.

  1. 서빙은 하이브리드다. LLM이 온라인 hot path에 있는 것은 상위 5–10% 헤비 유저에 한정된다. 90–95%는 Student GNN이 서빙한다. 이 GNN은 그 LLM이 offline에서 discover한 meta-path로 학습한 모델이다.
    • §6.1은 이렇게 쓴다: "For this cohort, requests are routed to the full ConnectionMind LLM" / "we employ an offline distillation pipeline. The LLM processes historical contexts to discover effective meta-paths. These paths are extracted to train a lightweight Graph Neural Network (Student GNN)".
    • Netflix GenRec의 "batch-compute 지면 100% LLM"과는 다른 절충이다.
    • hot path에 LLM이 실제로 들어가는 최초의 유기 피드 진술이자, 대다수는 여전히 GNN이 서빙한다는 이중 진술이다.
  2. LLM은 그래프 경로를 JSON으로 emit한다. Netflix GenRec의 "pooled hidden state → catalog softmax" 채점기와는 동작이 완전히 다르다. ConnectionMind는 실제로 텍스트를 생성한다.
    • §4.1에서 상태 s_d는 다음을 담은 프롬프트다: "current paths, candidate next-hop edges, and compact textual node profiles".
    • LLM은 다음을 낸다: "structured action with two components: path expansions and surfaced item–path pairs".
    • beam search와 constrained decoding은 명시되지 않았고, format reward로 사후 검증한다.
    • 학습은 SFT에서 GRPO로 이어진다. SFT는 BFS 최단경로로 teacher-forcing한다.
    • GRPO 보상은 format −1/+1과 F1 기반 recommendation reward, step-wise shaping이다. 가중치는 α_rec=0.5·α_step=0.3·α_fmt=0.2다.
  3. 배포 백본은 Llama 3.1-8B-Instruct다 확인 §6.1. A/B는 수천만 유저를 대상으로 여러 주에 걸쳐 진행했다.
    • 결과는 watch time +0.43% ± 0.14%, exposure +0.33% ± 0.08%, video sessions +0.22% ± 0.13%다.
    • 오프라인 벤치는 Delicious·Foursquare 공개 셋이다. Meta 데이터가 아니고, LightGCN·SASRec·HSTU 베이스라인은 없다.

⚠ 이 진술을 다룰 때는 네 가지를 주의해야 한다.

  • 지면은 공개되지 않았다. 논문은 지면을 "short-form video platform"까지만 밝힌다. 그래프 스키마는 Facebook Reels/Video를 가리키지만, 그렇게 인용해서는 안 된다. 이 지면 caveat을 포함해 facebook.md 랭킹 절에 반영했다.
    • 그래프 스키마는 User–Group·Group–Item·Page–Item·Item–Item(Co-watch)이다.
  • Meta 자체 시스템(HSTU/GEM/LLaTTE/MARM)을 인용한 곳이 0건이다. Meta 소속 인용은 Fan et al. 2019 GraphRec 하나가 전부다. 같은 회사의 다른 랭킹 라인과 어떤 관계인지 논문 안에서 설정하지 않는다. 별도 팀의 병렬 라인일 가능성이 있다.
  • 오프라인 실험은 학술 벤치다. 벤치로 Delicious 60/20/20, Foursquare를 썼다. 강한 sequential/generative-rec 베이스라인이 없고, Meta 데이터로 한 심층 ablation도 없다.
  • 서빙 비용과 latency는 전면 미공개다. 8B LLM이 헤비 유저 hot path에서 실제로 어떤 SLO를 견디는지, GPU 비용과 QPS와 p99 지연이 얼마인지 논문 어디에도 없다. Netflix GenRec 서빙 층 블로그가 vLLM·MSS(Netflix의 공통 모델 추론 백엔드)·FSx pre-materialization까지 서술한 것과 크게 대비된다.

그럼에도 이 논문은 자리 3에 대한 판단의 중심을 흔든다. 2026-08까지 이 노트의 명제는 "Meta는 LLM을 랭킹 자체에는 안 쓴다"였다. 헤비 유저 코호트에 한정되더라도, 온라인 hot path에 8B LLM이 들어가는 것은 그 명제의 절반을 뒤집는다. 다만 형태는 Netflix와 다르다. Netflix는 채점 함수 자체를 LLM 백본으로 바꿨고, Meta는 그래프 위 경로 탐색기로 LLM을 넣었다. 자리 3의 실체가 회사마다 다르다는 점이 새로 드러난 사실이다.

↑ 목차

케이스: Netflix — 자리 3(LLM을 랭커로)의 첫 배포급 1차 진술

Netflix는 GenRec에서 내부 LLM을 랭커 그 자체로 쓰고, ~10% 트래픽 A/B에서 지표 개선을 보고했다. 다만 실험은 배치 연산 지면에 한정되고, 전면 롤아웃 진술은 아직 없다. 확인 — GenRec: Towards LLM-Native Recommendation at Netflix, 2026-07

  • 내부 LLM을 Netflix 데이터로 post-training한 모델이 직접 랭킹한다 확인 같은 글.
    • 학습은 2단계로 나뉜다. Netflix-adapted LLM은 드물게 갱신하고, 랭킹 post-training은 자주 갱신한다.
    • 랭킹 백본은 ~1B-10B다.
  • 피처를 벡터 대신 언어로 표현한다(verbalization). 피처 엔지니어링 문제가 프롬프트와 컨텍스트 구성 문제로 바뀐다는 1차 진술이다 확인 같은 글. 원문은 이렇다: "The context window becomes our new 'feature budget'".
  • 학습에는 reward-weighted loss를 쓴다 확인 같은 글. full RL이 아니고, GRPO는 future work다.
    • 효율 면에서는 Phase-2 라벨을 "roughly 40×" 적게 쓰고, 오프라인 MRR(정답 순위의 역수 평균)이 "about +1.6%" 개선된다.
  • 서빙은 vLLM의 prefill-only 방식이다 확인 같은 글. 후보당 1패스가 아니라 후보 집합 전체가 1패스다. LLM 서빙 인프라를 추천에 재사용하는 구체적 형태다.
    • 원문은 이렇다: "the model consumes the prompt once and scores the entire candidate set in a single forward pass, with no token-by-token decoding".
  • ~10% 트래픽 4주 A/B에서 단기·장기 지표가 유의미하게 개선됐다 확인 같은 글. Meta Groups Search의 "계획"이나 GEM의 "비유"가 아니라 실측 배포 실험이다. 단 "batch-compute recommendation surfaces" 한정이고, 전면 롤아웃 진술은 아직 없다.
  • 서빙 스택이 별도 블로그로 공개됐다 확인 — In-House LLM Serving at Netflix, 2026-07-17. GenRec은 실험적 부작용이 아니라 서빙 스택 선정 기준 자체에 들어가 있다.
    • Netflix가 vLLM을 paved-path 엔진(사내 표준 경로)으로 채택한 4대 워크로드 가운데 하나로 이 항목이 명시적으로 열거된다: "prefill-only inference for ranking and retrieval".
    • 이 글은 GenRec의 배치 서빙 비용을 결정하는 두 요소를 서술한다. 하나는 constrained-decoding batch scaling이고, 다른 하나는 모델 pre-materialization(Amazon FSx)이다.
    • V0에서는 batch scaling이 GIL 병목에 걸렸고, V1은 C++ multi-threading을 쓴다: "logits processing time staying flat as batch size grows".
    • 상세는 services/netflix.md §GenRec 서빙 층에 있다.

⚠ "LLM이 랭킹한다"는 말은 오독하기 쉽다. 채점 구조는 생성이 아니다 확인 같은 글:

"we extract a pooled hidden state h" → 아이템 i의 학습된 임베딩 eᵢ와 scoring head ϕ가 "(e.g., via dot product or small MLP)" 결합해 sᵢ, softmax로 순위. "All parameters — the backbone, scoring head, and item embeddings — are trained jointly."

LLM이 아이템 제목을 생성해서 추천하는 것이 아니다. LLM은 유저 표현 h를 만드는 인코더이고, 최종 채점은 여전히 임베딩 내적이나 작은 MLP다.

추정 그렇게 보면 자리 3의 실제 형태는 "추천의 생성 모델화"라기보다 시퀀스 트랜스포머 백본을 LLM으로 교체하고 입력 표현을 ID·피처에서 텍스트로 바꾼 것에 가깝다. Netflix FM(GPT식 시퀀스 트랜스포머, ID·피처 토큰)과 같은 골격에서 백본과 입력만 바뀐 셈이다. 관련 논의는 sequence-transformer-ranking.md에 있다. 이 구분을 놓치면 GenRec을 semantic ID(아이템을 의미 토큰 열로 표현한 ID) 계열 생성형 retrieval과 혼동하게 되는데, 둘은 서로 다른 방식이다. 생성형 retrieval은 radar.md의 "생성형 retrieval / semantic ID" 항목에서 다룬다.

Netflix의 다른 자리는 다음과 같다.

  • 자리 1 (콘텐츠 주석): LLM 주석에 대한 1차 진술이 없다. 아트워크 선택용 VLM·LLM post-training은 연구 단계 논문만 있다 확인 — arXiv 2601.02764, 2026-01.
    • 콘텐츠 메타데이터는 전통적으로 태깅 기반인데, 편성 카탈로그라 아이템당 풍부한 메타데이터가 이미 있어 UGC(유저가 올린 콘텐츠) 주석 수요 자체가 작다 추정.
  • 자리 6 (자연어 지시): 대화형 검색 베타가 있다. 자연어로 기분과 의도를 말하면 추천한다 확인 — About Netflix 2025.
    • OpenAI 협업설은 2차 보도이고, 1차 출처는 확인하지 못했다 추정.

X·Meta와 나란히 놓으면, X는 LLM을 심판(주석·안전)으로, Meta는 피처 인코더(ads)와 오프라인 심판, 2026-08부터는 헤비 유저 요청의 그래프 경로 추론기로, Netflix는 랭커 그 자체로 넣었다. 셋 중 Netflix만 서빙 경로의 채점 함수가 LLM이다. 단 공개된 실험은 배치 연산 지면에 한정된다.

추정 코퍼스 크기가 이 순서를 설명할 수 있다: 후보가 수천 개면 LLM 추론 비용이 감당되고, X·Meta처럼 수억 코퍼스에 ms 단위 예산이면 자리 1·2(오프라인)부터 들어가는 것이 자연스럽다. 상세는 netflix.md에 있다.

↑ 목차

프레이밍 검증 — "X는 제품 표면, Meta는 업스트림"이 맞는가

이 노트를 시작할 때 세운 가설은 절반만 맞다. 여기서 정정해 둔다.

  • 틀린 절반: X의 Grok은 유저에게 보이는 제품 표면이 아니다. Grox는 nearline 파이프라인이고, 유저는 slop score도 PTOS 판정도 보지 못한다. 오히려 유저 대면 자연어 표면을 가진 쪽은 Meta다(Dear Algo, Your Algorithm). 가설이 이 부분을 거꾸로 봤다.
  • 맞는 절반: X의 LLM 출력은 서빙 경로에서 실제로 결정을 내린다. 필터를 통과시키고 광고 인접성을 게이팅한다(brand_safety.rs). 2026-08 ConnectionMind 전까지 Meta의 공개된 LLM 사용은 Groups Search의 오프라인 평가와 HIR의 오프라인 피처 인코딩이었고, 서빙 경로 진입은 "we plan to"였다.
    • ConnectionMind는 활동량 상위 5–10% 유저의 요청을 LLM으로 보낸다고 밝혔다 확인 — arXiv 2608.10187 §6.1.

정확한 문장은 이렇다 추정. 등급은 중간이다. 공개 문헌 기준으로는 견고하지만, 미공개 시스템에 대해서는 아무 말도 하지 못한다. 2026-08-13 갱신: ConnectionMind로 두 번째 문장이 뒤집혔다.

X는 LLM 판정을 프로덕션 의사결정에 물려 놨고, Meta는 LLM을 (광고) 피처 인코더·(Groups Search) 오프라인 심판, 그리고 이제 (미공개 short-form video 지면) 헤비 유저 hot path의 그래프 경로 추론기로 쓴다. 유기 피드 랭킹 경로에 LLM이 들어간다는 1차 진술은 Netflix GenRec(2026-07, LLM = 채점 함수)이 처음이었고, Meta ConnectionMind(2026-08, LLM = 그래프 경로 추론기)가 두 번째다.

⚠ 공개 비대칭이 결론처럼 보일 위험이 여전히 이 노트의 최대 리스크다. 이 프레이밍이 흔들릴 수 있는 부분은 네 가지다.

  • Meta는 유기 피드 스택을 거의 공개하지 않는다. 부재가 곧 미사용은 아니었고, 실제로 ConnectionMind가 나오면서 이 부분이 확인됐다.
  • X는 소스가 공개돼서 있는 것을 다 볼 수 있다.
  • Netflix의 진술은 batch-compute 지면 한정이고, Meta의 진술은 헤비 유저 5–10% 한정이다. 두 회사 모두 "전면 hot path 100% LLM"은 아니다.
  • 세 회사를 한 줄에 세울 때 지면 성격과 서빙 코호트 차이를 지워서는 안 된다.

추정(secondhand) Digiday 2026 기사가 같은 방향을 보도했다. 기사 제목은 "Meta's LLM bet has yet to touch its core ads business"다. 2차 보도이므로 근거로 쓰지 않았고, 위 결론은 Meta 1차 문서만으로 세웠다.

↑ 목차

Meta 쪽 아직 확인 못한 것

이 노트의 최종 갱신일(2026-08-13) 기준으로 Meta 쪽 질문은 대부분 열려 있다. LLaTTE의 semantic feature 출처만 2026-08-09에 해결됐고, 거기서도 후속 질문이 하나 남았다.

  • Dear Algo / Your Algorithm의 자연어 파서. LLM인지 분류기인지, 파이프라인 어디에 붙는지(후보 필터 / 스코어 부스트) 공개된 정보가 전혀 없다.
  • 유기 피드 콘텐츠의 LLM 주석 존재 여부. ads 쪽(HIR)만 확인됐다.
  • LLaTTE의 semantic feature가 LLM 출력인가. 해결(2026-08-09). 논문이 "fine-tuned LLaMA models"라고 직접 쓰고, 위 A 항목에서 다뤘다. 남은 질문은 그 LLaMA 임베딩이 유기 피드 랭커에도 들어가는가이고, 이것은 아직 확인하지 못했다.
  • Groups Search의 "LLMs in Ranking" 계획이 실제 배포됐는가. 2026-04 시점에는 미래형이었다.
  • Meta에 X의 PTOS에 해당하는 LLM 안전 판정이 있는가. Meta는 콘텐츠 정책 집행을 추천 문헌과 분리해 다뤄서, 이 저장소 범위에서는 확인하지 못했다.

↑ 목차

누가 이걸 쓰는가

X(Grox), Meta 광고와 Facebook Groups Search, Netflix(GenRec)는 LLM을 쓴다는 사실을 1차 자료로 밝혔다 확인. Instagram과 Threads는 유저가 자연어로 랭킹 선호를 입력하는 기능을 공개했다 확인. 다만 두 서비스의 해당 뉴스룸 글 본문은 어떤 모델이 그 자연어를 파싱하는지 밝히지 않는다 관찰 2026-08-09.

  • X: Grox를 쓴다. 2026 세대에서 전용 서비스로 분리됐다 확인.
  • X (2025 Scala 세대): Grok 기반 필터와 피처가 home-mixer/tweet-mixer에 먼저 들어갔다. Grok 관련 파일 24개가 전부 2025-09-03 커밋에서 새로 추가됐고, 2023 스냅샷에는 0개다. 확인 twitter/the-algorithm c54bec0, 2025 — git ls-tree -r --name-only c54bec0 | grep -ci grok = 24, 같은 명령이 2023 tip 72eda9a에서는 0이다.
    • 파일의 예는 GrokGoreFilter, GrokNsfwFilter, GrokSpamFilter, GrokViolentFilter, GrokSlopScoreRescorer, GrokAnnotationsFeatureHydrator다.
    • 그중 안전 필터 4개는 git의 copy detection 기준으로 기존 PreviouslyServedTweetsFilter.scala를 61~66% 복사해 만든 보일러플레이트다. 확인 — git show --name-status -C -C --diff-filter=C c54bec0
  • Meta ads: LLM 피처는 실재한다. HIR의 "customized LLM inference engine"(광고주·상품 콘텐츠 인코딩, 2026-07)과 LLaTTE 논문의 "fine-tuned LLaMA models"가 만드는 dense content embedding이 랭커 입력으로 들어간다 확인.
    • 별개로 GEM/LLaTTE/MARM 블로그의 "LLM-scale"은 모델 아키텍처에 대한 비유다. 두 가지를 구분해야 한다(위 A/B 표). 상세는 facebook.md에 있다.
    • 2026-10-19 GenRecs Tokenization 블로그 기준으로 Meta 광고 랭킹·retrieval은 아이템 ID 대신 의미 토큰(semantic ID) 열을 입력 표현으로 쓰고, GEM·Adaptive Ranking Model과 함께 전환 +0.35%를 냈다 확인 — GenRecs Tokenization(블로그).
      • 토큰은 사전학습 멀티모달 모델의 콘텐츠 임베딩과 참여 기반 표현을 합쳐 양자화해 만든다 확인. 위 A/B 표로 보면 A(표현)를 ID 자리까지 넓힌 진술이다 추정.
      • +0.35%의 측정 시점은 2026-02다(각주 "Meta Internal Data, measured in February 2026") 확인. 세부는 daily 2026-10-21에 있다.
  • Facebook Groups Search: Llama 3를 오프라인 automated judge로 쓴다. 랭킹 단계의 LLM은 계획 단계다. 확인
  • Instagram: Your Algorithm에는 AI가 생성한 토픽 요약과 자유 텍스트 입력이 있다. 모델은 미공개다. 확인(기능) / 관찰 2026-08-09(모델 미기재, 해당 뉴스룸 글 본문) → instagram.md
  • Threads: Dear Algo / Your Algo가 있다. 랭킹 선호를 공개 소셜 객체로 만든 유일한 사례다. 리포스트하면 남의 선호가 내 피드에 적용된다. 파서는 공개되지 않았다. 확인(기능) / 관찰 2026-08-09(모델 미기재, 해당 뉴스룸 글 본문) → threads.md
  • Facebook Feed (유기): 유기 피드 자체에 대한 시스템 카드나 블로그 진술은 여전히 없다.
    • 단 ConnectionMind(2026-08)는 미공개 "short-form video platform"에 Llama 3.1-8B를 헤비 유저 hot path로 배포했다고 밝혔다 확인(진술 자체).
    • 그래프 스키마상 그 지면은 Facebook Reels/Video가 유력하나, 확정할 수는 없다 추정(지면). 상세는 facebook.md ConnectionMind 절에 있다.
  • Netflix: GenRec에서는 LLM이 랭커 자체다(10% 트래픽 A/B, 2026). 대화형 검색은 베타이고, 아트워크 LLM은 연구 단계다. 확인 상세는 netflix.md에 있다.
  • 그 외 서비스: 아직 조사하지 않았다. 열린 질문이다.

↑ 목차

출처

X

Meta

Netflix

↑ 목차