Youtube Recommendation System 논문 리뷰

Youtube Recommendation System 논문 리뷰

Youtube Recommendation System 정리

시스템 개요

CBOW의 개념을 사용해서 지금까지 본 50개의 영상 ID가 주어졌을 때 다음에 볼 영상의 ID를 target ID로 주어 학습한다. 이 모델의 목표는 추천해주는 영상들의 시청시간을 길게 하는 것이다.
기존의 머신러닝 기법이었던 Matrix Factorization과 유사하며, CBOW의 임베딩 학습방법과도 닮은 점이 많았다.

  • 단계별 모델
    • 1단계 : 후보 영상 뽑기
      • input : 유저가 과거 시청한 비디오 IDs, 유저가 검색한 쿼리 50개, 유저 컨텍스트(유저의 지역, 성별, 나이), 동
      • output : 유저가 관심있어할만한 비디오 IDs 수 백개
    • 2단계 : 후보 영상 랭킹 매기기
      • input : 유저가 관심있어할만한 비디오 IDs 수 백개
      • output : 유저가 가장 관심있어할만한 비디오 IDs 20개 내외

모델 구현


1단계 후보 영상 뽑기

  • 개요
    • 결국 수 백만개의 ID에서 연관이 있는 수 백개의 ID를 고르는 멀티 클래스 분류 문제이다.
    • 각각의 영상들이 각 하나의 클래스

  • 학습과 서빙 모드

    • 학습 Phase : 수 백만 개의 클래스를 효율적으로 연산하기

      • 마지막 softmax 레이어는 수 백만개의 노드로 이루어져있기 때문에 loss를 계산하기 위해 소프트맥스 층을 연산할 때, 모두 연산하지 않고 일부 노드만 선택해서 계산함으로써 시간을 비약적으로 줄일 수 있음. (negative sampling at CBOW)
    • 서빙 Phase : 수 백만개의 클래스에서 가장 좋은 K개 추출

      • 학습이 끝나면 어떤 유저든지 video_watch, search_query, user_context만 입력하면 예측이 가능하다. 다만 시간이 많이 들기 때문에 다른 방법이 필요하다.
      • 수 백만개의 클래스에서 K개를 뽑는 경우 수천 밀리초가 든다. O(KlogN)에 비례.
      • 이 때 user vector u는 video vector v와 dot product로 예상 평점값이 계산됨으로 u와 v가 유사도가 높을수록 값이 커지기 때문에, 다음에 볼 영상을 찾는데, user vector u와 video vector v의 유사도를 활용한 K-nearest Neighbor를 사용할 수 있게 된다.
      • 네트워크에서 뽑아낸 user vector를 소프트맥스연산을 하지 않는다. 소프트 맥스층에 들어갈 때 곱해지는 W가 사실상 동영상 임베딩의 전치행렬인데, 이 V에서 각 column이 동영상 벡터가 된다. 따라서 user vector와 가장 가까운 K개의 nearest neighbor를 찾는 것으로 후보를 뽑는다.
  • 모델 아키텍쳐

    • Projection Layer
      • 유저가 본 Watch History인 비디오 id들을 각각 원 핫코딩 입력 벡터들로 받아 Projection layer W를 사용해 projection 시킨 후, 모든 결과를 평균을 내어 하나의 벡터(50 x 256)로 만든다. (CBOW 개념과 같음, tf.nn.embedding_lookup을 사용해 구현),
      • 이 때 사용하는 Projection Layer W는 동영상 임베딩값으로 이미 알고있는 R값을 사용하여, Matrix Factorization 네트워크만 따로 만들어 학습시킨 값을 가저올 수 있다.
      • 마찬가지로 Search History도 유니그램, 바이그램등을 사용해 dense vector(50 x 256)를 생성한다.
      • 생성한 벡터와 나머지 피쳐들을 모두 concat하여 Second Layer의 입력을 만든다.
    • Second Layer
      • watch vector, search vector, age etc 등이 입력된 벡터를 입력으로 한다. ()
      • 이 후 모든 Dense layer with relu를 사용해 모델을 연결
    • Last Layer
      • user vector u를 입력으로, video vector 임베딩인 W’ (1M x 256)벡터를 사용해 softmax의 입력을 만든다. 여기서 W’는 처음에 사용한 Projection Layer W와 비슷한 기능이지만 전혀다른 값으로 생각한다.
    • Softmax Layer
      • loss를 계산한다.
  • 모델 Depth

    • 모델은 Projection Layer뒤에 Dense layer with Relu activation을 연속적으로 쌓아올렸는데 최대 Depth가 4일때 성능이 가장 좋았다고 한다.

2 단계 랭킹 매기기

  • 비디오 ID에 대해 임베딩을 가진 매트릭스를 공유하는 것이 중요하다.
  • 모델의 파라미터의 상당수가 비디오 벡터 임베딩에 있기 때문이다.
  • last watch이후에 시간을 [0, 1) 사이로 normalize 한 후에 값을 집어 넣는다. 특이한 점은 root, square 값들까지 넣어주는 것인데 모델의 표현력을 높여 오프라인 학습에서 성능향상이 있었다고 한다.
  • loss
    • 한 페이지에서 유저가 클릭한 동영상과 클릭하지 않은 동영상으로 나누어 유투브 모델에서 계산된 스코어 값을 비교한다. 만약 클릭되지 않은 동영상이 클릭된 동영상보다 점수가 높다면 클릭된 영상의 시청시간은 잘못 예측된 시청시간으로 파악한다. loss per loss는 잘못 예측한 시청시간 / 전체 시청시간으로 계산한다.

특이 사항

  • surrogate problem
    • 다른 문제를 품으로써 추천 문제를 해결할 수 있다. 영화 평점 예측을 잘 해내면 영화 추천을 할 수 있음.
    • 유투브에서는 어떤 문제를 환원시켜 풀 수 있을지
  • 학습 데이터
    • 유투브에서 본 영상만 사용하면 이미 추천시스템을 한 번 거친 영상들이기 때문에 기존의 추천시스템에 편향된다. 따라서 온갖 소스를 통해 본 영상들도 추가해 학습한다.
  • 영상 시청 패턴이 매우 비 대칭적이다.
    • 시리즈 1, 2, 3 을 본 후에 시리즈 4를 볼 확률은 높고, 시리즈 1, 2 를 다시 볼 확률은 매우 낮다.
    • 또한 가수의 가장 유명한 영상에서 시작해서 가수의 점점 덜 유명한 곡을 보는 패턴을 보인다.
    • 따라서 input데이터로 watch_video의 시간 순서가 매우 중요하다. offline 학습시킬 때 t + 1에서의 영상을 예측하고 싶다면 t까지의 시청 영상만 넣어야 한다.
    • 또한 50개의 영상으로 다음에 볼 영상을 예측하는 문제이기 때문에 negative sampling에 지금까지 본 영상이 포함되어도 괜찮을 것이다.

Tensorflow

  • Negative Sampling : tf.nn.nce_loss

Reference

최근우님의 논문 리뷰

댓글

이 블로그의 인기 게시물

[Linux, Unix] export, echo 명령어 알아보기

뼈속 깊이 이해하기 :: 1. 허프만 코딩

IEEE 754 부동 소수점 반올림과 근사