Tuesday, September 6, 2016

논문 요약 - Deep Neural Networks for YouTube Recommendations

원문은 구글 리서치 블로그 (논문 pdf)입니다. 조만간 보스턴에서 열리는 2016 RecSys 논문인데 최근에 구글 리서치 홈페이지에 올라오고 나서 학계에서 주목을 많이 받았습니다.

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
      • Offline에서 MAP 측정
      • baseline: 감상 내역만 이용
      • 파랑색: 감상내역 + 검색
      • 빨강색: 감상내역 + 검색 +  영상의 나이
      • 초록색: 전부 다 이용
    • 실험은 영상 100만개, 검색어 100만개를 256차원의 embedding으로 변환. bag_size는 최근 50개 영상/검색
    • 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을 쓴것보다 결과가 좋다.