반응형
Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |
Tags
- crossformer
- Machine Learning
- YouTube
- Ai
- 정규표현식
- ML
- recommendation system
- regex
- Python
- time series
- RecSys
- Transformer
Archives
- Today
- Total
mayreel 님의 블로그
Deep Neural Networks for YouTube Recommendations 본문
반응형
Info
link: Deep Neural Networks for YouTube Recommendations
Summary
- Deep Neural Networks를 활용한 유튜브의 추천 시스템 논문
- Youtube 추천 시스템을 구현하는 과정에서 발생한 제약사항(scale, Freshness, Noise)를 Tensorflow, MF를 사용하여 해결
Abstract
- YouTube는 당시 추천 시스템 중 가장 큰 규모의 사용자를 보유하고 있었고 정교함을 가진 추천 시스템을 서비스에 적용하고 있었음
- 해당 논문에서 딥러닝 모델(Deep Candidate Generation Model, Separate Deep Ranking Model)이 어떻게 Youtube의 추천 시스템에 영향을 줬는지를 주로 설명
- 추가적으로 대규모 추천 시스템을 설계하고 관리하면서 얻은 인사이트를 다룸
1. Introduction
- Youtube의 추천 시스템은 10억 명 이상의 사용자에게 새로운 영상들 중에서 개인화된 영상을 발견할 수 있도록 도와줌
- 하지만 Youtube의 추천 시스템은 3가지 측면에서 어려움을 겪음
- Scale
- 기존의 추천 시스템의 알고리즘은 규모가 Youtube에 비해 규모가 작은 task에 적합함
- 따라서 Youtube를 사용하는 10억 명 이상의 사용자에게 개인화된 영상을 추천해 주기에는 부적합
- 이러한 문제를 해결하기 위해서는 효율적인 모델 서빙과 대규모 트래픽을 처리하기 위한 분산 학습 알고리즘이 필수적임
- Freshness
- Youtube는 매 초마다 많은 시간의 영상이 업로드되고 있기 때문에 새로운 영상과 유저의 최신 행동 데이터를 모델링에 반영할 수 있어야 함
- Noise
- Youtube의 사용자 행동 데이터는 희소성(sparsity)과 관측할 수 없는 다양한 외부 요인으로 인해 본질적으로 예측하기가 어려움.
- 따라서 사용자의 영상에 대한 평점 등 명시적 피드백(Explicit Feedback)을 얻지 못하기 때문에 암시적 피드백(implicit feedback)으로 모델링을 진행할 수 밖에 없음
- 추가적으로 동영상과 관련된 메타데이터가 잘 정의되어 있지는 않지만 이러한 데이터에 대해서도 예측 성능이 좋아야 함(robust)
- Scale
- TensorFlow로 모델의 분산 학습을 가능하게 하여 10억 개의 파라미터를 가진 모델을 구현하고 수천억 개의 데이터를 학습함
- Matrix Factorization를 활용하여 Noise를 최소화하고 계산의 효율성을 높임
2. SYSTEM OVERVIEW
- 2단계의 신경망 구조로 구성
- Candidate generation model
- 사용자의 YouTube 활동 기록(시청 영상 내역 등)에서 개인화된 영상을 후보로 추림
- 이때 Collaborative Filtering를 사용하여 사용자 간의 유사도를 영상의 ID, 검색어, 인구 통계 등으로 계산
- Ranking model
- Candidate Generation Model에서 구분한 후보들 중에서 best 추천 리스트를 생성하기 위해서는 recall이 상대적으로 높은 후보를 구별해 내는 것 중요
- Ranking Network에서는 동영상과 사용자를 설명하는 많은 feature를 사용해서 각 동영상에 점수를 매기고 점수에 따라 순위를 부여
- Candidate generation model
- 해당 추천 알고리즘을 통해 수백만 개의 영상 중에서 개인화된 동영상 리스트를 사용자에게 제공할 수 있음
- Precision, Recall, Ranking Loss 등 다양한 Offline Metric을 사용하여 성능을 측정하고 모델을 개선하여 성능을 향상함
- 실제 서비스 환경에서 추천 알고리즘과 추천 모델의 성능을 측청 하기 위해서는 A/B 테스트를 진행하여 CTR, 시청 시간 등 Online Metric을 활용해 사용자의 반응을 측정을 함
- Offline Metric과 Online Metric의 결과가 항상 일치하지 않고 실제로 사용자의 반응을 측정할 수 있는 A/B 테스트의 결과로 추천 알고리즘과 모델을 결정하는 경향이 있음
3. CANDIDATE GENERATION
- 후보 생성 단계에서는 수백만 개의 영상 중에서 사용자와 관련된 몇 백개의 영상으로 후보군을 추리는 작업이 진행됨
- 과거에 사용했던 추천 알고리즘에서는 Rank Loss를 최소화하는 Matrix Factorization를 사용
- 이전에 사용자가 시청한 영상 기록을 임베딩한 간단한 네트워크
- 이러한 접근 방식은 non-linear generalization of factorization으로 볼 수 있음
3.1 Recommendation as Classification
- 사용자(U)와 Context(C)를 기반으로 특정 동영상 시청 시간(t)을 수백만 개의 동영상(V) 중에서 각 아이템(i)에서 분류하는 것이 목적이고 이를 Multi-class Classification로 정의
- u: 사용자(U)의 임베딩
- v: 동영상(V)의 각 후보 영상의 임베딩
- $u \in \mathbb{R}^N$: 사용자와 Context 간의 고차원 임베딩
- $v_j \in \mathbb{R}^N$: 각 후보 영상의 임베딩
- DNN은 Softmax를 사용하여 동영상을 분류하는데 유용한 사용자 임베딩(u)을 사용자의 영상 기록 및 Context를 활용하여 학습을 진행
- Explicit Feedback으로 "좋아요/싫어요" 버튼이 있지만 sparse함
- 따라서 시청 이력이 많지 않은 동영상 더 추천이 가능하도록 사용자가 동영상을 얼마나 시청했는지를 측정하는 Implicit Feedback을 사용하여 모델 학습을 진행
Efficient Extreme Multiclass
- 수백만 개의 클래스로 구성된 모델은 모든 클래스에 대해 내적을 수행하기 때문에 계산량이 기하급수적으로 증가하기 때문에 Negative Sampling을 적용하여 Cross-Entropy Loss를 최소화
- 기존의 softmax보다 속도가 100배 이상 빨라짐
- Hierarchical Softmax는 트리의 각 노드를 탐색할 때 연관성이 없는 Class를 구별해야 하기 때문에 계산 복잡도가 높고 정확한 분류를 하기가 힘들어서 사용하지 않음
- 수백만 개의 영상에서 사용자에게 추천해 줄 Top N개의 영상의 점수를 계산해야 하기 때문에 Serving Latency를 줄이는 것이 중요
- 이전에는 Hasing 알고리즘을 사용하여 sublinear하게 해결했고 이번에도 Softmax의 likelihood를 구하는 것은 계산 복잡도가 높기 때문에 비슷한 방법인 nearest neighbor search를 사용함
- A/B 테스트를 진행한 결과 추천 성능의 차이는 미미하고 serving latency가 줄어들었기 때문에 채택한 것으로 보임
3-2. Model Architecture
- 임베딩 벡터의 합, Component-Wise Max를 사용해 봤지만, 평균을 사용했을 때 가장 성능이 좋았음
- 따라서 각 영상의 임베딩 벡터를 평균 내서 입력값으로 사용
- 네트워크는 FC layer + ReLU 조합을 사용
- 모델링 과정
- 임베딩 단계
- watch vector: 사용자가 시청한 비디오들을 임베딩, 각 비디오는 고차원 벡터로 표현되며 마지막에 시청한 영상이 너무 큰 영향을 주지 못하도록 평균을 계산하여 하나의 watch vector로 합침
- search vector: 사용자가 입력한 검색 토큰들을 임베딩, 각 검색 토큰은 고차원 벡터로 표현되며 마지막에 검색한 기록이 너무 큰 영향을 주지 못하도록 평균을 계산하여 하나의 search vector로 합침
- 결합 단계
- geographic embedding: 사용자의 지리적 위치 정보를 임베딩
- 기타: 사용자의 나이, 성별 등을 사용
- Fully Connected Layers
- ReLU: 여러 개의 Fully Connected Layer를 거치고 각 층에서는 ReLU를 사용하여 모델이 비선형성을 학습하도록 함
- output
- training: 최종 출력은 Softmax를 통해 각 클래스(영상)를 사용자가 특정 비디오를 시청할 확률로 변환
- Serving: 최종적으로 사용자 벡터와 영상 벡터 간의 유사도를 계산하여 approximate nearest neighbor search를 통해 Top N개의 후보 영상을 Seving
- 임베딩 단계
- 학습 및 추론
- Training: Cross-Entropy Loss를 최소화하도록 학습, Softmax의 출력 결과를 기반으로 Gradient Descent를 통해 이루어짐
- Serving: 학습된 모델은 사용자 벡터를 입력받아 approximate nearest neighbor search를 수행하여 개인화된 백 개의 추천 비디오 리스트를 실시간으로 사용자에게 제공
3.3 Heterogeneous Signals
- Matrix Factorization을 사용하는 이유는 continuous와 categorical features를 모델에 쉽게 추가할 수 있기 때문
- 사용자의 검색 기록은 동영상 시청 기록과 유사하게 처리를 하고 unigram과 bigrams을 토큰화하여 임베딩
- 인구통계학적 feature는 데이터에 없는 새로운 사용자에게 영상을 추천해 줄 때 사용하고 지리적 정보, 접속 장치, 성별, 나이 등을 추가적으로 사용
- Example Age" Feature
- Youtube 사용자들은 자신이 관련이 없는 최신 업로드 동영상을 관련이 있는 상대적으로 오래된 동영상보다 선호함
- 하지만 과거 데이터로 학습된 모델은 동영상의 업로드 일자를 고려하지 않고 사용자가 좋아할 만한 동영상을 추천해 주기 때문에 오래된 동영상을 추천해 주는 경향이 있음
- 이러한 문제를 해결하고 사용자에게 최근에 업로드된 동영상을 추천해 주기 위해서 Youtube에서는 영상 업로드 시간을 나타내는 "Example Age"를 Feature로 활용해 모델의 성능 개선
3.4 Label and Context Selection
- 대부분의 추천 시스템에서 발생하는 "Surrogate Pproblem"이 YouTube의 추천 시스템에서도 발생함
- YouTube에서 "Surrogate Pproblem"를 최소화하기 위해 A/B Test를 진행하지만 한계가 있어 Hit Rate, NDCG 등 Offline Metric을 사용함
- Youtube의 동영상만 학습할 경우, 새로운 동영상을 추천해 주지 않고 편향된 영상만 추천해주기 때문에 Youtube의 추천 시스템 모델은 Youtube의 동영상 외에도 다른 사이트의 동영상 또한 학습함
- 사용자가 새로운 사이트에서 동영상을 시청했을 경우 빠르게 Youtube 추천 모델(Collaborative Filtering)에 반영하기 위한 이유도 있음
- 모델 학습 시 사용자 당 고정된(동일한) 숫자의 데이터를 사용하는데, 그 이유는 사용자마다 학습하는 데이터 개수가 다를 경우, 영상을 많이 시청한 사용자에게 과도하게 편향된 추천 리스트를 제공할 수 있기 때문임
- 그리고 마지막에 검색한 검색어를 모델 학습에 사용하지 않는 이유를 "taylor swift"로 예를 들어 설명했는데, 마지막 검색어를 추천 모델에 반영하여 마지막 검색어와 연관된 동영상을 추천해 줬지만 성능이 저조했다고 함
- 그 이유는 사용자의 소비 패턴은 굉장히 비대칭적이기 때문
- 예를 들어 시리즈로 이루어진 영상을 보았을 경우, 당시에는 계속 이어서 볼 가능성이 높지만 단일 영상에 대해서는 한 번만 시청하거나 한 번 검색해 본 경우일 수도 있음
- 따라서 Youtube는 이와 같은 비대칭적인 소비 문제를 해결하기 위해 기존의 CF 모델처럼 유저의 시청 기록 중 하나를 랜덤 하게 가리고 다른 시청 기록으로부터 해당 영상이 무엇일지 예측(5a) 하는 것보다 해당 시점의 기록을 가지고 다음에 시청할 확률이 높은 영상을 추천하는 방법(5b)을 채택하여 비대칭 문제를 해결함
3.5 Experiments with Features and Depth
- Features가 많고 Layer를 깊게 쌓을수록 MAP가 증가
4. RANKING
- Ranking의 주요 역할은 사용자에게 개인화된 동영상 목록을 추천
- 사용자가 특정 썸네일에 따라 안 누를 수도 있기 때문에 Ranking Model에서 이전에 추린 추천 리스트 중에서 추가적으로 후보군을 추림
- 동영상의 개수가 줄었기 때문에 동영상과 사용자의 관계를 표현하는 더 많은 Feature를 추가적으로 사용함
- Candidate Generation와 유사한 구조를 가지는 모델을 사용하고 Logistic Regression를 사용해 동영상 별로 Score를 계산한 뒤 사용자에게 높은 Score의 동영상을 제공
4.1 Feature Representation
- Categorical, Continuous 변수가 사용됨
- 범주형 변수 같은 경우, 이진 분류(사용자의 로그인 여부), 사용자의 마지막 검색 기록, 점수를 부여할 동영상 ID, 사용자가 마지막으로 시청한 N개의 동영상 ID 등을 사용
- Feature Engineering
- 일반적으로 Ranking Model은 수백 개의 Feature를 사용하는 수집한 데이터를 바로 모델링에 사용하기에는 적절하지 않아 Feature Engineering이 필요
- 사용자의 행동 데이터의 Temporal Sequence를 어떻게 영상의 Score에 반영할지가 주요 과제
- 이 과정에서 사용자가 시청한 동영상과 추천해주려고 하는 동영상의 연관성이 Scoring에 중요하게 작용된다는 것을 발견
- 예를 들어, Scoring할 동영상을 업로드한 채널에 대해 사용자의 과거 이력, 마지막 시청 기록 등 사용자의 과거 행동을 설명하는 Feature가 서로 다른 동영상 사이에서도 일반화될 수 있도록 함
- 추가적으로, Candidate Generation에서 얻는 정보(동영상을 추천한 근거, 누가 추천했는 지)를 Ranking에 반영하는 것이 중요하고 사용자가 최근에 추천을 받았지만 시청을 하지 않는 동영상을 추천해 주지 않는 "churn"을 반영하는 것도 중요
- Embedding Categorical Features
- CF와 비슷하게 Sparse한 범주형 데이터를 신경망에 적합하게(dense) 변환해 주는 Embedding을 사용
- 동영상 ID, 검색어처럼 cardinality가 큰 경우에는 Top N개 기준으로 제거하고 zero 벡터로 Embedding
- 그리고 해당 Embedding을 CF와 동일하게 다항 범주형 Feature Embedding은 평균을 계산하여 사용
- 가장 중요한 것은 동일한 ID에 있는 범주형 Feature의 기본 Embedding을 공유함으로써 일반화 성능 개선, 학습 속도 향상, 메모리 절약이 가능해짐
- Normalizing Continuous Features
- 뉴럴 네트워크는 scaling과 input의 분포에 민감
- 개별 피처의 스케일링에 영향을 받지 않는다는 점에서 연속형 피쳐의 정규화가 수렴하는 데 있어 중요하다는 것을 발견
- continuous feature $x$에 누적 분포를 고려하여 [0, 1)의 범위에 위치하는 $x^~$으로 변환
- 그리고 super-, sub-linear한 feature로도 설명력을 높이기 위해 $x^2$과 $\sqrt x$도 input으로 넣어줬더니
Offline accuracy가 향상됨
4.2 Modeling Expected Watch Time
- Youtube 추천시스템은 추천된 동영상에 대한 시청 시간을 예측하는 것이 목표이기 때문에 Weighted Logisetic Regression과 Cross-Entropy Loss를 사용함
- Positive Sample은 실제 시청 시간을 가중치로 부여, Negative Sample의 경우엔 시청 시간이 0이기 때문에 Unit Weight을 부여
- Logistic Regression의 odds로 $\frac{\sum {T_i}}{N-k}$를 사용
- $N$: 학습 데이터 수, $k$: Positive Sample 개수, $T_i$: i번째 영상의 시청 시간
- Positive Impression의 비율이 작을 경우, 학습된 odds는 $E[T](1 + P)$에 근사
- 클릭할 확률, $ 영상 시청 시간의 기댓값이지만, $가 작으므로 $ 와 비슷함
- Inference 단계에서는 지수 함수($e^x$)를 최종 Activation 함수로 사용하여 시청 시간의 확률을 생성
4.3 Experiments with Hidden Layers
- Layer가 많고 넓을수록 성능이 잘 나옴
5. CONCLUSIONS
- 해당 논문에서 모델의 구조를 2가지(Candidate Generation Model, Ranking Model)로 설명
- Collaborative Filtering Model은 비대칭적인 영상 시청 패턴을 학습하고 미래 정보를 막음으로써 이전에 Youtube에서 사용한 Matrix Factorization보다 많은 signal과 interaction을 활용하여 더 좋은 성능을 보여줌
- Classifier에서 discrimative signal을 막는 방법도 과적합을 방지하는데 도움이 되었음
- 영상의 업로드 시간(“Example Age” Feature)를 feature를 사용하여 성능을 개선
- A/B Test를 진행한 결과 offline precision이 증가하고 최근에 업로드된 영상의 시청 시간이 늘어남
- Ranking Model에서 딥러닝을 사용한 결과, 트리 기반 모델보다 영상 시청 시간 예측에 뛰어난 성능을 보여줬음
- 유저와 동영상의 상호작용(시청 기록 등)을 사용하고, Categorical feature를 Embedding하고 Continuous feature를 정규화하여 DNN에 적용
- 그리고 Layer를 깊게 쌓아 비선형적인 interaction을 효과적으로 학습
- Logistic Regression의 가중치를 Positive(영상 Click), Nagative(영상 Click 안함)에 알맞게 조절하여 사용자의 동영상 시청 시간을 예측하도록 수정함
- 이 방식을 사용하여 Click 확률을 예측하는 것보다 시청 시간을 예측하는 것이 성능 개선에 좋다는 것을 보여줌