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

[Recommender System / Paper review] #28 Factorization Meets the Item Embedding: Regularizing Matrix Factorization with Item Co-occurrence

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

Summary

  • mf 목적식에 item co-occurrence 목적식을 더하여 아이템 벡터를 jointly 학습함으로써 아이템 벡터의 유저의 취향 뿐만 아니라 같이 출현하는 아이템의 관계도 함께 녹여낸다.
  • 아이템 co-occurrence은 SPPMI 행렬로 표현하며 이 행렬을 분해함으로써 쌍으로 등장하는 관계가 담겨있는 아이템 벡터를 생성한다.
  • Levy는 skipgram으로 학습한 word2vec과 pointwise mutual information 행렬을 분해한 것과의 관계를 밝혔는데, 이 맥락에서 SSPMI 행렬이 아이템 간의 co-occurrence와 관련이 있는 것이다.
  • 최적화는 유도된 gradient을 사용하여 sgd을 통해 진행한다. 이는 ALS과 비슷한 형태이다.

Motivation

  • 딱히 어떤 알고리즘의 단점을 보완한다는 내용은 없다. 그냥 mf에 아이템의 co-occurrence 정보를 더하는 느낌이다.

Approach

Matrix Factorization

모델 기반 cf에서 standard로 언급되는 알고리즘이다. mfs는 아래 식을 최소화하는 방향으로 파라미터를 학습한다.

  • $\mathbf{Y} \in \mathbb{R}^{U \times I}$: 유저x아이템 행렬
  • $\theta_u \in \mathbb{R}^K$: K차원의 유저 벡터
  • $\beta_i \in \mathbb{R}^K$: K차원의 아이템 벡터
  • $c_{ui}$: scaling hyperparameter. 관측된 데이터와 관측되지 않은 데이터의 균형을 맞추기 위해 사용된다.

Word embedding

word embedding은 단어의 sequence가 주어질 때, 각 단어를 저차원의 continuous space로 임베딩한다. skip-gram 모델은 현재 단어가 주어졌을 때 주변 단어인 context-word을 예측하는 것이다. 단어에 대한 임베딩 벡터를 얻기 위해 보통 negative sampling과 함께 sgd을 사용한다.

Levy는 skip-gram word2vec과 PMI 행렬의 implicit factorizing이 동일함을 밝혔다. 단어 i,j의 PMI 값은 아래와 같다.

관측된 데이터 기반으로는 아래와 같이 계산한다.

Levy는 더 나아가서 단어 임베딩을 shifted positive PMI (SPPMI) 행렬에 spectral dimension reduction을 하여 유도하는 것을 제안한다.

이렇게 행렬 분해를 하면 learning rate과 같은 하이퍼파라미터를 튜닝할 필요가 없으니까 충분히 이점이 있는 방법이다. 본 논문에서는 이 방법을 cf에 적용한다.

Item embedding

유저는 아이템을 순차적(sequential)으로 소비하고 이는 단어의 순서와 유사하므로 본 논문에서는 이 관계를 사용하여 아이템 임베딩을 학습한다.

$\mathbf{M} \in \mathbb{R}^{I \times J}$을 co-occurrence SPPMI 행렬이라고 하자. 아이템 임베딩을 행렬 $\mathbf{M}$을 분해함으로써 얻을 수 있다. 본 논문에서는 유저가 아이템을 소비한 timestamp을 알 수 없다고 가정한다. 대신, 특정 유저가 소비한 아이템 i와의 context 아이템 j는 유저가 클릭한 모든 아이템으로 정의한다. 아이템 i,j와 관련된 PMI 값인 $m_{ij}$을 위의 PMI 공식을 사용하는데 이때 #(i,j)은 아이템 i,j을 모두 소비한 유저로 정의한다.

본 논문에서는 PMI 값을 이와 같이, 아이템을 소비한 order의 개념을 사용하지 않고 정의한다. 사실 이는 word embeding의 개념과 조금 다르긴 하다. word2vec은 현재 단어의 주변 단어가 무엇인지에 따라 단어 임베딩이 달라지기 때문이다. (근데 사실 대부분의 데이터는 timestamp가 찍혀있을 것 같은데.. 이러한 모델 가정은 좀 아쉽긴 하다)

The CoFactor model

  • MF에서 쓰이는 loss와 penalty는 그대로 쓰인다.
  • 아이템 벡터인 $\beta_i$와 context 벡터인 $\gamma_j$을 통해서 SPPMI 행렬을 분해한다. 이때, 두 벡터의 내적뿐만 아니라 아이템과 context에 대한 bias도 추가한다.
  • 다만, 아이템과 context에 대한 bias에 penalty을 부여하지는 않는다. (이유는 명확히 안 나와 있다.)
  • 아이템 임베딩인 $\beta_i$는 유저와 아이템간의 상호작용뿐만 아니라 아이템간의 co-occurrence도 반영한다. 동일한 loss에서 동일한 아이템 벡터를 사용하여 joint하게 gradient을 업데이트하기 때문이다.

Inference

  • 모델 파라미터의 gradient에 대한 closed form을 구하고 업데이트를 진행한다.
  • 이는 마치 ALS과 같은 형태이다. 특히 $\beta_i$의 업데이트 식을 보면 두 가지 종류의 데이터를 사용해서 ridge regression을 하는 것과 동일한 모습이다.

Results

Datasets

  • ArXiv: 유저-논문에 대한 클릭 데이터
  • movielens
  • TasteProfile: 유저x음악 청취 데이터

모든 데이터와 모든 지표에서 WMF에 비해 CoFactor 모델이 더 나은 성능을 보임을 알 수 있다.

When does cofactor do better / worse?

  • cofactor 모델의 성능을 분석하기 위해 유저가 과거에 소비한 아이템 개수에 따른 성능을 비교해보았다.
  • 위 그림에서 소비한 아이템이 적을수록 cofactor가 좋은 성능을 보임을 알 수 있다.
  • 이는 wmf는 소비한 아이템이 적으면 정확하게 유저의 선호도를 예측하기가 어렵지만 cofactor 모델은 SPPMI 행렬을 추가적으로 사용함으로써 이를 보완하기 때문이다.
  • 즉, cofactor는 wmf에 비해 더 풍부한 데이터를 사용하기 때문에 sparseness을 더 잘 해결할 수 있음을 보여준다.

  • rare 아이템에 대해 랭킹을 어떻게 하는지 살펴보기 위해 시청 기록이 10회 미만인 영화의 랭킹을 어떻게 매기는지 히스토그램으로 그려보았다.
  • wmf는 rare 아이템의 랭킹을 주로 중간에 매기는 것을 알 수 있는데, cf는 인기가 있는 아이템쪽으로 학습이 진행이 되기 때문이다.
  • 반면에 cofactor 모델은 wmf에 비해 rare 아이템의 랭킹을 더 양극단으로 매기는 것을 확인할 수 있다.

  • 인기있는 영화를 많이 본 유저에게 추천한 결과를 비교하였다.
  • wmf는 주로 인기가 많은 영화를 추천한 반면, cofactor는 인기있는 영화뿐만 아니라 그 유저가 시청한 french 영화와 관련된 컨텐츠들도 균형있게 추천한 것을 알 수 있다.
  • 이는 SPPMI 행렬에서 french 영화와 함께 출현한 영화를 cofactor 모델은 학습했기 때문에 발생한 결과라고 해석할 수 있다.

Conclusion

  • 기본적인 mf 행렬에 어떠한 정보를 어떤 형태로 넣느냐가 모델 향상에 key point가 되는 것 같다.
  • 특히 이 논문은 word2vec의 SPPMI 행렬 분해 방법을 차용하여 mf와 동시에 아이템 벡터를 학습하는 것이 핵심 아이디어이다.
  • 이를 통해 mf에서 얻는 유저-아이템간의 관계와 SPPMI에서 얻는 아이템간의 관계를 동시에 아이템 벡터에 녹여내는 것이다.
  • 다만, SPPMI 행렬을 구성할 때 공간 복잡도가 상당히 많이 필요할 것 같은데 이는 고민이 필요한 영역인 것 같다.

댓글