본문 바로가기

부스트캠프 AI Tech 3기/이론 : U-stage

[Day33] RecSys with DL 6-1 RecSys with DL/MLP

추천시스템 분야는 다른 분야에 비해서 ML 모델에 비해 월등히 성능이 좋지는 않다. latency를 고려해서 복잡한 모델을 사용하기도 어렵다. 그래도 연구가 이루어지고 있기 때문에 딥러닝을 이용한 추천모델을 알아보자

 

추천시스템에서 딥러닝을 활용하는 이유

Nonlinear Transformation

데이터가 가진 비선형의 패턴을 효과적으로 나타내고 모델링할 수 있다. 추천시스템에서 ReLU와 같은 비선형함수들이 복잡한 user-item interaction pattern을 효과적으로 모델링하여 큰 도움을 준다.

MF는 유저와 아이템을 임베딩한 이후에는 dot product(내적)라는 선형결합을 해서 선호도를 예측했다. 다른 모델들도 선형으로 모델이 설계되어 있는 경우가 많다. 이런 가정은 모델을 단순화하고 표현력을 한계시킨다. 

전통적인 추천 모델이 할 수 없는 복잡한 interaction을 DNN(Deep Neural Network)을 통해 학습할 수 있다.

 

Representation Learning

DNN은 데이터로부터 feature representation을 직접해서 preprocessing이 훨씬 적고, 사람이 feature design을 하지 않아도 된다. 또한, 다양한 종류의 데이터(오디오, 텍스트)를 사용할 수 있다. 하나의 모델로 학습할 수 있게 된다.

 

Sequence Modeling

DNN은 자연어처리, 음성 인식, 챗봇과 같은 task에서 sequential modeling이 좋은 성능을 내는데 이를 추천시스템의 next-item prediction이나 같은 세션에서 추천을 수행하는 session-based recommendation에서 활용될 수 있다.

 

Flexibility

딥러닝 모델을 구현할 수 있는 다양한 framework가 존재한다. 

ex) tensorflow, pytorch

 

Recommender System with MLP

MLP(Multi-Layer Perceptron)을 사용한 대표적인 추천 시스템 모델을 알아보자

feed-forward neural network

여러 노드로 이루어진 layer를 순차적으로 쌓은 구조

선형 분류에서 풀기 어려웠던 XOR문제(=비선형 문제)를 풀 수 있다는 것을 설명한다.

RNN, Autoencoder, transformer같이 복잡한 layer 이전에 MLP부터 시작했다.

 

Neural Collaborative Filtering

Matrix Factorization + MLP

MF가 가진 linear model의 한계를 NN을 이용해서 일반화 모델을 제시한다.

 

MF는 user 와 item embedding을 $r_{ui}=p_t^T\cdot q_i$라는 dot product라는 선형 연산으로 표현한다. 하지만 이 선형 연산은 복잡한 관계를 표현하는 것에 한계를 가진다. 

 

예를 들어 user 1과 4가 수치상으로는 가장 비슷하고 2와 멀리 떨어져야 하지만, 2와 3과의 관계 때문에 방해를 받고 표현할 수 없게 되는 경우가 생긴다. user-latent space에서는 그것을 표현하기 위해서 차원을 늘려야한다.

 

하지만 차원을 늘리는 것은 overfitting문제가 발생한다. 그래서 차원을 늘려서 해결하는 것이 아닌, 모델에 non linear한 표현을 추가하여 문제를 해결하고자 MLP를 도입하였다.

 

모델

Neural collaborative filtering

  • Input layer
    유저에 대한 one-hot encoding vector와 item에 대한 one-hot encoding vector로 표현된다.
  • Embedding layer
    Embedding matrix를 통해서 input layer의 user vector와 item vector들이 dense한 형태의 imbedding vector(=User Latent Vector와 Item Latent Vector)로 표현된다.
  • Neural CF layers(일반적인 MLP Layer)
    User latent vector와 Item latent vector를 concatnate해서 첫 레이어를 만들고, 이 레이어를 feed-forword neural network형태로 x개의 layer만큼 쌓는다.

    마지막 layer인 layer X 에서 최종적으로 두 유저와 아이템에 대한 rating과의 차이값 $\hat(y)$ 구한다.
  • Output layer
    target값의 형태에 맞추어 activation함수를 사용한다.
    ex) target : 0 or 1 -> activation 함수 : logistic 

 

위의  MLP layer가 오른쪽의 모델로 들어가고 왼쪽에는 기존의 MF의 일반화 버전인 GMF 모델이 있다. 이 둘이 합쳐져서 최종적인 NeuMF layer가 된다.

Neural collaborative filtering

GMF값은 user와 item one-hot vector를 각각 MF User Vector & MF Item Vector로 embedding이후 element-wise product를 해서 구해진다.

 

각 layer(오른쪽, 왼쪽)의 output을 concatnate해서 최종 NeuMF로 만들어 target값과 $\hat{y}$을 구해 비슷하게 예측한다. 두 모델 GMF와 MLP의 장점을 살리고 단점은 보완하는 앙상블 효과를 내기 위해서이다.

 

MF user Vector(embedding)과 MLP user Vector(embedding)은 서로 다른 layer를 사용했다.

 

$$\begin{aligned}
\phi^{GMF}&=(p_u^G)^Tq_i^G\\
\phi^{MLP}&=\phi_X(\cdots \phi_2(\phi_1(p_u^M, q_i^M))\cdots)\\
\hat{y}_{u,i}&=\sigma\left(h^T\begin{bmatrix}
 \phi^{GMF}\\
\phi^{MLP}
\end{bmatrix} \right)
\end{aligned}$$

 

 

NeuMF가 MLP와 GMF보다 loss는 낮으면서 성능은 좋아졌다.

 

YouTube Recommendation

유튜브 추천 문제 특징

  • scale
    유저와 아이템 수가 엄청 많아서 학습도 중요하고 그 모델을 효율적으로 서빙해야 한다.
  • freshness
    기존의 컨텐츠와 새로 업로드된 컨텐츠를 적절히 exploration해서 추천해야 한다.
  • noise
    큰 noise에 대해 모델이 잘 대응해야 한다. 유저와 아이템 수가 많기 떄문에 data의 sparsity가 높다. 또한, 외부요인이 많아서 explicit feedback만으로 예측하기 어렵다.

Youtube Recoomendation은 1단계)candidate 2단계)generation과 ranking이 핵심이다. 이를 알아보자.

 

Candidate Generation

많은 비디오가 있는 video  corpus에서 주어진 사용자에 대해서 Top N 추천 아이템 생성은 백 단위로 생성한다 (ex. Top 153)

 

Multiclass classification

유저 U가 특정시간 t에 context C를 가지고 있을 때, 각각의 비디오를 볼 확률을 계산한다.

비디오가 수백만 개나 되기 때문에 Extreme multiclass classification이라고 한다. 주어진 유저 벡터를 사용해서 마지막에는 볼 비디오를 예측해야해서 softmax를 사용한다. 수백만 개 중에서 하나를 예측하게 된다.

 

Deep Neural Networks for YouTube Recommendations

  • Watch vector and Search vector
    : 과거 시청, 검색 이력을 담은 행동 데이터를 embedding해서 평균을 구한다.
    모델의 가장 중요한 feature
    마지막 검색어가 너무 큰 힘을 갖지 않도록 평균을 낸다.
  • Demographic feature & Geographic features
    유저 정보 가운데 성별, 연령, 지역같은 정보를 embedding해서 사용한다.
  • 'Example Age' features
    : item이 언제 생성되었는지, 최근 or 과거 데이터인지를 기록해서, 최신 데이터에 더 많이 학습되게 input으로 사용한다.
    과거의 인기있던 데이터 위주로 편향되지 않게 bootstraping을 방지하고 Freshness를 준다.

위의 모든 feature vector들을 MLP layer에서 하나로 concatenate한다. 그 위에 dense한 feed-forward neural netwokr를 쌓아서 최종적으로 user vector를 생성한다. 그 후에 그 유저가 어떤 비디오를 볼지 softmax를 써서 multi-class classification을 수행하고 loss를 구한다. 

 

$$P(w_t=i|U,C)=\frac{e^{v_iu}}{\sum_{j\in V}e^{v_ju}}$$

 

주어진 user에 대해서 상위n개의 비디오를 추출하기 위해서는 모든 비디오에 대해서 모든 softmax probability를 계산하고 그 중 가장 값이 높은 N개를 추천한다. 하지만 이 연산은 오래걸려서 실제로 서빙하는 것은 불가능하다. 그래서 주어진 유저 벡터와 가장 유사한 vector를 찾아주는 ANN라이브러리를 사용해서 정확한 softmax는 아니지만 유사한 아이템 벡터를 수백 개 서빙하게 된다.

 

Ranking

Top N 으로 추천된 수백 개의 아이템에 대한 랭킹을 수행해서 몇 십개로 줄인다. candidate generation에서 이미 엄청 많은 video중에서 걸러내어였으니 ranking에서는 유저와 비디오의 피쳐를 좀 더 풍부하게 사용한다.

 

주어진 user-item context에 대해서 해당 아이템이 노출되었을 때 클릭할 확률을 logistic regression을 사용해서 구한다. NN을 사용해서 다양한 feature를 사용할 수 있다. 

 

  • input feature
    : user actions feature을 사용한다.
    유저가 과거에 어떤 채널에서 어떤 영상을 많이 봤는지, 어떤 topic, 언어 등의 feature를 사용한다.
    도메인 전문가, 서비스 전문가가 하는 feature selection과 feature engineering이 필요한다.
  • input feature들이 concatenate해서 MLP layer로 들어가게 된다.
    그럼 결과로 비디오가 실제로 시청될 확률(Expected Watch Time : 비디오를 클릭한 후 얼마나 보고 있을지)을 예측하게 된다. (CTR예측 : 볼 지 -1, 안 볼지-0)
  • Loss function
    loss function을 단순하게 클릭 여부가 아니라, 클릭 이후 시청시간이 짧은지 긴지를 가중치로 사용해서 weighted cross-entropy loss을 수행한다. 많이 시청할수록 weight를 높게 주어 더 많이 학습할 수 있도록 한다.

Youtube recommendation은 모델을 어떻게 서빙해야 현업에서 사용할 수 있는지 제시했다.