카카오 추천팀 kakao tech Copyright 2022. Kakao Corp. All rights reserved. Redistribution or public display is not permitted without written permission from Kakao.
로직을 지속적으로 개선하는 조직 - 추천 시스템과 머신 러닝 기술을 통해 카카오 서비스의 성공을 견인하는 것이 목표 - 멜론, 카카오웹툰, 픽코마, 미디어다음 뉴스, 브런치, 선물하기 등 다양한 서비스의 추천 시스템 제공 - 콘텐츠 부터 커머스 까지 넓은 도메인을 다룸 - 실제 서비스에 추천 시스템을 적용하기 위한 다양한 업무를 수행 - 대규모 데이터 처리를 위한 파이프라인 구축 - 서비스 데이터 분석 및 목표 지표 디자인 - 추천 모델 연구 - 실시간 서빙을 위한 추천 API 개발
문제 상황에 대해 공유합니다. - Cold - start Problem - Diversity - Response Time - 문제 상황에 대응하는 카카오의 접근법을 공유합니다. - Exploration - Exploitation - Diversi fi cation - Approximate K - NN and Optimization 이 발표에서는
하기 어려운 상황 - Item cold - start - 새로 추가된 아이템이라 아이템의 소비 이력이 없음 - User cold - start - 서비스에 처음 접속하는 (또는 다른 디바이스로 접속하는) 사용자 - 실제 추천 환경에서 매우 빈번하게 발생함 - 1시간 동안 발행되는 뉴스 기사 수는 1000개 이상 - 대부분의 뉴스 기사는 4-6시간이 지나면 사용자가 소비하지 않음 - 전면 풀 교체가 일어나는 경우도 존재함 Cold - start Problem
- Exploitation 전략을 사용 - 신규 아이템에 대해서 추천을 수행해보면서 목표 메트릭을 수집 (Exploration) - 수집된 메트릭을 바탕으로 메트릭을 높일 수 있는 방향으로 추천 (Exploitation) Methods for Item Cold - start Problem Cold Item Warm Item
과정을 반복적으로 수행 - Multi - armed Bandit / Contextual Bandit 문제를 풀 수 있는 여러 가지 알고리즘을 사용 - Thompson Sampling - UCB (Upper Con fi dence Bound) - LinUCB (Linear Upper Con fi dence Bound) - 간단한 확률 모델링을 넘어서 더 복잡한 모델을 적용하는 연구를 진행 중 - Neural Bandits - DQN-based Recommender Systems Methods for Item Cold - start Problem
종합적으로 사용 - 인기순 추천(Most Popular) 목록을 항상 유지하고, User cold - start 케이스에 활용 - 다른 서비스의 사용자 행동 로그로 부터 관심사, 성/연령 정보를 추정해 추천에 활용 - 다른 추천 모델이 생성한 추천 결과를 추정 관심사, 성/연령 정보를 통해서 모사 - 관심사 추정 정보를 고도화 하는 실험을 준비 중 - 카카오 서비스 사이의 Cross - domain recommendation 문제 - 추천을 위한 유저 임베딩 생성 후 각 추천 영역에 전이 학습(Transfer Learning) 적용 Methods for User Cold - start Problem
같은 아이템만 추천하면 점점 좁은 영역으로 소비 영역 수렴이 발생하게 됨 (feedback loop) - 카카오 뷰 -> 사용자들이 다른 영역에서 콘텐츠(보드)를 소비할 수 없기 때문에 추천에 의한 영향이 큼 - 전반적으로 인기가 높은 아이템이 사용자의 소비 이력에 추가될 확률이 점점 높아짐 - 외부 요인이 없다면, 시간이 지날 수록 추천 결과가 수렴하는 현상이 발생 - 추천 품질 측면이 아니더라도 다양성이 필요한 경우가 있음 - 선물하기 -> 기프티콘 이외의 다른 상품들도 선물이 이뤄질 수 있도록 해야함 - 양면 시장(Two - sided market)인 서비스의 경우 이 부분이 부각됨 - 아이템 생산자 역시, 자신의 아이템이 소비가 많이 되어야 이후 새로운 아이템을 생성할 동인이 생김 Diversity
- 인접한 순위의 아이템들끼리 비교해 비슷한 아이템일 경우 순위 재조정 - Diversity의 기준을 어떤 것으로 잡아야 하는지는 서비스와 추천 영역에 따라 다름 - 카카오 뷰 -> 추천하는 보드의 카테고리가 다양해지도록 튜닝 - 멜론 -> 추천하는 음악의 아티스트, 장르가 다양해지도록 튜닝 - Diversity를 늘리는 것이 서비스의 성장에 도움이 되는지 데이터를 통해 검증하는 중 - 다양한 아이템을 소비하는 사용자가 그렇지 않은 사용자보다 서비스를 더 길게 사용하나? - 다양하게 아이템을 노출 시켜주면 실제로 다양하게 아이템을 소비하는가? Diversity
테스트를 위한 실험 버킷 설정 - 추천 모델의 결과 계산 - 아이템 필터링 - 기존에 소비한 아이템 제거 - 서비스 요구사항에 부합하지 않는 아이템 제거 - 더 이상 서비스 되지 않는 아이템, 연령에 따른 필터링 등 - 메타 데이터 결합 - 후처리 로직 Response Time
요구 응답 시간 기준은 높은 편 - 어떤 서비스의 경우, 추천 결과가 30ms 내에 나와야 함 - 응답 시간 제약으로 인해 추천 모델 선택에 제약이 있음 - 복잡한 랭킹 모델(Deep learning based ranking)의 적용의 어려움 - 대부분은 내적(dot product)으로 계산할 수 있는 랭킹을 적용함 - 아이템 개수가 매우 많은 경우 단순한 모델 조차도 계산 시간이 부담됨 - 멜론 - 매 요청마다 50만개 이상의 아이템을 정렬 해야 함 Response Time
al., RecSys 2016) - Candidate generation 단계에서는 랭킹 모델의 부담을 줄이기 위해 가벼운 모델로 1차 필터링 - 단순 아이템 인기도로 필터링 하는 경우도 있음 - Ranking 단계에서 현재 상황과 사용자에게 맞는 아이템을 2차적으로 필터링해서 추천에 적용 Response Time
되는 주요 부분은 아이템별 스코어를 계산하는 마지막 레이어(Output) - 데이터 입력하는 부분은 대부분 0이므로 빠르게 연산 가능 - 마지막 레이어의 행렬을 미리 Approx. K - NN 알고리즘으로 인덱스를 만들어 추천 요청시 빠르게 처리 - Kakao N2 (https:/ /github.com/kakao/n2) Response Time
추천 시스템 구축 - 추천 시스템을 실제 서비스에 적용하는 데는 여러가지 도전적인 어려움이 있음 - Cold - start Problem -> Bandits (Exploration - Exploitation), Cross - domain approach - Diversity -> Diversi fi cation - Response Time -> 2-stage 추천 모델, Approx. K - NN 마무리