들어가며: 추천 시스템의 진화, 이제는 '페이지'를 생성한다
여러분이 넷플릭스 앱을 열었을 때 보는 화면을 잠시 떠올려 보세요. '지금 뜨는 콘텐츠' 행, '계속 시청하기' 행, 그리고 그 안에 있는 수많은 작품들. 이 모든 것이 사용자 한 명 한 명을 위해 개인화되어 구성됩니다. 기존에는 이 과정이 정말 복잡했습니다. 후보군을 추리는 단계(Candidate Generation), 행(Row)을 랭킹하는 단계, 행 안의 개별 콘텐츠를 랭킹하는 단계 등 여러 모델이 파이프라인처럼 연결되어 있었죠. 각 단계의 목표가 서로 달라 최종 결과물이 어딘가 어긋나기도 했고요.
넷플릭스가 공개한 GenPage는 이러한 복잡한 구조를 완전히 뒤집는 시도입니다. 대형 언어 모델(LLM)이 프롬프트에 따라 텍스트를 생성하듯, GenPage는 사용자 정보를 프롬프트로 받아 홈페이지 전체를 하나의 응답으로 생성합니다. 행과 콘텐츠, 그리고 레이아웃까지 한 번에 만드는 것이죠. 이 넷플릭스 테크 블로그의 원문을 근거자료로, 이 기술이 가져올 변화와 한계를 면밀히 분석해 보겠습니다.
핵심 개념: 모든 것을 토큰으로, 그리고 생성으로
GenPage의 가장 큰 특징은 데이터 표현 방식에 있습니다. LLM이 텍스트를 토큰으로 변환하듯, GenPage는 사용자 시청 이력, 프로필 정보, 그리고 생성될 홈페이지의 구조까지 모두 도메인 특화 토큰으로 변환합니다.
- 컨텍스트 토큰: 사용자의 시청/검색/찜 이력, 프로필 언어, 접속 시간대, 기기 정보 등을 담습니다.
- 페이지 토큰: 홈페이지의 각 행(예: '한국 TV 프로그램')과 각 콘텐츠(예: '오징어 게임')를 하나의 고유한 토큰으로 표현합니다.
이렇게 토큰화된 데이터로 모델을 학습시키고, 실제 서비스에서는 사용자 컨텍스트 토큰을 프롬프트로 넣어 홈페이지 토큰을 자동 회귀(Autoregressive) 방식으로 생성합니다. 마치 챗GPT가 답변을 생성하듯, 홈페이지를 '생성'하는 것이죠.
이 방식의 장점은 명확합니다.
- 엔드투엔드 모델링: 여러 단계의 모델을 하나의 트랜스포머로 통합해 유지보수가 쉬워지고, 단계 간 목표 불일치 문제를 해결합니다.
- 페이지 단위 최적화: 강화학습(RL)을 통해 페이지 전체의 보상을 최적화할 수 있습니다. 예를 들어, '계속 시청하기' 행이 상단에 있으면 사용자의 즉각적 만족도는 높지만 페이지 탐색을 덜 할 수도 있는데, 이런 행 간의 상호작용을 모델이 직접 학습할 수 있습니다.
- 확장성: 모델 크기, 데이터, 컴퓨팅 파워를 늘리는 것만으로 성능 향상을 꾀할 수 있는 명확한 길을 제시합니다.
- 유연성: 라이브 이벤트, 게임, 팟캐스트 등 새로운 콘텐츠 타입이나 개인화된 UI 컴포넌트를 구조적 변경 없이 지원할 수 있습니다.
실제 적용: 넷플릭스의 생산 환경 사례 연구
GenPage는 단순한 연구에 그치지 않고 실제 넷플릭스 서비스에 적용되어 A/B 테스트를 진행했습니다. 그 결과는 꽤 놀랍습니다.
- 핵심 지표 향상: 기존의 최적화된 다단계 추천 시스템과 비교해 핵심 사용자 참여 지표에서 통계적으로 유의미한 향상을 보였습니다.
- 지연 시간 20% 감소: 여러 랭킹 단계와 복잡한 피처 계산을 하나의 트랜스포머로 대체하고, 커스텀 토크나이제이션과 하이브리드 행 디코딩을 통해 생성 단계 수를 줄여 오히려 응답 속도가 20% 빨라졌습니다.
이 과정에서 넷플릭스가 직면한 현실적인 문제와 해결책은 우리에게 많은 시사점을 줍니다.
신규 콘텐츠(Cold Start) 문제
새로 추가된 콘텐츠는 상호작용 데이터가 없어 임베딩을 학습하기 어렵습니다. 넷플릭스는 이를 위해 두 가지 전략을 사용합니다.
- 컨텍스트 주입(Context Injection): 시놉시스, 출연진, 장르 등 콘텐츠의 메타데이터를 컨텍스트 토큰에 직접 주입합니다.
- 의미적 임베딩 퓨전(Semantic Embedding Fusion): 콘텐츠 ID 임베딩과 시놉시스, 자막 등에서 추출한 의미 기반 임베딩을 결합해 사용합니다. 학습 중에는 일부러 콘텐츠 ID를 '폴백 토큰'으로 교체해, 메타데이터만으로도 추천을 잘할 수 있도록 모델을 훈련시킵니다.
비즈니스 규칙 준수
홈페이지는 단순 추천 이상의 제약 조건을 가집니다. 특정 행을 고정한다거나, 한 행에 중복된 콘텐츠를 넣지 않는다거나, '코미디' 행에는 코미디 영화만 넣어야 하는 등의 규칙이 있죠. GenPage는 이런 규칙을 **제약된 디코딩(Constrained Decoding)**으로 해결합니다. 생성 각 단계에서 비즈니스 규칙에 따라 토큰 마스크를 만들어 규칙에 맞는 토큰만 생성되도록 강제하는 것입니다. 커스텀 토크나이제이션 덕분에 각 토큰이 행이나 콘텐츠에 1:1로 매핑되어 규칙 적용이 매우 단순해졌습니다.
실무 적용을 위한 인사이트
넷플릭스의 사례는 단순히 '멋진 기술'을 넘어, 생성형 모델을 실서비스에 적용하려는 모든 개발자에게 중요한 교훈을 줍니다.
- 프롬프트 엔지니어링의 중요성: 실험 결과, 모델 크기를 120M에서 900M 파라미터로 키운 것보다, 컨텍스트(프롬프트)를 풍부하게 만든 것이 성능 향상에 훨씬 큰 영향을 미쳤습니다. 모델 용량보다 입력 정보의 질과 표현 방식이 더 중요하다는 사실을 보여줍니다. 이는 우리가 LLM을 활용한 어떤 시스템을 만들 때도 마찬가지로 적용되는 원칙입니다.
- 강화학습의 부수 효과: RL 파인튜닝은 명시적으로 목표에 넣지 않았음에도 홈페이지의 다양성을 높였습니다. 이는 RL이 페이지 전체를 최적화하면서 행과 콘텐츠 간의 상호작용을 학습했기 때문입니다. 단순히 개별 아이템의 클릭률을 높이는 것을 넘어, 사용자에게 더 나은 페이지 구성을 제공하는 방향으로 모델이 진화한 것이죠.
이 기술의 한계 또는 주의사항
GenPage는 분명 혁신적이지만, 아직 해결해야 할 과제도 명확합니다.
- 긴 컨텍스트 처리: 사용자의 전체 시청 기록을 모두 토큰화하는 것은 비용이 너무 커서, 현재는 요약된 정보를 사용합니다. 이는 결국 일부 수동적인 피처 엔지니어링이 여전히 필요함을 의미합니다.
- 보상 모델의 한계: RL 학습 시 사용하는 보상 모델은 주로 과거 프로덕션 정책으로 생성된 데이터로 학습됩니다. 따라서 프로덕션 정책과 많이 다른 페이지를 생성하면 보상 모델의 예측이 부정확해질 수 있고, 이는 보상 해킹(Reward Hacking)의 위험으로 이어집니다. 이를 방지하기 위해 KL 패널티를 사용하지만, 이는 탐험의 폭을 제한할 수 있습니다.
- 예상치 못한 분포 변화: A/B 테스트에서 노출 콘텐츠의 카테고리 분포(신규 vs 기존, 영화 vs TV 프로그램)가 의도치 않게 변하는 것을 확인했습니다. 이는 모델이 기존 시스템보다 더 정밀하게 개인화하면서 발생한 현상으로 보이지만, 이로 인해 보상 시스템과 같은 기존 컴포넌트가 새로운 패러다임과 정렬되지 않을 수 있습니다.
결론: 추천 시스템의 새로운 패러다임, 그리고 우리의 준비
GenPage는 추천 시스템의 패러다임을 '랭킹'에서 '생성'으로 전환한 의미 있는 사례입니다. 비록 넷플릭스의 규모와 인프라가 아니면 적용하기 어려운 측면이 있지만, 그 핵심 아이디어는 분명 우리에게도 시사하는 바가 큽니다.
- 도메인 특화 토크나이제이션: 범용 텍스트 토크나이저 대신 도메인에 특화된 토큰을 사용해 효율성과 제어력을 동시에 확보할 수 있다는 점.
- 단일 모델로의 통합: 복잡한 파이프라인을 하나의 생성 모델로 통합함으로써 유지보수 비용을 줄이고, 페이지 단위의 최적화를 가능하게 한다는 점.
- 데이터와 프롬프트의 중요성: 무작정 모델 크기를 키우기보다, 입력 데이터의 품질과 표현 방식을 개선하는 것이 더 효과적일 수 있다는 점.
생성형 AI가 단순히 콘텐츠를 만드는 것을 넘어, 사용자 경험을 구성하는 핵심 인프라로 자리 잡는 시대가 오고 있습니다. 이 변화를 이해하고 준비하는 것이 우리의 다음 과제가 될 것입니다.
함께 보면 좋은 글
