ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • YouTube Recommendation system 트릴로지 리뷰 - [2]
    Recommender System/논문 및 블로그 리뷰 2020. 2. 4. 19:49

     

     

    YouTube Recommendation system 트릴로지 리뷰 - [1]

     

     

    이번에 리뷰할 자료는 <Deep Neural Networks for YouTube Recommendations (2016)>으로, 2016년에 발표된 것이다. 이 자료는 당시에 나오자 마자 읽어봤던 자료인데(물론 우연이었다), 추천시스템에 막 관심을 가지기 시작했을 때 생애 처음(..)으로 제대로 읽어본 '논문' 비스무레한 것이다. 복잡한 수식도 나오지 않고 intuitive 하면서도 흥미로운 내용이라 지금 읽기에는 무척 재미난 논문이지만, 당시에는 딥러닝은 커녕 머신러닝의 'ㅁ' 자도 모르던 학부생 시절이었기 때문에 끝까지 읽는데 아주 애를 먹었던 기억이 있다.

    게다가 2016년에는 추천시스템에 대한 자료 자체가 다소 귀한 편이었기 때문에(물론 지금도 넉넉치는 않다), 개념을 잡아주고 트렌드를 파악하기에 매우 도움이 됐었다. 그래서 가끔 메일이나 페이스북 메시지로 추천시스템 공부법에 대한 문의가 들어올 때 마다 초심자에게 주저없이 이 논문을 추천해주곤 한다.

    어쨌든, 이번에 리뷰할 이 자료는 전반적인 시스템이나 철학에 대한 내용보다는 유튜브가 딥러닝을 어떻게 사용했는지에 조금 더 초점이 맞춰진 자료이다. 리뷰 포스팅을 쓸 때 마다 하는 말이지만, 리뷰 내용은 굉장히 주관적이며 번역보다는 필자의 일기에 가깝다는 것을 참고하길 바란다.

     




    1. Intro 

    2010년과 마찬가지로, 유튜브의 추천시스템은 여전히 3가지의 중요한 문제를 풀고있었다. 

     

    1) Scale

    일반적으로 잘 알려진 추천 알고리즘이나 시스템은 유튜브 정도로 큰 시스템에서는 잘 동작하지 않는다. 실시간으로 모델이 바뀌기도 하고, 학습해야 할 scalability 자체가 너무 크다. 따라서 distributed learning을 적용한 알고리즘(ALS, FTRL 같은)이 필요하며, 엄청나게 많은 유저와 corpus들을 serving 할수있는 latency도 보장되어야 한다.


    2) Freshness

    유튜브의 콘텐츠는 시간 단위(라고 하지만 사용자의 입장에서는 거의 초 단위이다)로 새로운 콘텐츠와 유저의 의도가 계속 바뀌고 생성된다. 당연히 추천시스템은 이렇게 빠르게 변하는 콘텐츠와 의도들을 추천시스템에 온전히 담아내는 것에 집중해야 할 것이다.


    3) Noise

    데이터의 sparsity, 그리고 외부 요인의 영향 때문에 ground truth를 찾아내기란 여간 쉽지 않다. 국내 서비스 왓챠(watcha) 같은 아주아주 명시적인 explicit feedback이 존재하는 경우를 제외하면, 유저의 선호도라는 것을 측정하기는 정말 어렵다. 그래서 추천시스템에서는 implicit feedback을 이용한 모델링을 선호하는데, 유튜브 역시 예외는 없다.

    이것들을 더 잘 풀기 위해 유튜브에서 시도한 것은 Deep Learning의 도입이다. 네트워크에 약 1억개에 가까운 파라미터를 사용하지만, matrix factorization을 적극적으로 활용하는 기존 추천시스템에 비해 훨씬 효율적이었다고 한다. 개인적으로 DL은 피처 엔지니어링을 자동화 해주면서도 패턴을 찾는 도구이니, 잘만 사용한다면 추천시스템에 아주 최적화된 도구라고 생각한다. 도메인 자체가 implicit 하다는 것은, 가시적으로 이해하기 힘든 패턴이 중요하다는 것이니 말이다.

     

     

     





    2. System Overview


    2010년에 이어서, 2016년에도 여전히 candidates -> ranking 으로 이어지는 추천시스템의 기본 골격은 같다. 바뀐 점은, 이 두 layer 모두를 neural network로 구성하였다는 것이다. 그리고 candidates를 생성할때는 추가적으로 collaborative filtering을 적용하여 아주 간단한 수준의 준 개인화가 된다고 한다. 그리고 그 기준은 Video ID(유저의 이전 시청 정보), 검색어, demo 정보 기반. coarse라는 단어를 사용한 것으로 보아, 아주 정제된 피처를 사용하지는 않는 것 같으며, 아마 user based CF(상기한 피처들을 user의 column으로 하는) matrix에서 클러스터링 수준의 개인화를 하는 것 같다.

    Ranking layer의 뉴럴 네트워크에서는 유저 profile을 조금 더 디테일하게 추가하고, video 자체의 정보를 임베딩하여 모델의 피처로 활용한다. 그리고 각 비디오의 score를 매겨, point-wise 한 방식으로 학습하여 유저에게 최종 노출된다.

    이 대목까지 읽으면서 가장 흥미로웠던 점은, 유튜브의 추천시스템 역시 offline metric과 online metric간의 괴리감이 큰 탓에 A/B 테스트에 의존하는 경향이 있었다는 것이다. 그런데 DL로 체질을 변환하면서 offline metric의 변화와 online metric의 변화가 거의 비슷한 정도로 움직였다고 한다. (얼마나 실험 환경을 잘 만들었길래..)

     

     





    3. Cadidate Generation

    이제 candidate 레이어에 대해 자세히 알아보자. network를 구성하는 아이디어는 이전에 사용하던 matrix factorization의 피처들에서 큰 영향을 받았으며, 사실상 candidate layer에서의 network는 기존에 사용하던 factorization 테크닉을 linear generalization 한 것에 지나지 않는다고 설명한다.

     

     

    1) Recommendation as Classification

    그리고 candidate를 생성하는 것은 (놀랍게도) extreme multiclass classification 문제인데, 특정 시간(t)에 유저 U가 C라는 context를 가지고 있을 때, 수 백만개의 비디오(i) 각각을 볼 확률을 계산하는 classification이다. 식으로 보면 다음과 같고, softmax 함수라는 것을 알 수 있다.



    이 classification에 사용하는 벡터는 아주 간단한 임베딩 벡터로, sparse entities를 매핑한 것에 지나지 않는다. 그리고 모델의 정답 데이터는 explicit feedback(영상에 대한 좋아요, 설문참여, 공유 등..)이 아닌 implicit feedback을 사용했고, 영상을 끝까지 본 경우를 positive example로 하였다. 글의 끝 부분에 다시 나오겠지만, 이는 모델의 bias를 방지하고 cold-start 까지 방지할 수 있는 효과가 있다. explicit feedback이 드문 영상, 혹은 viral한 영향을 받는 영상에 대해 공평한 implicit 기준으로 평가할 수 있기 때문이라고 한다.

    그리고 다음으로 언급한 내용은 <Efficient Learning>으로, softmax classification과 serving에서 나타난 문제점과 해결 방법을 서술하고 있다. Softmax classification에서 클래스의 갯수가 늘어날때의 문제점은, 가능한 모든 클래스에 대해 내적을 수행하기 때문에 계산량이 기하급수적으로 증가한다는 데에 있다. 그래서 이 논문에서는 이러한 문제점을 마치 word2vec에서 negative sampling을 하는 것과 비슷한 방식으로 해결한다. 어떤 식으로 class를 선정하는 지에 대해서 자세한 내용은 잘 모르겠지만, negative class를 가능한 많이 선정한다면 성능에 큰 문제는 없다는 뉘앙스인 것 같다. 

    또한 학습과는 별개로, serving latency를 줄이는 방법 또한 고려해야 한다. 이전에는 해싱 알고리즘을 이용하여 sublinear하게 이를 해결했었고, 이번에도 유사한 트릭을 사용했다. 이번에 사용한 방법은 nearest neighbor search 종류의 알고리즘을 적용하는 것이다. softmax의 likelihood를 구하는 것은 계산 복잡도가 높기 때문이다. 이게 가능한 이유는 이미 linear한 모양으로 모델을 정의하였기 때문. softmax로 학습한 계수들은 nearest search 알고리즘에 사용하는 것이 별 문제가 되지 않을 것이고, 실제로 정확도에서도 큰 차이가 없다고 한다. 다만 정확도에 대해서는 조금 애매하게 언급한 것으로 보아, 속도를 위해 정확도를 약간은 포기한 것으로 보인다.

    여기까지 개인적으로 이해한, (2010년도 자료를 참고하여) candidate generation 과정을 대략적으로 도식화해보았다(본문과 상관 없이 필자의 주관적인 이해를 기록으로 남기고자 그린 조잡한 그림이니, 가능하면 보지 않는 것을 추천한다). 논문에서 언급한 CF를 정확히 어떻게 사용한 건지, 준 개인화를 어떻게 한 건지는 대략적으로 상상하여 나타냈다.




    2) Model Architecture

    matrix factorization의 일반화 버전이라고 할 수 있는 DL을 도입함으로써 얻을 수 있는 가장 큰 장점은 피처 엔지니어링이 용이하다는 것이다. categorical한 피처를 깎아낼 필요도 없고, continuous한 피처를 염병하면서 여러번 normalize 하면서, 예쁜 모양을 만들기 위해 고생하지 않아도 된다는 의미. 

    모델의 전체적인 아키텍처는 본문의 설명을 읽어보는 것 보다, 그림을 보는게 훨씬 직관적이고 이해하기 좋다.

     


    이 모델 아키텍처에서의 특이한 점은, watched video와 search tokens의 sequence vector들을 average로 합쳤다는 점이다. 실제로 논문에서는 이를 sequence(history) 내에서의 정보를 압축하기 위한 것이라고 설명했는데, 뒤에서 "taylor swift" 예시를 들면서 다시 설명한다. 그 내용은, 유저의 마지막 검색어가 모델에겐 매우 중요한 정보이지만 실제 추천에서는 다시 방문했을 때도 마지막 검색어를 기반으로 추천한다면 매우 질 낮은 추천이 되기 때문에 마지막 검색어의 importance를 의도적으로 낮춰주기 위해 average 방법을 사용했다는 것이다 (갑자기 쿠팡이 생각나는 이유는 뭘까).

    그리고 demographic 정보는 새로운 유저를 위해 아주 중요한 피처라고 언급하였는데, 아마도 유튜브가 cold-start 문제를 해결할 때 demographic 정보를 가장 중점적으로 사용하기 때문이 아닐까 싶다. (그만큼 방대하고 정확한 demo 정보가 있다는 것. 한국의 로컬 서비스에선 상상하기 힘든 이야기이다)

    본문에서 언급한 피처 중 가장 강력하다고 주장하는 것은, Video의 freshness와 bootstrapping phenomenon 두 가지를 포함하는 개념인 "Example Age"다. 이 개념 역시 본질적으로는 cold-start에 관한 언급인데, 두 가지 요소들에 의해 viral한 영상이 더더욱 많이 추천되기도 하고, 이에 따라 새로운 영상이 추천될 확률이 낮아지는 현상이 발생하기 때문이다. 따라서 이 피처를 통해 bootstrapping 현상을 방지하고, freshness를 강조할 수 있다는 것이다. 이는 쉽게 말해 영상의 Age를 training, inference 시에 모두 반영한다는 것이다. "Example Age" 피처를 적용한 실험 결과는 아래의 그림과 같다. 물론 극단적인 예시이겠지만, 엄청난 성능 향상을 보여준다는 것을 알 수 있다.



    3) Label and Context Selection

    당연한 얘기이지만 Training example은 추천 결과에서만 생성되는 것 보다는, 다른 사이트의 유입까지 모두 포함한 것이 더 좋다고 한다. 유튜브의 자체 추천 결과만으로 example을 만들면 헤비 유저의 bias를 심하게 받을 수 있고, new content에 대한 freshness를 얕잡아 볼 수 있기 때문이다. 그래서 추천이 아닌 방식으로 영상를 탐색하는 경우엔 CF를 통해 이를 민감하게 캐치한다고 언급한다. 그리고 또 다른 좋은 방법은 유저마다의 샘플을 일정한 수로 제한하는 것이다. 요약하자면 공산주의를 모델에 적용하면 좋다는 것. 결국 핵심은 일부 반동분자의 과격행동을 저지하자 헤비 유저의 bias와 추천에 의한 추천 현상을 막는 것이다.

    그리고 추천 결과를 예측함에 있어서 random을 대상으로 하여 prediction을 하는 것 보다, next prediction을 하는 것이 더욱 효과적이라는 결론을 내렸다고 한다. 실제 label의 지점을 기준으로 랜덤하게 샘플링 하는 것 보다, 이전의 데이터만 샘플링 하는 것이 효과적이라는 것. 이에 대해 시리즈물을 볼 때나, 특정 장르의 노래를 찾는 경우를 예시로 들었다. Matrix factorization 기반으로 item을 쭈욱 깔아놓고 이 중에 선호할 만한 것을 고르는 방식은 영상의 비대칭 소비패턴을 이해하지 못하는 것이라고 한다. 대칭과 비대칭 소비 예측으로 설명한 이 두가지의 차이점을 간략하게 그림으로 나타내면 다음과 같다. 요약하자면 특정 시점에서의 과거 데이터만을 가지고 next prediction을 하는 것.

     




    4. Ranking

    랭킹 모델은 별다른 특이사항 없이, 피처 엔지니어링을 통해 만들어낸 input feature들을 사용하는 point-wise ranking 모델의 형태를 DL로 나타내었을 뿐이다. 그래서 대부분의 내용이 피처 엔지니어링(DL이 대신 수행하는 기술적인 피처 엔지니어링이 아닌, raw 레벨의 비즈니스 인사이트가 필요한 피처 엔지니어링)을 설명하는 것으로 채워져 있다. 

    몇 가지 예를 들면, 유저가 특정 채널에서 얼마나 많은 영상을 봤는지, 유저가 특정 토픽의 동영상을 본 지 얼마나 지났는지, 영상의 과거 시청 여부 등의 user actions를 network의 input data로 넣기 위한 작업을 했다고 한다. 그리고 어떤 candidate generation 에서 왔는지, cadidate가 생성될 때의 스코어는 얼마인지 등의 propagated 정보도 중요한 피처라고 한다. 이 외에도 더 크리티컬한 피처들이 존재할 테지만, raw 레벨에서의 피처 엔지니어링은 100% 데이터 분석가의 역량에 의존하기 때문에 이 논문에서는 디테일한 방법이나 인사이트에 대해 언급하지는 않는 것 같다. (혹은 내가 이 부분부터는 거의 스킵 형식으로 읽었기 때문에 놓쳤을 수도 있다)

    오히려 중요한 부분은 아마도 Embedding vector일 것이다. 임베딩된 벡터를 사용하지 않는다면 사실상 DL을 사용하는 의미가 희석되고, 사람이 만들어낸 피처가 결국 모델의 성능을 좌우할 것이기 때문이다. 이 논문에서는 영상 ID, search query token 등의 categorical한 벡터들을 continuous 피처와 거의 동등한 정도의 중요도로 사용했다고 한다. 아래의 그림을 보면 알겠지만, categorical 피처는 매우 복잡하고 다양한 팩터가 존재한다. candidate 레이어에서 사용했던 임베딩보다 훨씬 방대하다.



    글을 읽어가면서 "categorical 피처가 너무 큰데 이걸 어떻게 처리했지?" 라는 의문이 드는 순간, 마침 cardinality를 핸들링하는 설명이 등장했다. 이 역시 자세한 과정은 생략되어 있지만, 클릭 빈도수 기반으로 상위 n%로 잘라낸다는 것, 그리고 n%에 속하지 않는 클래스(Out-of-vocabulary)들은 제로 임베딩으로 처리한다는 것을 언급하였다. 즉, multivalent 피처의 경우 빈도수를 기반으로 잘라낸 뒤 한번 더 임베딩을 거친 후 candidate 레이어와 마찬가지로 average 방법을 사용하는 것. 아무리 구글이라도 랭킹 모델에서의 categorical 피처는 단순히 잘라낼 수밖에 없나보다 라는 생각이 들었다.

    랭킹 모델에서 한 가지 특이한 점은 단순히 click 여부(CTR)만을 예측하는 학습 방식이 아닌, 어뷰징을 걸러내기 위한 학습 방식을 도입했다는 점이다. 만약 조회 여부만을 학습하면, 광고성의 짧은 영상에 걸리기 쉽고 반대로 시청 시간을 학습하면 너무 참여성이 높은 영상만을 추천해주기 때문이다. 그래서 weighted logistic regression 이라는 것을 개발하였다. 그리고 이를 간단히 설명하였는데, positive(clicked) impression sample의 경우 시청 시간에 따라 가중치를 부여하고, negative sample의 경우는 unit weight를 적용한다는 것이다.

     

     

     

    논문의 마무리 부분은 파라미터 실험에 대한 내용, 성과와 자랑에 대한 내용이므로 생략하도록 하겠다.

    댓글

분노의 분석실 Y.LAB