태그 보관물: Recommender System

DNN for YouTube Recommendations

youtube-recomm-1

출처: DNN for YouTube Recomm. 페이퍼

이번달에 열리는 10th ACM Conference on Recommender Systems에 맞춰 구글 리서치에서 사용자에게 유투브 동영상을 추천하는 시스템에 대한 개괄적인 소개를 담은 페이퍼(pdf)를 공개하였습니다. 페이퍼의 내용으로 미루어 보아 유투브의 추천 시스템은 구글 브레인팀에서 텐서플로우를 이용하여 구축한 것 같습니다.

유투브에서는 추천을 위해 수백만개의 동영상을 수백개의 후보로 좁히고 이를 바탕으로 다시 사용자에게 추천할 영상을 고르는 두 단계로 구성되어 있습니다. 두 단계 모두 몇단계의 ReLU(Rectified Linear Unit) 활성화 함수를 가진 완전 연결(fully connected) 레이어로 구성되어 있습니다. 후보자를 생성하는 첫 단계는 소프트맥스 함수를 이용한 분류(Classification) 문제로 변환하여 생각하였습니다. 사용된 훈련 데이터는 전체 유투브 동영상 시청 데이터를 기반으로 하고 있고 갯수는 수천억건에 이릅니다.

youtube-recomm-2

출처: DNN for YouTube Recomm. 페이퍼

학습에 필요한 데이터를 추출할 때 효과적인 학습을 위해 워드 임베딩에서 사용하는 네거티브 샘플링(negative sampling)을 기법을 이용하였고 소수의 유저가 일으키는 대량의 트래픽으로 학습이 오염되지 않게 하기 위해 사용자마다 고정된 양의 샘플을 추출했습니다. 이렇게 유투브 트래픽으로 뉴럴 네트워크를 학습시키면 이 모델은 매트릭스 인수분해(matrix factorization) 부담으로 실제 적용이 어려운 user-user 협업 필터링을 간접적으로 구현하는 효과를 가집니다.

youtube-recomm-3

출처: DNN for YouTube Recomm. 페이퍼

첫번째 네트워크에서 학습된 모델을 사용하여 사용자에게 맞는 후보 영상을 고르기 위해 해싱기법을 사용하는 Nearest Neighbor 근사 알고리즘을 사용하였습니다. 네트워크의 입력은 그림에서 볼 수 있듯이 비디오 시청 데이터, 사용자 검색어, 지역, 영상이 제공된 기간, 성별 등 많은 특성들을 사용하고 있습니다. 특별히 가변 길이의 시청 데이터를 언어 모델링에서 사용하는 임베딩 방법을 사용하여 압축(dense representation)하여 입력으로 사용하였습니다.

이 시스템은 유투부의 홈페이지에 맞춤 동영상 영역에 나타나는 항목을 결정합니다. 사용자는 시리즈를 본다거나 한 종류의 영상을 지속적으로 보는 경향이 있습니다. 예를 들면 지금 ‘테일러 스위프트’를 검색했다고 해서 홈페이지의 추천 영역을 테일러 스위프트와 관련있는 것으로 바꾸어 버리는 것이 A/B 테스트 결과 더 좋지 않았습니다. 따라서 시청이 어느 정도 완료된(hold out) 영상까지의 데이터만 추론에 사용합니다(테일러 스위프트 뮤직비디오를 다 시청하니 바로 맞춤 동영상 영역에 테일러 스위프트의 영상이 추천되었습니다).

이와 비슷한 맥락으로 유투브의 추천 시스템은 ‘좋아요’나 ‘싫어요’ 같은 명확한 사용자의 액션 뿐만 아니라 시청 완료 같은 겉으로 드러나지 않는 사용자의 액션을 함께 사용합니다. 이는 전자의 데이터가 너무 드물기(sparse) 때문입니다.

 

youtube-recomm-4

출처: DNN for YouTube Recomm. 페이퍼

두번째 네트워크는 수백개의 후보 가운데 사용자의 디바이스에 노출할 동영상을 결정하는 모델(ranking model)을 학습시킵니다. 이 모델은 동영상을 클릭할 확률을 예측하는 것이 아니라 동영상의 기대 시청 시간을 예측하는 로지스틱 회귀 분석입니다. 이는 동영상을 시청하지는 않고 클릭만 이리 저리 누르는 사람들이 있기 때문에 시청 시간을 모델링 하는 것이 더 좋은 성과를 냅니다. 두번째 모델도 A/B 테스트를 통해 지속적으로 실시간 튜닝이 됩니다.

두번째 네트워크도 수백개의 입력을 사용하여 완전 연결 ReLU 레이어를 쌓아서 구성하며 주된 학습 재료는 비디오 노출 데이터와 사용자가 시청한 데이터입니다. 이 때 사용자와 비디오 데이터를 적절하게 가공하기 위해 각각 상당한 피처 엔지니어링이 불가피 합니다.

이 페이퍼는 뉴럴 네트워크 뿐만이 아니라 추천 시스템과 동영상 사이트의 특징들을 이해해야 해서 읽기 어려웠던 것 같습니다. 부족한 부분은 댓글로 채워주세요.

Wide & Deep Learning with TensorFlow

image04

출처: 구글 리서치 블로그

구글 리서치 블로그에서 머신 러닝의 로지스틱 회귀(Regression)와 뉴럴 네트워크 모델을 조합하여 추천 시스템에 적용한 연구 내용을 올렸습니다. 두 모델을 조합하는 API는 TF learn에 위치해 있습니다. TF Learn은 이전에 독립된 레파지토리에 있다가 0.8 버전에서 합쳐진 scikit flow(skflow)를 다르게 부르는 것 같습니다. 하지만 또 다른 서드파티 라이브러리 tflearn과 헷갈리게 됐습니다.

와이드앤 딥 러닝 모델은 검색이나 추천시스템, 랭킹 모델에서 전체 트래픽은 많지만 매칭된 데이터는 드문 경우 모델이 너무 구체화(overfit)되거나 너무 일반화(underfit) 되는 것을 적절히 안배하기 위하여 고안되었다고 합니다. 블로그에서는 음식 추천을 예로 들어 설명하고 있는데요. 로지스틱 회귀의 경우 주어진 검색어에 대해 어떤 음식이 추천되었을 때 주문이 일어날 가능성이 높은 순으로 추천이 일어나게 될 것입니다. 이런 경우 추천시스템 쪽에서 이야기하는 세렌티피티(Serendipity)가 부족하다고 말합니다. 즉 사용자가 깜짝 놀랄 추천을 하지 못하고 판에박힌 아이템만 늘어놓게 되는 경우입니다. 임베딩 벡터를 사용한 딥 뉴럴 네트워크를 이용할 경우 프라이드 치킨을 검색한 사용자에게 햄버거를 추천할 수 있다고 합니다. 하지만 딥 러닝 모델은 아이스 라떼를 요청한 사람에게 뜨거운 라떼를 추천할 수도 있기에 와이드한 것과 딥한 두 모델을 적절히 안배하는 것이 좋다고 말하고 있습니다.

와이드 모델과 딥 모델에 각각 어떤 피처(feature)를 사용할지 뉴럴 네트워크의 레이어를 어떻게 구성할지는 당연히 이용자의 몫입니다. 와이드앤 딥 러닝 모델을 위해 skflow에 추가된 API는 tf.contrib.learn.DNNLinearCombinedClassifier 와 tf.contrib.learn.DNNLinearCombinedRegressor 입니다. 아마도 로지스틱 회귀를 위한 펼쳐진 뉴런의 모습에서 와이드(wide)하다는 표현을 쓰는 것으로 보입니다. 와이드앤 딥 러닝을 위한 튜토리얼예제 그리고 페이퍼를 참고하세요.