본문 바로가기

Machine Learning/추천시스템

Deep Learning Recommendation Model for Personalization and Recommendation Systems 리뷰

https://arxiv.org/pdf/1906.00091.pdf

Abstract

  • 딥러닝은 개인화와 추천에 사용되는 매우 중요한 도구입니다.
  • (개인화와 추천을 다루는) 네트워크는 범주형 데이터를 다루기 때문에 다른 네트워크와 다르며, 많은 연구가이루어지지 않습니다.
  • 이 논문에서는 sota인 딥러닝 추천모델을 소개하며, Pytorch 코드를 제공합니다.

 

Introduction

CTR예측과 랭킹모델을 포함한 개인화와 추천시스템은 많이 사용되고 있습니다.

이를 위한 딥러닝 모델의 설계 디자인에는 두가지로 나눌 수 있습니다.

 

첫번째는 추천시스템 입니다.

  • 사용자의 과거 행동에 근거한 collaborative filtering이 있습니다.
  • 사용자와, 상품을 그룹화 하는 이웃화 방법이 있습니다.
  • matrix factorization 처럼 사용자와 상품을 특징화 하는 latent factor 방법이 있습니다.

두번째는 예측 분석 입니다.

  • 주어진 데이터에서 확률을 예측하거나 분류하는 확률 모델 입니다.
  • 선형회귀와 같은 단순한 모델에서 딥러닝으로 발전하여 사용되고 있습니다.
  • 범주형 데이터를 처리하기 위해 임베딩을 합니다.

이 논문에서는 위의 두 가지 타입을 모두 사용한 개인화 모델을 소개합니다.

이 모델은 범주형 데이터인 sparse 피쳐의 임베딩을 사용하고, dense 피쳐를 다루기 위해 다층 퍼샙트론 (MLP)를 사용합니다.

이 둘을 상호작용 하도록 하는 통계적 기술을 사용합니다.

마지막으로 MLP와 상호작용하는 후처리를 통해 사건의 확률을 찾아냅니다.

 

Deep Learning Recommendation Model (DLRM) 를 그림으로 그리면 다음과 같습니다.

 

Componsnts of DLRM

모델을 구성하는 4개의 요소를 간단하게 정리해 보았습니다.

Embedding

  • 범주형 데이터를 다루기 위해, 범주형 데이터를 밀집되도록 재표현합니다.
  • 원-핫 벡터를 사용해 임베딩 테이블에서 벡터를 가져옵니다.
    e는 i번째 값만 1인 임베딩 벡터, W는 임베딩 테이블 입니다.

  • 임베딩은 여러 아이템의 가중치 된 조합으로 재표현 하는 방법도 있습니다.(weighted combination)
    A는 해당되는 아이템의 인덱스 위치의 1과 나머지 0으로 이루어진 sparse vector 입니다.

 

Matrix Factorization

  • 어떤 제품의 랭킹을 가지고 있는 사용자 집합 S가 있습니다.
  • i번째 아이템을 d차원의 벡터 w_i로 표현하고, j번째 사용자를 d차원의 벡터 v_j로 표현하려고 합니다.
    이때 n은 아이템의 수, m은 사용자의 수를 의미합니다.
    집합S는 i번째 아이템, j번째 사용자의 조합인 (i, j)로 구성되어 있습니다.
  • MF알고리즘은 다음을 최소화 하면서 학습합니다.

  • 모든 사용자와 모든 아이템의 랭킹을 가지고 있는 R을 다음과 같이 근사 할 수 있습니다.

Factorization Machine

  • 다차원 값인x를 라벨y로 매핑하는 분류 모델을 생각 해 봅시다.
  • FM 모델은 다음 수식을 사용해서, 선형 모델에 범주형 데이터를 이차형식(second-order interactions)으로 통합합니다.
    V 는 n*d 차원, w는 n차원, b는 1차원입니다.

 

 

Multilay Perceptrons

  • 엑티베이트 함수와, FC 레이어 의 결합으로 만들어진 예측 함수 입니다.
  • 이는 딥러닝의 가장 근본적인 모델입니다.

 

DLRM Architecture

사용자와 아이템의 데이터는 연속형 데이터와 범주형 데이터로 묘사됩니다.

범주형 데이터는 MatrixFcatroization 행렬의 latent feature와 같은 차원의 벡터로 임베딩 됩니다.

연속형 데이터는 MLP에 의해 임베딩 벡터와 같은 길이를 갖는 벡터로 변환됩니다.

 

FM와 MLP에서 들어오는 데이터를 각각 2차 상호 작용으로 계산합니다.

그 후에 MLP로 후처리 되며 최종적으로 확률을 구하기 위해 시그모이드 함수를 사용합니다.

 

Comparison with Prior Models, Parallelism, Data, Experiments

생략..

 

하지만 실제 서비스 사용을 위해서는 병렬화를 꼭 읽어봐야 할것 같습니다.

 

 

 

 

후기

간단하면서 기존 추천에 사용되는 모델들의 아이디어를 많이 사용한 모델입니다.

개인화를 해 주는 모델이면서, 범주형 데이터 연속형 데이터를 모두 사용할 수 있습니다.

 

캐글에서 텐서플로우를 사용한 구현을 볼 수 있습니다.

코드를 보면 더 쉽게 이해할 수 있습니다 읽어보시는걸 추천드립니다.

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

 

 

서비스 적용시 생각해 볼 만한 점

  • 2차 상호작용 계산을 위해 모든 범주형 데이터가 같은 차원으로 임베딩 됩니다.
    사용자 목록과, 아이템 목록은 분명히 다른 범주를 가질 수 있습니다. (이는 서비스 마다 다름)
    일반적으로 사용자와 아이템의 정보를 표현하기 위해 작은 범주를 갖는 정보를 많이 사용합니다.
    성별, 국가, 아이템의 유형 등
    개인화가 완벽히 위 정보를 반영해 줄것 같으면서도, 히스토리가 적은 사용자는 잘 표현하지 못할 수 있습니다.

    이 경우에는 사용자의 키값을 원핫으로 바로 사용하는것이 아닌, 여러 아이템의 가중치 된 조합으로 재표현 하는 방법을 시도해 볼 수 있습니다.

  • 높은 수준의 개인화 모델을 생성하려면 많은 리소스와 병렬처리가 필요할 것으로 예상됩니다.
    임베딩 모델을 사용하기 떄문에 새로운 아이템, 새로운 사용자를 반영하려면 새로 모델을 만들고, 학습해야 합니다.
    DLRM 모델은 RNN, CNN, GAN 처럼 많은 파라미터를 가질 수 있으며 많은 양의 리소스를 요구합니다

  • (2차)상호작용을 이해하는데는 다음의 글이 도움이 됩니다.

    https://stats.stackexchange.com/questions/408056/how-powerful-are-second-order-interactions

    변수 간 상관관계를 모두 고려하면서 결과값을 찾아줄 수 있습니다.
    상호작용 모델은 모두 선형모델이기 때문에 3차 이상의 상호작용 모델은 2차 상호작용 모델과 큰 차이를 보이지 않습니다. 이는 과적합을 유발할 수 있습니다.
    1차 상호작용의 경우 데이터에서 상관관계를 고려하지 않기 때문에 의미 있는것을 찾지 못할 수 있습니다.