본문 바로가기
ML&DL/Recommender System

[Recommender System / Paper review] #18 Neural Collaborative Filtering

by 거북이주인장 2023. 4. 18.

Summary

  • 유저와 아이템간의 interaction을 벡터의 내적이 아닌 neural network으로 모델링하는 neural cf을 제안한다.
  • embedding layer을 통해 유저와 아이템에 대한 latent vector을 만들고 이를 neural cf layers의 입력값으로 넣는다.
  • neural cf layers는 각자 입맛에 맞게 구성하면 된다. activation function을 정하고 몇개의 layer을 쌓을 것인지 정한다.
  • 최종 output activation function을 통해 $\hat{y}_{ui}$을 생성한다.
  • 본 논문은 implicit feedback의 binary 값이 발생할 확률을 정의하고 이를 최대화하는 방향으로 likelihood 최적화를 진행한다.

Motivation

  • 추천시스템 분야에서 딥러닝을 사용하는 접근법은 많이 시도됐는데, 대부분 모델의 auxiliary 정보를 모델에 통합할 때 사용되고 모델의 핵심 요소인 interaction 값을 모델링할 때는 여전히 내적이 사용됐다. 
  • 본 논문은 유저와 아이템의 interaction은 단순 내적으로 선형적으로 모델링하기에는 한계가 있다고 지적한다. 따라서 복잡한 관계를 함수로 근사하는 딥러닝 방법을 cf에 녹여내고자 하는 것이다.

Approach

Learning from implicit data

  • M명의 유저와 N개의 데이터
  • $\mathbf{Y} \in \mathbb{R}^{M \times N}$: 유저x아이템 interaction 행렬으로, 각 원소는 implicit feedback을 나타낸다.
  • $y_{ui} = \begin{cases} 1, & \text{if interaction for user u and item i is observed} \\ 0, & \text{otherwise} \end{cases}$

implicit feedback을 사용하는 추천문제는 $\mathbf{Y}$의 관측되지 않은 값의 점수를 추정하는 것이다. 즉, interaction function인 $f$을 통해서 $y_{ui}$에 대한 predicted scores인 $\hat{y}_{ui} = f(u,i | \mathbf{\theta})$을 학습하는 것이 목적이다.

Matrix Factorization

cf 분야에서 연구가 활발하게 진행되고 있는 mf는 interaction function을 내적으로 사용한다. 즉, prediction scores을 아래와 같이 계산한다.

  • 내적을 잘 째려보면, 유저, 아이템 latent vector의 각 latent factor가 동일한 weight로 더해짐을 알 수 있다.
  • 즉, k개의 $p_{ui} q_{ik}$을 더하는 것인데, 여기에 가중치가 모두 1이기 때문이다.
  • 따라서 내적을 사용하는 mf는 latent factors의 선형 모델로 볼 수 있다.

이제 mf가 사용하는 내적이 어떤 식의 단점을 가지는지 살펴보자.

  • 유저들간의 유사도는 내적이나 코사인 유사도를 이용해서 구할 수 있다. 이를 $s(\cdot)$이라고 하자.
  • u1, u2, u3을 살펴보면, $s_{23}(0.66) > s_{12}(0.5) > s_{13}(0.4)$이므로 u2와 u3을 가장 가깝게, u1와 u3을 가장 멀리 표현하면 오른쪽 그림과 같다.
  • 여기에 u4가 들어오면, $s_{41}(0.6) > s_{43}(0.4) > s_{42}(0.2)$이다. u4와 u1이 가장 가까우므로 벡터를 오른쪽 그림의 점선과 같이 표현하면, u4가 u3보다는 u2와 더 가까워 진다.
  • 즉, 내적을 이용하여 유저별로 유사도 랭킹을 매겨봤더니 ranking loss가 발생함을 확인할 수 있다. 바로 이 문제를 DNN을 통해 풀고자 한다.

Neural collaborative filtering: General framework

  • notation
    • $\mathbf{P}_{M \times K}$: 유저의 embedding vector을 만들기 위한 weight matrix
    • $\mathbf{Q}_{N \times K}$: 아이템의 embedding vector을 만들기 위한 weight matrix
    • $\mathbf{v}^U_u, \mathbf{v}^I_i$: 유저 u, 아이템 i에 대한 feature vector
  • input layer
    • $\mathbf{v}^U_u, \mathbf{v}^I_i$가 입력으로 들어간다.
    • 여기에 다양한 형태의 벡터를 입력으로 넣을 수 있다. 예를 들어, context-aware, content-based 등이 사용될 수 있다.
    • 다만, 본 논문에서는 이런 시도를 하는게 목적이 아니기 때문에 one-hot encoding된 sparse vector을 입력으로 넣는다.
  • embedding layer
    • $\mathbf{P}, \mathbf{V}$을 사용하여 sprase 벡터를 dense vector로 projection하는 과정이다. 
    • 만들어진 유저, 아이템 벡터는 latent vector로 mf의 결과로 얻어진 벡터의 한 종류로 볼 수 있다.
  • neural cf layers
    • 임베딩된 벡터는 multi-layer neural 아키텍쳐의 입력값으로 들어가는데, 이를 neural collaborative filtering layers라고 부른다.
    • 각 레이어는 입맛에 맞게 customize할 수 있다.
  • output layer
    • 마지막 layer X을 지나서 최종 scores인 $\hat{y}_{ui}$을 계산한다.
    • target인 $y_{ui}$와의 차이를 최소하하는 방향으로 학습이 진행된다.

neural cf의 predictive model은 아래와 같다.

모델이 multi-layer neural network이기 때문에 아래와 같이 $f$를 표현할 수 있다.

Learning NCF

이전의 squared loss을 사용하여 진행하는 파라미터 학습법은 아래의 loss을 최소화하고자 하였다.

이 loss는 $y_{ui}$을 binary implicit feedback으로 치환하고 $w_{ui}$을 count에 대한 함수로 표현하여 가중치로 표현한 것으로, 이 논문에서 제안되었다.

본 논문에서는 implicit feedback이 binary data이므로 이런 squared loss가 아닌, implicit feedback이 발생할 확률을 probabilistic하게 접근하는 것을 제안한다. 이를 아래와 같이 베르누이 분포에 대한 likelihood 형태와 비슷하게 정의한다.

loss을 최소화하는 해석을 하기 위해서 likelihood에 negative, log을 취한다.

observed sample의 집합인 $\mathcal{Y}$와 negative sample의 집합인 $\mathcal{Y}^-$을 합쳐서 summation을 해보면 cross entropy와 동일한 loss가 나온다.

Generalized matrix factorization (GMF)

mf가 ncf의 special case임을 보여보자. 유저 latent vector $\mathbf{p}_u = \mathbf{P}^T \mathbf{v}^U_u$와 아이템 latent vector $\mathbf{Q}^T \mathbf{v}^I_i$로 두자. 첫번째 neural cf layer는 아래와 같이 element-wise product로 표현할 수 있다.

이 벡터를 output layer에 아래와 같이 projection 한다.

  • $a_{out}$: activation function
  • $\mathbf{h}$: edge weights of output layer
  • 만약 여기서 $a_{out}$가 identity function이고 $\mathbf{h} = \mathbf{1}$이라면 mf와 상황이 동일해진다. 따라서 mf는 ncf에서 activation function과 output layer의 edge weight을 위와 같이 설정하고 layer을 한개만 쌓은 상황과 동일하다는 것이다.
  • 본 논문에서는 activation function으로 sigmoid function을 사용하고 $\mathbf{h}$을 loss로부터 학습한다.

Multi-layer perceptron (MLP)

NCF는 유저의 latent vector와 아이템의 latent vector을 사용하기 때문에 이 두 벡터를 concatenate하여 새로운 벡터를 생성하는 것이 처음의 아이디어였다. 하지만, 단순 concatenation하는 것보다는 그 이전에 hidden layer을 추가하여 MLP을 통해 concatenation의 효과를 더하는 것을 제안한다. 본 논문에서는 activation function으로 relu을 사용한다.

Fusion of GMF and MLP

여태까지 GMF와 MLP을 사용한 NCF을 살펴보았다. 이제 MLP을 사용하는 NCF 틀 안에서 GMF을 어떤 식으로 통합할 것인지 알아본다.

가장 간단한 방법은 GMF와 MLP가 동일한 embedding layer을 공유하도록 설정하는 것이다. 이 방법은 Neural Tensor Network로도 알려져있다. one-layer MLP와 GMF을 NTN 방법으로 섞으면 아래와 같다.

  • GMF의 벡터 내적과 MLP의 linear kernel을 더한 후에, one layer neural network을 태우는 방식이다.
  • 이는 두 종류의 벡터가 동ㅇ리한 차원이어야 하기 때문에 성능 면에서 떨어질 수 있다.

더 유연한 모델링을 위해, GMF와 MLP가 서로 다른 embedding을 학습하고 마지막에 concatenation하는 방법을 제안한다.

  • GMF을 사용한 유저, 아이템 latent vector을 GMF Layer에서 element-wise product한다.
  • MLP을 사용한 유저, 아이템 latent vector을 concatenation하고 MLP을 태운다.
  • 최종 neumf 이전에 concatenation하고 activation function을 태우고 score을 계산한다.

수식으로 풀면 아래와 같다.

  • $\mathbf{p}^G_u, \mathbf{p}^M_u$: GMF, MLP의 유저 latent vector
  • $\mathbf{q}^G_u, \mathbf{q}^M_u$: GMF, MLP의 아이템 latent vector
  • MF의 linearity와 DNN의 non linearity을 모두 합치는 모델로, Neural matrix factorization이라고 부른다.

Results

비교 모델

  • itempop: interactions의 수로 추천을 하는 방법
  • itemknn: item-based cf
  • bpr: bayesian personalized ranking
  • eals: 관측되지 않은 interactions에 서로 다른 가중치를 주는 mf 방법

evaluation protocols

  • Hit Ratio:  상위 10위 안에 아이템이 있는지 여부
  • NDCG

  • 두 데이터세트에 대해, k를 고정하고 factors을 늘린 결과에서 neumf가 좋은 성능을 보였다.
  • 또한 k를 늘렸을 때도 neumf가 좋은 성능을 보였다.

  • neumf가 다른 모델에 비해 training loss가 더 낮았다
  • bpr과 같은 pairwise objectie function은 positive instance 하나당 negative instance 하나를 짝 지을 수 있는데 pointwise log loss는 sampling ratio을 다르게 하여 negative sampling의 비율을 조절할 수 있다.
  • 이에 대한 결과가 figure 7에 나와있는데, bpr에 비해 neumf가 negative sample의 수에 상관 없이 더 좋은 성능을 보임을 확인할 수 있다.

Conclusion

  • 인용수도 많고, 논문 설명도 잘 되어 있어서 neural network을 사용하는 cf의 거의 원조격이 아닐까 싶다.
  • 유저 벡터와 아이템 벡터에 대한 dense vector을 생성하고, 이를 mlp에 태운다는게 인상적이었다.
  • 이에 더해, 유저 벡터와 아이템 벡터에 대한 latent vector을 생성할 때 다른 rs의 방법론들 (context aware, content-based 등)을 같이 끼울 수 있다는 것도 흥미로웠다.

댓글