추천시스템 라이브러리 비교

기린이·2021년 6월 26일
0

이번 시간엔 간단하게 추천시스템을 구현할 수 있는 라이브러리들을 비교해보았습니다. 대부분 베이직한 CF의 Neighborhood model, Matrix Factorization model들이 구현되어있습니다.

Koren의 두 논문 Koren:2008, Koren:2009의 알고리즘을 참고한 경우가 많아서 두 논문과 세미나에서 진행한 두 논문의 리뷰를 참고하시면 좋을 듯 합니다.
Koren:2008 리뷰, Koren:2009 리뷰


Implicit

  • implicit 데이터에 사용가능한 라이브러리

  • 가장 널리 사용된다.

ALS Collaborative filtering

  • MF모델. ALS(AlternatingLeastSquares, 교대최대제곱법) 모델.

  • 유저행렬과 아이템 행렬을 차례대로 최적화

Baysian Personalized Filtering

  • "BPR: Bayesian Personalized Ranking from Implicit Feedback." 논문의 알고리즘.

  • 기존의 pointwise 기반의 optimization이 아닌 ranking optimization을 적용함. 논문에서는 MF, neighborhood model 모두 적용한다. 여기선 MF만 구현함. 논문

Logistic Matrix Factorization

  • 2014년 Spotify에서 발표한 논문

  • LMF는 MF에 logistic함수를 도입하여 item에 대한 user의 선호를 확률적으로 모델링한 것. 논문


Surprise

  • explicit 데이터에 사용가능한 라이브러리

Basic algorithms

NormalPredictor

MLE를 통해서 추정한 N(μ^,σ^2)분포를 통해 예측

BaselineOnly

  • r^ui=bui=μ+bu+bi\hat{r}_{ui} = b_{ui} = \mu + b_u + b_i

user, item 평균치 고려

k-NN inspired algorithms

KNNBasic

  • r^ui=vNik(u)sim(u,v)rvivNik(u)sim(u,v)\hat{r}_{ui} = \frac{ \sum\limits_{v \in N^k_i(u)} \text{sim}(u, v) \cdot r_{vi}} {\sum\limits_{v \in N^k_i(u)} \text{sim}(u, v)}

  • r^ui=jNuk(i)sim(i,j)rujjNuk(i)sim(i,j)\hat{r}_{ui} = \frac{ \sum\limits_{j \in N^k_u(i)} \text{sim}(i, j) \cdot r_{uj}} {\sum\limits_{j \in N^k_u(i)} \text{sim}(i, j)}

  • basic한 neighborhood model.

  • item based, user based 모두 가능

KNNWithMeans

  • r^ui=μu+vNik(u)sim(u,v)(rviμv)vNik(u)sim(u,v)\hat{r}_{ui} = \mu_u + \frac{ \sum\limits_{v \in N^k_i(u)} \text{sim}(u, v) \cdot (r_{vi} - \mu_v)} {\sum\limits_{v \in N^k_i(u)} \text{sim}(u, v)}

  • r^ui=μi+jNuk(i)sim(i,j)(rujμj)jNuk(i)sim(i,j)\hat{r}_{ui} = \mu_i + \frac{ \sum\limits_{j \in N^k_u(i)} \text{sim}(i, j) \cdot (r_{uj} - \mu_j)} {\sum\limits_{j \in N^k_u(i)} \text{sim}(i, j)}

  • 각 유저나 아이템의 mean 고려

  • basic한 neighborhood model.

  • item based, user based 모두 가능

KNNWithZScore

  • r^ui=μu+σuvNik(u)sim(u,v)(rviμv)/σvvNik(u)sim(u,v)\hat{r}_{ui} = \mu_u + \sigma_u \frac{ \sum\limits_{v \in N^k_i(u)} \text{sim}(u, v) \cdot (r_{vi} - \mu_v) / \sigma_v} {\sum\limits_{v \in N^k_i(u)} \text{sim}(u, v)}

  • r^ui=μi+σijNuk(i)sim(i,j)(rujμj)/σjjNuk(i)sim(i,j)\hat{r}_{ui} = \mu_i + \sigma_i \frac{ \sum\limits_{j \in N^k_u(i)} \text{sim}(i, j) \cdot (r_{uj} - \mu_j) / \sigma_j} {\sum\limits_{j \in N^k_u(i)} \text{sim}(i, j)}

  • 각 유저나 아이템의 mean, std 고려

  • basic한 neighborhood model.

  • item based, user based 모두 가능

KNNBaseline

  • r^ui=bui+vNik(u)sim(u,v)(rvibvi)vNik(u)sim(u,v)\hat{r}_{ui} = b_{ui} + \frac{ \sum\limits_{v \in N^k_i(u)} \text{sim}(u, v) \cdot (r_{vi} - b_{vi})} {\sum\limits_{v \in N^k_i(u)} \text{sim}(u, v)}

  • r^ui=bui+jNuk(i)sim(i,j)(rujbuj)jNuk(i)sim(i,j)\hat{r}_{ui} = b_{ui} + \frac{ \sum\limits_{j \in N^k_u(i)} \text{sim}(i, j) \cdot (r_{uj} - b_{uj})} {\sum\limits_{j \in N^k_u(i)} \text{sim}(i, j)}

  • 유저와 아이템의 bias 모두 고려

  • basic한 neighborhood model.

  • item based, user based 모두 가능

Matrix Factorization(SVD, SVD++, NMF, PMF)

SVD

  • bias가 있는 기본적인 SVD 모델.

  • 규제항이 있는 squared error를 SGD 한다.

r^ui=μ+bu+bi+qiTpu\hat{r}_{ui} = \mu + b_u + b_i + q_i^Tp_u

ruiRtrain(ruir^ui)2+λ(bi2+bu2+qi2+pu2)\sum_{r_{ui} \in R_{train}} \left(r_{ui} - \hat{r}_{ui} \right)^2 + \lambda\left(b_i^2 + b_u^2 + ||q_i||^2 + ||p_u||^2\right)

biased = False할 시 bias없는 모델 사용가능

SVD++

  • r^ui=μ+bu+bi+qiT(pu+Iu12jIuyj)\hat{r}_{ui} = \mu + b_u + b_i + q_i^T\left(p_u + |I_u|^{-\frac{1}{2}} \sum_{j \in I_u}y_j\right)

implicit data 사용. SVD와 같이 규제항이 있는 squared error를 SGD 한다.

NMF

  • 음수 미포함 행렬 분해(Non-negative Matrix Factorization, NMF)는 음수를 포함하지 않는 행렬 X를 음수를 포함하지 않는 행렬 W와 H의 곱으로 분해하는 알고리즘

  • non-negative 데이터는 non-negative feature로 설명하는 것이 좋다는 점, feature들의 독립성을 잘 catch 할 수 있다는 점이 장점 참고

  • r^ui=qiTpu\hat{r}_{ui} = q_i^Tp_u


LightFM

  • implicit, explicit 데이터 모두 사용가능.

  • LightFM 모델 구현가능

  • LightFM은 Collaborative filtering, Content based filtering이 결합된 hybrid model

qu=jfuejUq_u = \sum_{j \in f_u}e_j^U pi=jfiejIp_i = \sum_{j \in f_i}e_j^I

bu=jfubjUb_u = \sum_{j \in f_u}b_j^U bi=jfibjIb_i = \sum_{j \in f_i}b_j^I

r^ui=sigmoid(qupi+bu+bi)\hat{r}_{ui} = sigmoid(q_u \odot p_i + b_u + b_i)

ex) 아이템이 데님자켓이라면 '데님'과 '자켓'의 latent vector들의 합이 quq_u, 유저가 미국에 살고 여성이라면 둘의 latent vector의 합이 pip_i

유저와 아이템 각각의 feature와 둘 간의 상호작용을 모두 고려할 수 있다.

cold start 문제를 완화할 수 있다.

예측 평점이 아웃풋이 아닌 추천 점수가 아웃풋이다. 해당 유저가 해당 아이템을 선호할 확률같은 개념이라고 보면 될 듯하다.


이미지 출처


Buffalo

  • 다른 라이브러리에 비해서 적은 메모리 사용과 빠른 속도를 가짐.
  • 아래는 ALS 모델에 대한 비교로, Implicit 라이브러리 보다 좋은 성능을 보여준다.
  • Alternating Least Squares
  • Bayesian Personalized Ranking Matrix Factorization
  • Word2Vec
  • CoFactors

위의 알고리즘들이 구현되어 있다.


Spotlight

  • implicit , explicit 데이터 사용가능

  • Factorization models(implicit/explicit), Sequantial models(implicit) 알고리즘이 구현되어 있음

  • sequaltial model을 사용가능한 것이 특징

Factorization model

  • "dot product of the item and user latent vectors koren's classic matrix factorization" 라고 설명하는 것을 보아 SVD알고리즘인 듯 하다.

r^ui=μ+bu+bi+qiTpu\hat{r}_{ui} = \mu + b_u + b_i + q_i^Tp_u

ruiRtrain(ruir^ui)2+λ(bi2+bu2+qi2+pu2)\sum_{r_{ui} \in R_{train}} \left(r_{ui} - \hat{r}_{ui} \right)^2 + \lambda\left(b_i^2 + b_u^2 + ||q_i||^2 + ||p_u||^2\right)

Sequaltial model

  • "Deep Neural Networks for YouTube Recommendations"의 pooling model,

  • "SESSION-BASED RECOMMENDATIONS WITH RECURRENT NEURAL NETWORKS"의 LSTM model,

  • WaveNet의 causal convolution model

위의 3가지 종류의 모델 존재

ImplicitSurpriseLightFMBuffaloSpotlight
특징가장 유명함.
implicit만 가능.
explicit만 가능LightFM 구현가능빠른 속도Sequantial 모델 구현가능
implicit dataOXOOO
explicit dataXOOOO
Matrix FactorizationALS, BPR, logistic MFSVD, SVD++, NMFLightFMALS, BPRSVD
neighborhood methodsItem-Item Nearest Neighbour modelsKNNBasic, KNNwithMeans, KNNwithZscore, KNNBaselineXXX
Sequaltial modelXXXXO
LightFMXXOXX

참고자료

https://leehyejin91.github.io/post-bpr/
https://leehyejin91.github.io/post-logistic_mf/
https://greeksharifa.github.io/machine_learning/2020/06/01/LightFM/

profile
중요한 것은 속력이 아니라 방향성

0개의 댓글