GenRec: 넷플릭스에서 LLM 네이티브 추천을 향하여 (새 탭에서 열림)
Netflix의 GenRec은 사용자 이력과 콘텐츠 메타데이터를 자연어로 표현하고, Netflix에 맞게 후처리 학습한 LLM을 추천 랭커로 활용하는 시스템이다. 기존의 대규모 수작업 피처와 특화 아키텍처 의존도를 줄이면서도, 카탈로그 인식 점수 헤드와 보상 신호를 통해 개인화·장기 사용자 가치·비즈니스 제약을 반영한다. 대규모 A/B 테스트에서 기존 랭커보다 단기 및 장기 지표를 유의미하게 개선했으며, 더 적은 라벨 데이터와 입력 신호만으로도 경쟁력 있는 성능을 보였다.
기존 추천 시스템의 복잡성과 LLM의 가능성
- Netflix의 기존 모델은 사용자·아이템·상호작용에 대한 수천 개의 수작업 피처를 사용한다.
- 시퀀스 모델링, 피처 상호작용, 멀티태스크 학습 등 다양한 특화 구조가 콘텐츠 유형과 제품 화면별로 구축되어 있다.
- 새로운 콘텐츠 유형이나 추천 화면을 추가하려면 피처 설계, 모델 구조, 인프라, 실험을 함께 변경해야 한다.
- LLM은 사용자 이력과 아이템 정보를 텍스트로 통합하고, 자연어 기반의 의미 관계와 추천 조건을 표현할 수 있다.
- 하지만 일반 LLM은 인기 콘텐츠 편향, 카탈로그에 없는 아이템 생성, 비즈니스 제약 무시, 부족한 개인화 등의 문제가 있다.
GenRec의 추천 문제 정의
- 사용자 (u), 컨텍스트 (\tau), 시간 (t), 상호작용 이력 (H)를 입력으로 받아 Netflix 전체 카탈로그 (C)의 순위 (\pi)를 생성한다.
- 컨텍스트에는 기기, 화면, 지역, 시간 등이 포함된다.
- 후보군이 주어지면 Top-K 순위를 만들고, 후보군이 없으면 전체 카탈로그를 대상으로 순위를 계산한다.
- 단순 클릭이나 재생 수가 아니라 만족도와 유지율을 대변하는 장기적 회원 효용을 최적화한다.
2단계 학습 구조
Netflix 맞춤형 기반 LLM
- 오픈소스 LLM을 Netflix의 독점 데이터로 적응시킨다.
- Netflix 콘텐츠 이해, 회원 행동과 선호 패턴, 일반적인 언어 이해 능력을 학습한다.
- 여러 애플리케이션이 공유하는 Netflix 인식 기반 모델로 사용된다.
- 콘텐츠 변화에 맞춰 자주 갱신하기보다는 비교적 드물게 업데이트된다.
GenRec 후처리 학습
- 기반 LLM을 추천 순위화와 제어에 특화된 모델로 전환한다.
- 랭킹 데이터와 복수의 보상 신호를 사용한다.
- 새로운 콘텐츠와 변화하는 취향을 반영하기 위해 더 자주 갱신한다.
- Netflix의 LLM 서빙 비용과 지연시간을 고려해 최적화한다.
상호작용 로그를 대화 데이터로 변환
- Netflix의 조회, 재생 시간, 좋아요·싫어요, 찜하기, 중단 등 방대한 이벤트를 추천 대화 형식으로 변환한다.
- 사용자 메시지에는 다음 정보가 포함된다.
- 현재 화면과 기기 같은 컨텍스트
- 사용자 프로필과 과거 이력
- 아이템 메타데이터
- “다음에 시청하거나 좋아요를 누를 콘텐츠를 추천하라”와 같은 과제
- 어시스턴트 메시지에는 실제 회원 행동이 기록된다.
- 어떤 콘텐츠를 재생했는지
- 얼마나 오래 시청했는지
- 어떤 피드백을 남겼는지
- 학습 시에는 언어 모델링과 추천 랭킹을 함께 지원하지만, 추론 시에는 답변 텍스트를 생성하지 않는다.
- 실제 서비스에서는 verbalized context를 입력하고, 별도의 카탈로그 인식 점수 헤드로 콘텐츠를 정렬한다.
피처 엔지니어링에서 컨텍스트 엔지니어링으로
- 기존 추천 시스템이 밀집 벡터와 수작업 피처를 중심으로 한다면, GenRec은 이력과 상황을 자연어로 변환해 LLM의 의미 공간에 입력한다.
- 모델이 아이템 간 관계, 반복 시청, 변화하는 관심사 같은 고차원 패턴을 직접 학습하도록 한다.
- 모든 상호작용을 그대로 입력하면 토큰 한도와 비용 문제가 발생하므로, 컨텍스트를 선별하고 압축한다.
- 긴 재생이나 긍정 피드백처럼 신호가 강한 이벤트는 자세히 유지
- 짧은 재생이나 빠른 탐색처럼 신호가 약한 이벤트는 제거
- 폭주 시청처럼 반복적인 행동은 요약
- 신작이나 콜드스타트 아이템은 필요한 경우 더 자세히 설명
- 제한된 토큰 예산 안에서 최근성과 신호 강도가 높은 이력을 우선한다.
- 프롬프트의 공통 접두사를 늘려 prefix caching을 활용하고, 서빙 비용을 낮춘다.
- 결과적으로 모델 개발의 초점이 개별 피처 제작에서 정보 밀도 높은 입력 문맥 설계로 이동한다.
랭킹·언어·보상 신호를 결합한 학습
카탈로그 인식 랭킹 목표
- 충분히 긴 재생이나 강한 명시적 피드백처럼 가치가 높은 참여를 긍정 샘플로 사용한다.
- 임계값과 노이즈 제거 로직으로 부정확한 행동 신호를 정제한다.
- 전체 카탈로그 또는 후보군에 대한 cross-entropy 손실을 사용해 긍정 아이템의 점수를 높인다.
- 자유로운 텍스트 생성이 아니라 실제 Netflix 카탈로그 안에서 점수를 계산하므로, 존재하지 않는 콘텐츠를 추천하는 문제를 줄인다.
언어 모델링 목표
- 입력과 출력의 텍스트에 대해 언어 모델링 목표를 유지한다.
- 자연어로 표현된 사용자 이력과 콘텐츠 메타데이터를 이해하는 능력을 보존한다.
- 향후 추천 이유나 설명 생성과 같은 텍스트 기반 기능으로 확장할 가능성도 유지한다.
보상 기반 정렬
- 단기 클릭이나 재생만 최적화하지 않고 장기적인 회원 만족도를 반영한다.
- 영화, 시리즈, 게임, 라이브, 팟캐스트 등 콘텐츠 유형 간 균형 같은 비즈니스 요구사항을 고려한다.
- 여러 보상 신호를 보상 가중 손실에 반영해 랭킹 결과가 Netflix의 장기 목표와 맞도록 조정한다.
서빙 효율성과 성능
- GenRec은 Netflix의 LLM 서빙 스택에서 prefill-only 방식으로 실행된다.
- 추론 시 토큰을 생성하지 않고 입력을 처리해 아이템별 점수를 계산하므로 생성형 LLM보다 비용 효율적이다.
- 기존의 성숙한 프로덕션 랭커와 비교한 대규모 A/B 테스트에서 단기 및 장기 온라인 지표를 모두 통계적으로 개선했다.
- Phase 2 학습에 필요한 라벨 데이터와 입력 신호도 기존 시스템의 일부만 사용했다.
실무적으로는 LLM을 추천 시스템에 도입할 때 모든 로그를 무작정 텍스트화하기보다, 카탈로그 제약을 보장하는 점수 헤드, 장기 보상 설계, 토큰 예산 관리, 캐싱 전략을 함께 설계하는 것이 중요하다. GenRec의 사례는 추천 모델의 성능뿐 아니라 피처 유지보수 비용과 새로운 추천 시나리오의 확장성까지 고려할 때 LLM 기반 구조가 유효할 수 있음을 보여준다.