HANA : Have A Nice AI

모두를 위한, 하나를 위한 AI

발전중인 AI/추천(Recommendation)

[논문요약] DNN for YouTube(2016) - 추천 딥러닝 모델의 바이블

KM-Hana 2022. 2. 15. 01:08

*크롬으로 보시는 걸 추천드립니다*

 

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 건을 넘어가고 있습니다

 

  ※ 그밖에 유명한 추천 관련 논문 

더보기

  ※ 그 밖에 유명한 추천 관련 논문

Google scholar 검색

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 학습 방식 :  

https://wikidocs.net/69141

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 사용

Logistic Regression 수식

                  ※ Weighted Logistic Regression 설명 자료 

더보기

           

            ○ 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. 서빙을 위한, 효율적은 모델 구조의 구성

        이 얼마나 중요한지 다시 한번 느낄 수 있었습니다