1. 서문
- 세 가지 중요한 잣대: Scale, Freshness, Noise
- Scale: 데이터가 매우 많으므로 scalability가 중요하다.
- Freshness: 새로운 비디오가 추가되었을때 추천에 바로바로 반영되어야 한다.
- Noise: 데이터의 sparsity, ground truth의 부재, 거의 항상 implicit feedback만 갖고있다, meta data가 엉망인 점 등을 고려해야함.
- 구현
- Tensorflow를 사용함
- 전체 시스템은 10억개정도의 파라미터 존재
- 트레이닝 데이터는 수천억개정도.
2. 시스템 개요
- 전체 구조는 (파란 블럭)
- 단계 1: 추천할 후보 비디오를 몇 백개 내외로 뽑아내고
- 단계 2: 다시 그 중에서 자세하게 순위를 매겨서 추천
- 이 과정에서 사용자의 이용 내역과 맥락을 감안합니다.
- 개발 과정은
- precision/recall/ranking loss등 offline에서 측정 가능한 것들을 일단 측정해서 어느정도 범위를 줄이고
- watch time, click-through rate은 A/B test를 거친다.
- A/B test 결과 (실시간 피드백)가 항상 offline 실험 (전체 히스토리를 retrospective하게 보고 평가하는것)과 일치하진 않는다.
3. 단계 1: Candidate generation
- 기존에는 Ranking loss를 이용한 Matrix factorisation [23]을 사용
- MF를 대체하기 위해 간단한 뉴럴넷을 사용한적 있었으며 이때는 사용자가 과거에 본 비디오 내역만 이용했었다.
3.1 Recommendation as classification
- 문제 정의
- 추천: 엄청나게 클래스가 많은 multiclass 분류 문제로 재정의 (Extreme multiclass classification)
- user, context가 주어지면 특정 시간에 이 비디오를 볼 확률을 구함. 즉,
- v_j : context embedding
- u: user embedding
- 이 학습 과정에서 사용자가 누른 '좋아요' 같은 정보는 사용하지 않고 비디오를 끝까지 봤는지/아닌지만 사용.
- Extreme multiclass classification 효율적으로 어떻게 구현?
- Offline에서는 (즉, 미리 계산)
- negative class를 샘플링 (i.e., skip-gram negative sampling)
- loss function으로는 각 class (비디오)마다 (binary) cross-entropy를 사용
- 대략 수천개정도의 negative sample 이용
- hierarchical softmax는 (이런저런 이유로) 사용하지 않음.
- at serving time (추천을 실시간으로 할때는)
- 드디어 사용자에게 추천을 N개의 비디오를 고르는 시간
- 기존에는 [24]처럼 hashing을 사용했고 이번에도 마찬가지.
- 최종적으로는 (위의 식처럼) dot-product space에서 가장 가까운 아이템 (nearest neighbour)를 찾는 과정.
- A/B test 결과 nearest neighbour 알고리즘간에 추천성능 차이는 없음
3.2 구조
- 사용자가 본 영상 내역을 embedding vector (좌측하단 파란색)로 바꿈
- 여러 영상의 embedding vectors를 평균내서 사용. (sum, component-wise max 등 사용해봤으나 평균이 제일 좋음)
- Fully-connected layer + ReLU 사용
3.3 Heterogeneous signals
- 개요
- 검색 내역 (그림의 하단 초록색)도 영상처럼 embedding을 구함
- 그 외에 사용자의 지역정보/기기 등 간단한 정보도 embedding을 구하고 이 값을 concatenate함.
- 성별, 나이 등 값은 [0, 1]로 바꿔서 넣음.
- "비디오의 나이" (example age)
- 새로 나온 비디오를 잘 보여주는것이 중요하다.
- 사용자가 얼마나 새로운 비디오를 선호하는지도 중요
- 트레이닝 데이터 특성상 머신러닝을 단순하게 적용하면 오래된 아이템들이 더 추천을 많이 받게 된다.
- 이를 해결하기위해 아이템(비디오)의 "나이"를 입력으로 넣어준다.
- 위의 그래프를 보면 아이템의 나이를 넣어주면 (빨강색) 업로드 직후에 사람들이 많이 감상하는 경향을 예측하고 있다.
3.4 Label and context selection
- 추천은 전형적인 "Surrogate problem"이다. -- 다른 문제를 통해 추천 문제를 해결할 수 있다.
- 예를 들어 영화 평점 예측 알고리즘은 영화 추천에 사용 가능.
- 그러면 유튜브에선 어떤 문제를 이용해야하는가?
- 학습 데이터: 잘못 만들면 추천엔진이 exploit >> explore 하게 된다.
- 유튜브 웹사이트를 통해 본 내역 말고도 온갖 소스를 통해 본 이용 내역을 전부 활용한다. 왜냐하면 유튜브에서 이미 추천 시스템이 있으므로 유튜브 웹사이트에서 감상한 비디오는 이미 추천 시스템의 결과에 치우친 데이터를 만들어내기 때문에.
- 데이터에서는 이용자별 영상 감상 횟수를 제한한다. 엄청나게 많이 보는 사람들의 영향을 빼기위해.
- 또, 추천 결과나 검색 결과를 즉시 활용하지 않는다.
- 검색 키워드는 일부러 순서를 날린 bag-of-tokens을 이용한다.
- 안그러면 방금 검색한 내용이 계속 메인 페이지에 떠서 짜증남.
- 유튜브 영상 감상 패턴: 매우 비대칭적이다.
- 비대칭적인 co-occurrence (or co-watch)
- 즉, 영상 감상은 순서가 정해져있음.
- 에피소드가 1-2-3-4.. 진행되는 경우는 물론이고,
- 음악의 경우에도 유명한 노래 --> 마이너한 노래로 가는 경향.
- 이 비대칭을 모델링하려면 offline 실험에서도 "과거"의 자료만 사용해야함 (그림 5-b)
- 실험결과 - feature and depth
4. 단계 2: 랭킹
여기에서는 더 많은 feature를 이용해 영상과 이용자의 관계를 구한다.
역시 deep neural network를 이용.
그리고 이 구조는 A/B test를 통해 계속 업데이트됨. 평가 잣대는 추천된 횟수 (=화면에 뜬 횟수) 대비 평균 감상 시간.
4.1 Feature representation
- 여기에서는 딥러닝을 통해 학습된 feature뿐만 아니라 hand-written feature를 사용.
- 대략 수백개정도의 feature 사용.
- 사용자의 이용패턴 - 특히 여러 종류의 정보가 어떻게 관계를 맺고있는지가 중요. 예를 들어,
- 이 채널에서 이 이용자가 몇 개나 되는 영상을 봤는지
- 마지막으로 이 주제의 영상을 본게 언제인지..
- 또, 왜 이 영상이 추천되었는지 정보도 활용한다.
- 또또또, 추천했는데 안보는 영상은 조금씩 순위를 깎는다.
- categorical features
- Top-N 영상 및 검색어를 embedding한다.
- 그 외의 것들은 0으로 놓는다.
- 영상 id, 사용자가 마지막으로 본 영상 id, 이 추천에 사용된 seed 영상 id 등을 전부 사용한다.
- 얘네들은 평균을 구하거나 하는게 아니라 별도로 network에 들어간다. [왜냐하면 다른 역할을 해야하니까!]
- continuous features 처리방법
- 값 x를 [0, 1]에 들어오도록 scaling해주고,
- x, x**2, sqrt(x) 를 다 넣어준다.
- 왜냐면 딥러닝은 입력 데이터의 pre-processing에 매우 민감한데 어떤 값이 가장 좋은지 알기 어려우므로. [이렇게 넣어주면 별도의 layer를 통해 제곱, sqrt()등의 비선형성을 학습하지 않아도 단일 레이어에서 가중치만 잘 주면 됨.]
4.2 Modelling expected watch time
- 감상시간: 안보면 0으로, 보면 본 시간대로 값을 넣어준다.
- (새로 정의한) weighted logistic regression을 사용한다.
- 감상한 영상을 감상 시간으로 가중치를 주는 것.
- 실험 결과
- (당연히) 더 크고 깊은 신경망이 작동을 더 잘함. 실제 상황에서는 서비스의 반응 시간이 느려질 수 있다는점 주의.
5. 결론
- 요 방법이 Matrix factorisation보다 좋다.
- 전체 시스템을 디자인하는건 거의 과학이 아니라 예술임.
- "영상의 나이"가 잘 작동한다.
- 단계 2의 세부 튜닝은 딥러닝보다는 전통적인 ML에 더 비슷하다.
- 특히 사용자의 과거 행동 패턴을 잘 설명하는 feature가 중요
- weighted logistic regression을 쓴것이 click-through rate을 쓴것보다 결과가 좋다.
감사합니다 도움됐습니다
ReplyDelete감사합니다. 많은 도움이 되었습니다.
ReplyDelete좋은 리뷰 감사합니다.
ReplyDelete좋은 리뷰 정말 감사합니다.
ReplyDeleteGo to the head of the class. Outstanding
ReplyDeleteI appreciate your help. Sensational
ReplyDelete