*크롬으로 보시는 걸 추천드립니다*
https://static.googleusercontent.com/media/research.google.com/ko//pubs/archive/45530.pdf
종합 : ⭐⭐⭐⭐
1. 논문 중요도 : 5 점
2. 실용성 : 4 점
설명 : 추천 시스템에 적용된 딥러닝 모델을 보고자 한다면, 가장 우선적으로 봐야 하는 논문 중 하나
- Candidate Generation 모델과 Ranking 모델로 Two-Stage로 추천을 진행
- 유투브 추천 시스템에서 적용되는 모델을 조금이나마 느낄 수 있음
- Feature 엔지니어링의 중요성
- 클릭률(CTR) 예측이 아닌, 시청시간(watch time)을 목적으로 딥러닝 모델을 학습
( * 개인적인 의견이며, 제 리뷰를 보시는 분들에 도움드리기 위한 참고 정도로 봐주세요)
추천 시스템관련 모델링을 찾아보고 있는 사람이라면, 가장 궁금한 점이
"유튜브에서는 어떻게 추천을 하지?"
"페이스북에서는 어떻게 추천을 하지?" 등 일 것입니다.
"DNN for Youtube Recommendation" 논문을 통해
유튜브에서 사용되고 있는 초기 추천 딥러닝 모델을 조금이나마 느낄 수 있습니다!
인용 수도 무려 1800 건을 넘어가고 있습니다
※ 그밖에 유명한 추천 관련 논문
※ 그 밖에 유명한 추천 관련 논문
Youtube DNN 논문 소개
- Youtube DNN의 의의
- Youtube는 가장 규모가 크고 정교한 추천 시스템 산업 중 하나
- 딥러닝을 활용한 추천 시스템 성능 향상에 중점 ( 10억 개의 Parameter 학습, 수 천억 개의 Example을 학습)
: Tensorflow를 기반으로 함
- 2 단계 Information Retrieval 모델을 구성하여 성능을 향상
1. 후보 생성 모델(Deep Candidate Generation Model) : Ranking을 매기기 전, 사전작업을 수행하는 모델
2. Ranking Model : User에게 보여줄 영상의 순위를 매기는 모델
- 대용량 처리가 가능하고, 반복적인 학습 및 유지가 가능한 추천 딥러닝 모델을 제안
- 실용성 관점에서의 Lesson과 Insight를 소개
- 추천 시스템에서의 주요 해결 과제
- Youtube는 10억(Billon) 사용자(User)에게 끊임없이 증가하고 있는 동영상을
개인화 맞춤형 영상(콘텐츠)을 추천하도록 도와야 함
- SCALE :
○ 유튜브 같은 큰 규모에 적합한 딥러닝 모델을 만들어야 함
○ 효율적인 Serving이 필요함
○ 이전에 제안된 딥러닝 모델은 Small Size에만 적합
- FRESHNESS :
○ 초 당 몇 시간 분량의 동영상들이 업로드됨(Dynimic Corpus)
○ 사용자의 최근 행동(Action)과 새로 업로드된 콘텐츠에 대해서 즉각적으로 대응해야 함
○ 기존의 유명한 영상과 새로운 콘텐츠 간의 균형이 중요함
○ Exploration(탐색)과 Exploitation(개척) 간의 균형으로 이해할 수 있음
- Noise :
○ 사용자의 Historical 한 행동을 예측하기에는 어려움 ( ∵ 1. Sparsity 2. 잠재적인 외부 요소(Factor))
○ 사용자로부터 직접적인 Ground Truth를 얻을 수 없어, 함축적인 피드백을 활용해서 모델을 학습해야 함
: 사용자로부터 새로운 콘텐츠에 대한 평점을 물어볼 수는 없기 때문에
○ 모델 학습 시, 이러한 Noise들로부터 로버스트(Robust)하도록 구성해야 함
Youtube DNN 모델 구조 Overview
- Youtube DNN의 기본 구성
- 2가지 Neural Network로 구성됨
1. Candidate Generation (후보 생성 모델)
2. Ranking Model
- Candidate Generation
○ 사용자의 행동 히스토리(Activity History)를 입력으로 사용
: 사용자 간의 유사도(Similarity)는 시청한 Video의 IDs, 검색 토큰(Token), 인구통계정보를 사용
○ 후보군(Candidate)들은 사용자와의 높은 정밀도(Precision)와 관련이 있음
* Precision : 예측한 샘플 중에서 몇 개나 맞추었나
○ Candidate Generation Network는 일종의 Collaborative Filtering(협업 필터링)이라고 할 수 있음
○ 광범위한 개인화된 추천을 제공
- Ranking Model
○ "최고"의 추천을 위해서는, 매우 정밀한 Representation이 요구됨
: Candidate Generation에서 보다 더 Video와 User를 잘 성명하는 Feature set을 사용
○ 1단계에서 선별된 후보군 중에 상대적으로 더 중요한 영상을 구별하기 위해선, 높은 Recall 성능이 요구됨
* Recall : 실제 정답 중 몇 개를 맞추었나
○ 목적에 따른 콘텐츠에 점수를 할당하여 추천 → 점수에 따라서 순위를 매겨 User에게 보임
- 장점
1. 백만 Corpus 중에서 소수의 영상을 사용자에게 맞춤화된 추천을 가능하게 함
2. 다른 출처(Source)에서 생성된 Candidate 후보군을 혼합(Blending) 후 추천을 해줄 수 있음
- 평가방법
1. Offline Test : Precision, Recall, Ranking Loss 등
2. Online Test : A/B Test - 클릭률, 시청시간, User Engagement(참여도)
○ 오프라인 테스트와 온라인 테스트 항상 일치하는 것은 아니므로, 온라인 테스트를 최종 평가 척도로 사용
Candidate Generation
- 특징
- Candidate Generation을 통해, 엄청난 양의 유튜브 Corpus에서 사용자와 관련된 수 백개의 영상으로 축소됨
- Ranking Loss를 활용한 matrix factorization 접근법을 모방
- Shallow Network를 통해 Factorization 진행 : Factorization 기술을 non-linear으로 일반화했다고 볼 수 있음
- Recommendation as Classification
- \( \textbf{U} \) : 사용자 / \( \textbf{C} \) : Context
- \( \textbf{V} \) : 전체 Corpus
- \( i \) : 수백만 개의 영상 중 \( i \) 번째 영상 (= classes)
- \( u \) 와 \( v \) 는 각각 사용자와 비디오 영상과 관련된, 고차원의 Embedding을 나타냄
- 사용자가 끝까지 비디오를 시청한 경우를 Positive Example로 학습
○ 좀 더 함축적인 사용자의 피드백이라고 생각했음
○ 이를 통해, 극도록 희박한 Tail 부분에서도 추천을 생성할 수 있었음
* Tail 이란?
* Tail 이란 ?
- Efficient Extreme Multi-Class
- 수백만 개의 클래스를 사용
- 서빙 단계에서 사용자에게 제공될 상위 N개를 선별하기 위해서는, 가능성이 높은 N개의 Class(=video)를 계산해야 함
- 수 천 개의Negative 샘플링 덕분에 고전적인 Softmax 보다 100배 더 빠름
1. Negative Class를 샘플링
2. Importance Weighte를 통해 샘플링을 조절
* https://arxiv.org/pdf/1412.2007.pdf
- word2vec 방법인, CBOW에서 학습에 관한 영감을 받음
○ 각 비디오마다의 고차원의 Embedding을 학습하여, 신경망에 입력
○ 신경망이 학습할 때, 이 고차원의 Embedding도 같이 학습됨
※ CBOW 학습 방식 :
※ CBOW 학습 방식 :
CBOW 학습 방식에 대해서, https://wikidocs.net/69141을 참고하시면 도움이 될 것입니다
- 저는 개인적으로, 수백만 개의 클래스를 학습을 위와 방식처럼 학습했을 것이라고 추정하고 있습니다
- Feature들은 평균화(Average) 및 Concat 후, 첫 번째 layer에 입력됨
- 수 백만개의 item에 대해서 점수를 매기기 위해서는, 선형에 가까운 연산이 필요함
○ Softmax output layer를 사용하지 않음
○ Dot Product를 활용한,Nearest Neighbor Search를 통해 문제 해결
○ Nearest Neighbor 알고리즘 종류는 큰 성능 차이 없었음
- Heterogeneous(이종의) Signal
- 딥러닝의 장점 : 연속 및 범주형 Feature를 쉽게 같이 추가할 수 있음
- 검색기록(Search History) : Uni 및 Bi-Gram으로 토큰화 → Average → Search history를 Dense 하게 요약
- 인구통계 Feature : 신규 사용자에게 합리적으로 작동할 때, 중요한 사전 정보로 활용됨
○ [0, 1] 값으로 정규화(Normalized)
- Example Age Feature : 학습 데이터가 생성부터 시점부터의 기간
○ "신선한" 콘텐츠를 추천하는 것이 매우 중요( 사용자와의 관련성이 훼손되지 않는 범위 내에서)
○ 머신러닝은 과거 데이터에 "편향"되는 특징이 있음
○ Example Age를 통해, 최신 콘텐츠인지 여부도 같이 학습할 수 있음
○ Serving 시, 0이나 약간의 마이너스 값으로 입력 ( = 훈련기간의 맨 끝에 있는 예측임을 반영)
○ 업로드 시간과의 시간 종속적인 인기도를 정확하게 반영할 수 있음 → "신선한" 콘텐츠를 추천
- Label Selection
- Surrogate Problem : 실제 환경과 근사적인 문제로 설정하여 평가 ( ∵ 직접적인 추천의 질을 평가 하기 어려움 )
○ 예시 : 별점을 잘 맞추면 효과적인 영화 추천이다? (A/B 오프라인 테스트로는 측정하기 어려움)
- Full Watch를 정답(label)으로 사용
○ 추천 이외에 루트로 유튜브를 시청한 데이터도 학습에 사용할 수 있음
- 사용자당 고정된 수의 학습 Example을 생성
○ ∵ 활동성이 높은 소수의 사용자가 전체 Loss를 지배할 수 있으므로
- Context Selection
- Classifier에게 전달되는 정보를 제한시켜야 함
○ 바로 이전 검색을 Sequence 하게 입력하면, 관련된 검색에 대한 결과만을 추천해줌
○ 검색 정보를 Sequence 정보를 없앤, Unordered bag 토큰으로 입력
- 비대칭적 동시 시청(Asymmetric co-watch probabilities)
○ 일반적으로 에피소드 시리즈 물을 순차적으로 시청함
○ 에피소드 시작하는 틈새에 관련 아티스트나 장르를 찾아봄(틈새 추천 시장)
○ 다음에 볼 시청 콘텐츠를 예측하는 것이, 랜덤 하게 예측하는 것보다 더 나은 성능을 보임
▶ 레이블 및 콘텐츠 구성시, Label이 되는 시점의 이전 정보만 활용
- Feature와 Depth 실험
- Feature와 Depth를 추가할수록 더 좋은 성능을 보임
- 최근 시청 및 검색 : 최대 사이즈 50개로 제한
- Softmax : 입력 - 256-dim / 출력 - 1 M video classes에 대한 다항 분포를 출력
○ 개별적인 Video Embeddiong이라고 생각할 수 있음
○ 수렴될 때까지 학습
Ranking
- 특징
- 노출(Impression) 데이터를 활용하여, Candidate 예측을 보정하고 사용자별로 맞춤형 추천을 진행
( * 주어진 비디오를 일반적으로 시청을 하고, 노출된 썸네일의 선택을 통한 클릭 확률은 낮음 )
- 좀 더 많은 사용자와 관련된 Feature 및 비디오와 관련된 정보를 사용할 수 있음
- 로지스틱 회귀를 사용하여, 각 비디오마다 독립적인 점수를 매긴 후 순서대로 노출 시킴
- A/B 테스트 결과를 기반으로 지속적으로 최종 순위를 조정
- 노출(Impression) 당 예상 시청 시간을 목적으로 함
○ 노출(Impression)당 예상 시청 시간을 통해, 클릭-베이트와 같은 콘텐츠 추천을 방지
* 클릭-베이트 : 자극적인 제목과 이미지를 통해 조회수와 광고수익을 얻는 영상
○ 노출(Impression) 당 예상 시청 시간이 더 유저 참여도(Engagement)를 잘 반영
- Feature Representation
- 전통적인 분류 체계를 따름 : 범주형, 연속/순위형 Feature
○ 범주형의 Cardinality 매우 다양 - 검색 쿼리 수백만 개
○ 단변량(Univalent) - 노출되는 비디오 ID
○ 다변량(Multivalent) - 유저가 봤던 비디오 ID 집합
○ 아이템의 속성(Impression) : 여러 번 계산 - 각 Item이 Scored 될 때마다
○ 유저/컨텐트 속성(Query) : Request 당 한 번만 계산
- Feature Engineering
- 딥러닝을 통해 그나마 Feature Engineering 비용을 완화할 수 있지만, 수백 개의 Feature를 사용해 여전히 많은 비용이 필요
- 사용자 action의 시간적인 시퀀스(Temporal Sequence)와 비디오 노출 간의 관계성을 찾아야 함
○ Item 자체 및 유사 Item과 사용자의 이전 상호작용을 반영하는 Feature가 중요
○ 예를 들어, 비디오를 업로드한 채널에서, 사용자의 과거 기록을 활용하는 것과 같음
: 해당 채널에서 몇 개의 비디오를 봤는지 / 이 주제의 비디오를 언제 마지막으로 봤는지?
- 과거 사용자의 action을 설명하는 연속형 Feature의 중요도는 매우 큼 ( ∵ 다른 Item에 대해서도 일반화가 잘 됨)
- Candidate Generation을 재활용하는 것도 중요
○ 비디오 Candidate의 출처
○ Candidate Model이 매긴 점수
- 과거 비디오의 노출 빈도를 설명하는 Feature 중요
○ 추천에서 "이탈"을 도입하는데 중요한 역할을 함
○ 최근에 추천받았지만, 시청하지 않은 경우 다음 페이지 로드 시 노출을 강등시킴
- Embedding Categorical Features
- Embedding을 통해 Sparse 한 범주형 Feature를 Dense 하게 만듦
- Unique ID Space( = Video ID)는 별도로 학습된 임베딩이 존재
○ Look-up Table 방식
- ID space는 매우 큰 Cardinality를 가짐(예를 들어 우리는 수많은 검색 쿼리를 가지고 있음)
○ 클릭된 노출 빈도로 정렬하여, 상위 N개 만 사용
○ Out-of-Vocabulary value는 0 Embedding으로 매핑
○ Video ID는 Single Global Embedding을 사용
▶ 많은 고유(distinct)한 Feature 등에서 재사용
( 예 : 노출된 비디오 ID, 마지막에 사용자가 본 비디오 ID, 추천에 사용된 "SEED" 비디오 ID 등 )
○ Global Embedding을 사용해도, Neural Network에서 별도로 입력됨
▶ 각각의 Feature가 여러 층에 Layer을 통과하게 되면, 사용자 맞춤형 추천이 가능하게 됨
○ Global Embedding을 통해, 일반화(Generalization)를 개선하고, 훈련 속도 및 메모리를 줄일 수 있음
- Normalizing Continuous Features
- 연속형 Feature를 정규화하는 방법을 소개함 ( ∵ 딥러닝 모델은 input의 scale 분포에 민감함)
- \( x \) 의 누적분포 ( \( f \) )를 사용 → 균등하게 분포하도록 Scaling
○ \( \tilde{x} = \int_{-\infty }^{x} df \)
○ 훈련이 시작되기 전, 분위수(Quantiles)로 선형 보간(interplation) 근사
○ \( \tilde{x} \) 를 \( \sqrt{\tilde{x}} \) 및 \( \tilde{x}^{2} \) 로 다양화하여, Super-linear 및 Sub-linear 표현력을 제공
※ Super-linear 및 Sub-linear
※ Super-linear 및 Sub-linear
○ \( \tilde{x}^{2} \) 을 통해 오프라인 정확도를 향상
- Modeling Expected Watch Time
- 최종 목적 : 사용자에게 주어진 영상의, Watch Time의 기댓값을 예측하는 것
- Positive Example : 사용자(User)가 영상을 본 시청 시간
○ 모델 : Weighted Logistic Regression 사용
※ Weighted Logistic Regression 설명 자료
※ Weighted Logistic Regression 설명 자료
https://stats.stackexchange.com/questions/442796/what-does-weighted-logistic-regression-mean
※ Weighted Logistic Regression 적용 방법
https://stackoverflow.com/questions/7513067/weighted-logistic-regression-in-python/35569266
○ Positive Sample(Clicked) 은 시청시간에 따른 가중치를 부여함
○ Negative Sample(Unclicked) 은 단위(Unit) 가중치가 부여됨
- Youtube DNN에서 사용하는 logistic Regression의 Odds
○ \( T_{i} \) : \( {i} \) 번째 노출된 비디오의 시청시간(Watch Time)
○ \( N \) : 학습 데이터 수
○ \( k \) : 노출된 영상 중 클릭한 예제 수( = Positive Impression)
- 지수 함수 ( \( e^{x} \) )를 최종 활성 함수로 사용하여, 예상 시청시간 ( \( E[T] \) )을 근접하게 추정하는 확률을 생성
※ 예상 시청시간에 대한 간단한 증명
※ 예상 시청시간에 대한 간단한 증명
$$ \frac{\sum T_{i}}{N-k} = \frac{\sum T_{i}}{N}(\frac{N}{N-k})\
= \frac{\sum T_{i}}{N}(1 + \frac{k}{N-k})
= E(T)(1 + P) $$
- Experiments with Hidden Layers
- Weighted, Per-User Loss를 평가 척도로 사용
○ Weighted, Per-User Loss : (잘 못 예측한 Watch Time) / (전체 Watch Time)
○ Unclicked 시청 예측시간 > Clicked 시청 예측시간 : 잘 못 예측한 Watch Time = Clicked 시청시간
- 1024 ReLU → 512 ReLU → 256 ReLU 모델이 가장 좋은 성능
- Normalized Countinuous Feature 적용 시 0.2 % Loss 감소
- 긍/부정 Example에 가중치 부여하여 학습 시, 4.1 % Loss 감소
Conclusion
- 두 가지 딥러닝 모델(Candidate Generation, Ranking)로 효과적인 성능을 냄
- 많은 Feature의 상관관계를 깊은 레이어를 통해 융합하는, Deep Collaborative Filtering을 제안함
- 미래 Watch Time을 잘 예측할 수 있는 Metric을 제안
○ 미래 정보를 사용하는 것을 제한
○ 바로 분류를 해버를 수 있는 정보도 제한( Surrogate Problem에 Overfit 하게 되어, 일반화 효과가 떨어짐 )
- "Example Age"를 제안
○ 너무 과거 정보에 "bias" 되는 것을 방지
○ 모델이 좀 더 인기 있는 영상을 추천하는 "신선함"을 반영할 수 있음
○ 오프라인 테스트의 정밀도(Precision)를 높이고, A/B 테스트에서 Watch Time을 매우 증가시킴
- Ranking 모델에 좀 더 세밀한 Feature를 Engineering
○ 사용자의 과거 행동을 반영할 수 있는 Feature가 매우 중요
- 딥러닝 모델은 범주형 및 연속형 Feature를 잘 학습할 수 있도록, Quantile normalization 적용
- 수백만 개의 Feature를 위해서 Layer를 딥하게 쌓음
- Weighted Logistic Regression을 사용하여, Positive Sample에 대한 시청시간(Watch Time) 예측력을 높임
- 클릭률을 직접 예측하는 것보다 예상 시청시간을 사용하는 것이 더 좋은 성능을 보임
마치며
- 2016년에 나온 논문이므로, 다소 오래된 논문일 수도 있지만, 딥러닝 추천 모델을 입문하는 논문으로서 가치가 충분합니다
- 현재는 얼마나 유튜브에서 딥러닝 관련 추천 모델이 발전했을지 기대가 됩니다
1. Feature Engineering의 중요성
2. Feature의 처리
3. 서빙을 위한, 효율적은 모델 구조의 구성
이 얼마나 중요한지 다시 한번 느낄 수 있었습니다
'발전중인 AI > 추천(Recommendation)' 카테고리의 다른 글
[논문요약] 딥러닝 관련 추천 모델 - Survey(2019) (0) | 2022.02.15 |
---|---|
추천 시스템 기본 - 협업 필터링(Collaborative Filtering) - ② (0) | 2021.08.10 |
추천 시스템 기본 - 협업 필터링(Collaborative Filtering) - ① (0) | 2021.08.08 |
추천 시스템(Recommendation System) 시작 (0) | 2021.08.07 |