Study for Data Science

Youtube 추천 시스템 리뷰

|

1. 소개

  • 유튜브 추천에 3가지 핵심 고려 사항
    • scale
      • 대부분의 추천 알고리즘은 많은 양의 컨텐츠을 감당할 수 없었다.
      • 고도의 분산 알고리즘과 효과적인 서비스 시스템이 필수적이다.
    • freshness
      • 신규 컨텐츠 와 잘 구성된 컨텐츠 사이의 균형을 이해 해야한다.
      • exploitation / exploration trade-off를 고려해야 한다.
      • 참고 : https://conceptually.org/concepts/explore-or-exploit
    • noise
      • 사용자 행위 기록은 관찰할 수 없는 희소성(sparsity)와 다양성(variety) 때문에 예측하기 어렵다.
      • 사용자 만족을 얻기 거의 어렵고 대신 오염된 피드백을 모델링 하게 된다.
      • 메타 메타데이터는 잘 구조화 되어 있지 않다.
      • 추천 알고리즘은 학습 데이터의 개별적 특성에 견고해야 한다.
    • 구현
      • Tensorflow로 구현됨
      • 학습 데이터
      • 약 10억개의 파라미터
      • 약 수천억개의 샘플

2. 시스템 개요

  • 후보 생성 모델과 랭킹 모델이 분리
    • 후보 모델은 사용자의 행위 기록과 큰 모음에서 후보 비디오 집합 생성
    • 랭킹 모델은 후보 집합에 순위를 부여
  • 후보 모델은 협업 필터링을 통해서만 개인화를 제공하며, recall을 중요시 해야 한다.
  • 컨텐츠 내용 뿐만 아니라 사용자의 이용내역과 맥락을 감안해야 한다.
  • 분석 방향성
    • offline에서는 precision/recall/ranking loss등을 최적화하며,
    • A/B 테스트에서는 시청 시간/클릭률을 개선 했다.
  • 사용자 사이의 유사도는 비디오 시청 아이디, 검색어 토큰, 인구 통계와 같이 거친 feature으로 표현된다.

3. 후보 생성

  • ranking loss를 이용한 Matrix factorisation이 일반적이다.
  • 인공신경망을 사용하여 MF를 대체하였으며, 과거 사용자의 비디오 내역을 사용하였다.

3.1 분류를 통한 추천

  • 문제 정의
    • 다량의 컨텐츠에 대한 엄청나게 많은 클래스가 존재
    • 사용자 \(U\), 맥락 \(C\) 가 주어진 때, 특정 시간 \(t\) 에 비디오 \({W}_{t}\)를 볼 확룔을 구함
      • \[P({ w }_{ t }=i|U,C)\quad =\quad \frac { { e }^{ { v }_{ i }u } }{ \sum _{ j\in V }^{ }{ { e }^{ { v }_{ j }u } } }\]
      • \({ v }_{ j }\) : 각각 후보 영상 임베딩
      • \(u\) : 사용자 & 맥락 임베딩
      • 명시적인 사용자가 누른 ‘좋아요’ 같은 정보는 사용하지 않고, 암시적인 ‘비디오를 끝까지 시청 했는가’와 같은 데이터를 사용함
    • 다량의 클래스 분류 문제에 대한 효율적인 구현
      • in offline
        • negative class를 샘플링 (i.e., skip-gram negative sampling)
        • loss function으로는 각 class (비디오)마다 (binary) cross-entropy를 사용
        • 대략 수천개정도의 negative sample 이용
        • 기존 방식보다 100배 이상 빨라짐
        • hierarchical softmax는 정확성이 떨어져 사용하지 않음
      • in 실 서비스
        • 사용자에게 추천을 N개의 비디오를 제공
        • 이전에 진행된 [24]처럼 hashing을 활용
        • 최종적으로는 (위의 식처럼) dot-product space에서 가장 가까운 컨텐츠 (nearest neighbour)를 찾는 과정.
        • A/B test 결과 nearest neighbour 알고리즘간에 추천성능 차이는 없음

3.2 후보 생성 모델 구조

  • 사용자의 시청 내역을 embedding vector로 변환
    • 여러 영상들의 embedding vector에 대한 평균을 계산하여 input으로 활용(watch vector)
    • FC + ReLU 사용, layer 추가시 ReLU 추가

3.3 타입이 다른 데이터

  • 연속형, 범주형 변수를 임베딩하여 활용.(matrix factorization의 일반화)
  • 지리 정보, 성별을 활용
  • 영상의 나이 고려
    • freshness를 반영하기 위함.
    • 영상의 나이를 고려해주면(빨강) 사용자의 실제 컨텐츠 소비 패턴(초록)과 유사 해진다.
    • 학습 단계에서는 값을 넣어주고 실제 서비스 단계에서는 모두 0으로 처리 했다.(비디오 인기도 분포가 불안정한기 때문에)

3.4 label과 context 선택

  • 추천은 surrogate problem을 수반하고 있다.
    • 높은 정확도가 효과적인 영화 추천을 만든다는 가정이 전형적인 예이다. (exploitation » exploration)
    • exploitation & exploration trade off를 고려 해야 한다.
    • 해결 방안
      • 다른 소스를 활용 : 유튜브 추천에 지속적으로 영향을 받기 때문에
      • 사용자별 감상 횟수를 제한 : 하나의 컨텐츠를 많이 보는 사람들의 영향을 감소시키기 위해
      • 추천 결과나 검색 결과를 즉시 활용하지 않음
        • 검색 키워드는 일부러 순서를 날린 bag-of-tokens을 이용
        • 그렇지않으면 방금 검색한 내용이 계속 메인 페이지에 노출됨
    • 비 대칭적인 유튜브 영상 패턴
      • 비대칭적인 co-occurrence (or co-watch)
      • 즉, 전 영상에 따라 다음에 어떤 영상을 볼지 영향이 크다.
      • 에피소드의 경우 일반적으로 순서가 정해져 있다.
      • 대부분의 카테고리에서 가장 유명한 영상에서 마이너한 영상으로 가는 경향이 있다.
      • 대부분의 협업 필터링 모델은 임의적으로 기간의 라벨과 맥락, 사용자 기록에서 임의적
      • 대조적으로 비대칭적 feature을 고려하여, 과거의 데이터만 사용해야함 (5-b)

3.5 feature과 depth에 대한 실험

  • MAP(Mean Average Precision) 측정
  • baseline : 감상 내역만 이용
  • 파랑색: 감상내역 + 검색
  • 빨강색: 감상내역 + 검색 + 영상의 나이
  • 초록색: 전부 다
  • layer 기준
    • 깊이 0 : 256 노드 softmax
    • 깊이 1 : 256 노드 ReLU
    • 깊이 2 : 512 노드 ReLU → 256 ReLU
    • 깊이 3 : 1024 노드 ReLU → 512 ReLU → 256 ReLU
    • 깊이 4 : 2048 노드 ReLU → 1024 노드 ReLU → 512 ReLU → 256 ReLU
  • 실험은 영상 100만개, 검색어 100만개를 256차원의 embedding으로 변환. bag_size는 최근 50개 영상/검색
  • depth 깊어질수록 성능 좋아짐

4. 랭킹

  • 더 많은 특징 활용
  • A/B 테스트를 통해 지속적으로 업데이트
  • 평가 지표는 추천 횟수 대비 평균 시청 시간

4.1 feature representaion

feature engineering

  • 사용자 행위에 일시적인 순서와 영상에 대한 인상과 이런 행동이 어떻게 점수를 매길 수 있는지를 고민함
    • 사용자는 이 채널에서 얼마나 많은 영상을 봤는가?
    • 사용자는 이 주제를 언제 마지막에 봤는가?
    • 위 항목은 서로 다른 항목에 대해 잘 일반화 되어 있어 효과적
  • 후보 생성 모델에서 정보를 전달 받는게 중요함
    • 후보를 지명 했던 정보원은?
    • 지명에 대한 영향이 정도는?
  • 추천에 대한 인상도 고려 해야함
    • 추천 되었지만 지속적으로 시청하지 않는다면 순위를 낮추어야 한다.

범주형 feature 임베딩

  • 후보 생성과 유사하게 spare한 범주형 특징을 dense한 표현으로 임베딩
  • 각 ID 공간은 훈련 전에 만들어진 look-up 테이블이다.
  • 상위 Top-N만 남기고 다 0으로 초기화
  • 모델에 입력 전에 평균을 적용
  • 인상 받은 영상, 사용자가 마지막으로 본 비디오 ID, 추천되어진 비디오 ID 등 사용 가능
  • 임베딩 공유는 일반화, 학습 속도 향상과 메모리 요구량 감소를 위해 중요

연속형 feature 정규화

  • 딥러닝은 입력 데이터의 pre-processing에 매우 민감
  • 값들을 누적 분포를 통해 [0, 1] 범위로 scaling
  • 값들의 비선형성 학습을 쉽게 하기 위해 제곱, 제곱근을 다 feed

4.2 Modelling expected watch time

  • 시청 시간을 예측 하기 위해 weighted logistic regression을 적용
    • weighted logistic regression - 감상한 영상을 감상 시간으로 가중치 적용
    • 가중치 공산은 부정적 인상 대비 총 시청 시간을 기준으로 함
    • 긍정적인 인상이 적다고 가정하면, 학습된 확률은 대략 \(E[T](1+P)\)
      • \(P\) : 클릭률
      • \(E[T]\) : 예상되는 시청 시간

4.3 hidden layer에 대한 실험

  • 더 넓고 깊은 신경망이 더 잘 작동
  • 실 서비스의 응답시간을 고려하여 네트워크 구성 필요

5. 결론

  • deep learning을 이용하여 Matrix factorization 개선
  • 전체 시스템을 디자인하는건 거의 과학이 아니라 예술임.
  • “영상의 나이”는 feature로써 잘 활용되어 짐
  • 랭킹은 전통적인 ML 문제이지만 deep learning은 다양한 형태의 데이터를 잘 표현하는 representation을 학습 가능
  • 특히 사용자의 과거 행동 패턴을 잘 설명하는 feature가 중요
  • 시청 시간에 대한 weighted logistic regression을 적용한 것이 click-through rate을 적용한 것보다 좋은 성능을 보임

[24] J. Weston, A. Makadia, and H. Yee. Label partitioning for sublinear ranking. In S. Dasgupta and D. Mcallester, editors, Proceedings of the 30th International Conference on Machine Learning (ICML-13), volume 28, pages 181–189. JMLR Workshop and Conference Proceedings, May 2013.