본문 바로가기
Data Science/Recommendation

Deep Learning Recommendation Model for Personalization and Recommendation Systems 논문정리/코드구현

by yejining99 2021. 9. 13.

Introduction

recommdation system의 변화

step 1 : product을 classification에서 비슷한 user가 들어있는 카테고리의 product을 추천해줌 ex) Neighborbood methods, latent factor methods

step 2 : user가 product에 대해 관심을 가질 probability를 예측해서 추천해줌 ex) linear and logistic regression, deep networks

Deep Learning Recommendation Model (DLRM) : 두 방법을 합친 방법 !

 

 

DLRM에 쓰인 기법들

Embeddings : categorical data를 one-hot vector를 사용해 기계가 이해할 수 있는 숫자 형태로 변환하는 기법.

Matrix Factorization : product i와 user j의 matrix인 R을 latent factor이 담겨있는 WV^t로 나눠서 각각을 예측하는 기법.

Factorization Machine : 변수 간의 interaction을 linear model에 포함시켜 sparse 한 data에도 사용 가능하게 만든 기법.

Multilayer Perceptrons : 여러 개의 layers과 activation function을 통해 값을 예측하는 deep learning 기법.

 

어떻게 쓰이는데?

categorical feature을 embedding vector로 나타내고 Matrix Factorization의 latent factor을 일반화한다.

continuous feature은 multilayer perceptrons 기법으로 변형시켜 embedding vector과 같은 길이를 가지게 한다.

그다음 Factorization Machine에서 쓰이는 second-order interaction을 구하기 위해 embedding vector과 processed dense features의 dot product을 구한다.

이 dot product은 original processed dense feature과 Multilayer perceptrons으로 가공된 다른 post-processed와 결합한다.

이 결합한 것을 sigmoid함수에 넣어 probability를 구한다.

 

다른 모델과 다른 점?

DLRM은 embedded feature vector을 다루는 점이 다른 모델과 다르다.

다른 모델은 embedding이 끝난 feature vector의 element들을 다 새로운 unit으로 본 반면, DLRM은 feature vector속 같은 element들의 dot product은 구하지 않아 dimention을 낮췄다.

 

 

Frame Work

 

코드 구현/데이터 적용

이 논문에서는 DLRM 알고리즘을 Public data에도 적용하였다.

public data는 'The Criteo AI Labs Ad Kaggle'이라는 데이터를 사용하였다.

코드는 다음 notebook에 구현되어 있다.

https://www.kaggle.com/egordm/deep-learning-recommendation-model-dlrm

 

Deep Learning Recommendation Model DLRM

Explore and run machine learning code with Kaggle Notebooks | Using data from Display Advertising Challenge

www.kaggle.com

 

나도 이 데이터를 사용하려고 보니 없어진 데이터였다 😅

그래서 kaggle 데이터 중 recommendation에서 가장 많이 쓰이는 데이터인 'Anime Recommendation Database 2020'이라는 데이터를 사용했다.

https://www.kaggle.com/hernan4444/anime-recommendation-database-2020

 

Anime Recommendation Database 2020

Recommendation data from 320.0000 users and 16.000 animes at myanimelist.net

www.kaggle.com

 

이전 데이터와 다른 점은 원래는 클릭을 했는지 안 했는지 0,1로 예측했다면 이 데이터는 user가 item에 매기는 rating을 예측하면 된다.

그리고 그 rating의 범위는 0부터 10까지이다.

즉 binary regression에서 범위가 더 넓어진 regression으로 output을 바꿔줘야 한다.

 

DLRM 알고리즘은 continuous data와 categorical data를 나누는 점을 중요하게 여긴다.

그래서 con, cat이라는 변수에 각각의 columns명을 넣어주었다.

 

모델은 tensor flow에서 Multilayer perceptron을 구현해서 넣어주었다.

주의해야 할 점은 output변수가 0부터 10까지의 실수이므로 activation을 relu로 변형시켜주었다는 점이다.

overfitting의 문제를 줄이기 위해 epochs를 10으로 주었다.

 

test data를 이용해 accuracy를 측정해보니 0.8413 정도가 나왔다. 

기존의 notebook에서의 accuracy가 0.7743 임을 감안하면 꽤나 좋은 정확도를 얻어냈다.

 

자세한 코드는 링크를 따라가면 볼 수 있다.

https://www.kaggle.com/yejining99/dlrm-model

 

DLRM model

Explore and run machine learning code with Kaggle Notebooks | Using data from Anime Recommendation Database 2020

www.kaggle.com