작성자: 강지우
이번 시간엔 간단하게 추천시스템을 구현할 수 있는 라이브러리들을 비교해보았습니다. 대부분 베이직한 CF의 Neighborhood model, Matrix Factorization model들이 구현되어있습니다.
Koren의 두 논문 Koren:2008, Koren:2009의 알고리즘을 참고한 경우가 많아서 두 논문과 세미나에서 진행한 두 논문의 리뷰를 참고하시면 좋을 듯 합니다.
Koren:2008 리뷰, Koren:2009 리뷰
Implicit
ALS Collaborative filtering
Baysian Personalized Filtering
-
"BPR: Bayesian Personalized Ranking from Implicit Feedback." 논문의 알고리즘.
-
기존의 pointwise 기반의 optimization이 아닌 ranking optimization을 적용함. 논문에서는 MF, neighborhood model 모두 적용한다. 여기선 MF만 구현함. 논문
Logistic Matrix Factorization
Surprise
- explicit 데이터에 사용가능한 라이브러리
Basic algorithms
NormalPredictor
MLE를 통해서 추정한 N(μ^,σ^2)분포를 통해 예측
BaselineOnly
- r^ui=bui=μ+bu+bi
user, item 평균치 고려
k-NN inspired algorithms
KNNBasic
-
r^ui=v∈Nik(u)∑sim(u,v)v∈Nik(u)∑sim(u,v)⋅rvi
-
r^ui=j∈Nuk(i)∑sim(i,j)j∈Nuk(i)∑sim(i,j)⋅ruj
-
basic한 neighborhood model.
-
item based, user based 모두 가능
KNNWithMeans
-
r^ui=μu+v∈Nik(u)∑sim(u,v)v∈Nik(u)∑sim(u,v)⋅(rvi−μv)
-
r^ui=μi+j∈Nuk(i)∑sim(i,j)j∈Nuk(i)∑sim(i,j)⋅(ruj−μj)
-
각 유저나 아이템의 mean 고려
-
basic한 neighborhood model.
-
item based, user based 모두 가능
KNNWithZScore
-
r^ui=μu+σuv∈Nik(u)∑sim(u,v)v∈Nik(u)∑sim(u,v)⋅(rvi−μv)/σv
-
r^ui=μi+σij∈Nuk(i)∑sim(i,j)j∈Nuk(i)∑sim(i,j)⋅(ruj−μj)/σj
-
각 유저나 아이템의 mean, std 고려
-
basic한 neighborhood model.
-
item based, user based 모두 가능
KNNBaseline
-
r^ui=bui+v∈Nik(u)∑sim(u,v)v∈Nik(u)∑sim(u,v)⋅(rvi−bvi)
-
r^ui=bui+j∈Nuk(i)∑sim(i,j)j∈Nuk(i)∑sim(i,j)⋅(ruj−buj)
-
유저와 아이템의 bias 모두 고려
-
basic한 neighborhood model.
-
item based, user based 모두 가능
Matrix Factorization(SVD, SVD++, NMF, PMF)
SVD
r^ui=μ+bu+bi+qiTpu
∑rui∈Rtrain(rui−r^ui)2+λ(bi2+bu2+∣∣qi∣∣2+∣∣pu∣∣2)
biased = False할 시 bias없는 모델 사용가능
SVD++
- r^ui=μ+bu+bi+qiT(pu+∣Iu∣−21∑j∈Iuyj)
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
LightFM
-
implicit, explicit 데이터 모두 사용가능.
-
LightFM 모델 구현가능
-
LightFM은 Collaborative filtering, Content based filtering이 결합된 hybrid model
qu=∑j∈fuejU pi=∑j∈fiejI
bu=∑j∈fubjU bi=∑j∈fibjI
r^ui=sigmoid(qu⊙pi+bu+bi)
ex) 아이템이 데님자켓이라면 '데님'과 '자켓'의 latent vector들의 합이 qu, 유저가 미국에 살고 여성이라면 둘의 latent vector의 합이 pi
유저와 아이템 각각의 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
∑rui∈Rtrain(rui−r^ui)2+λ(bi2+bu2+∣∣qi∣∣2+∣∣pu∣∣2)
Sequaltial model
-
"Deep Neural Networks for YouTube Recommendations"의 pooling model,
-
"SESSION-BASED RECOMMENDATIONS WITH RECURRENT NEURAL NETWORKS"의 LSTM model,
-
WaveNet의 causal convolution model
위의 3가지 종류의 모델 존재
| Implicit | Surprise | LightFM | Buffalo | Spotlight |
---|
특징 | 가장 유명함. implicit만 가능. | explicit만 가능 | LightFM 구현가능 | 빠른 속도 | Sequantial 모델 구현가능 |
implicit data | O | X | O | O | O |
explicit data | X | O | O | O | O |
Matrix Factorization | ALS, BPR, logistic MF | SVD, SVD++, NMF | LightFM | ALS, BPR | SVD |
neighborhood methods | Item-Item Nearest Neighbour models | KNNBasic, KNNwithMeans, KNNwithZscore, KNNBaseline | X | X | X |
Sequaltial model | X | X | X | X | O |
LightFM | X | X | O | X | X |
참고자료
https://leehyejin91.github.io/post-bpr/
https://leehyejin91.github.io/post-logistic_mf/
https://greeksharifa.github.io/machine_learning/2020/06/01/LightFM/
14기 박지은
기본적인 Collaborative Filtering의 Neighborhood model, Matrix Factorization model 등 추천시스템을 구현할 수 있는 라이브러리들을 공부할 수 있었습니다. 라이브러리마다 MF, BPR, LMF을 포함하는 Implicit이나 Suprise 등 implicit 데이터에 사용가능한 라이브러리 등 각각의 데이터 특성과 가능한 기본적인 모델을 한 번에 정리해주셔서 정말 유익했습니다. 좋은 강의 감사드립니다!