티스토리 뷰

RecSys

[RecSys] Sequential Recommendation

오탱 2023. 9. 24. 21:55

- 기존 추천 시스템 Model

- Sequential Recommendation

- GRU4Rec

- SASRec

- BERT4Rec

 

기존 추천시스템 Model ( Contents- Based, Collaborative Filtering....) 

사용자의 과거 item 선택 정보가 동일하게 중요하다는 기본 가정에서 출발

→ 주로 선택하던 아이템과 다른 아이템이 등장할 경우, 이에 대한 설명이 부족하고, 사용자가 주로 선택하던 item만을 추천한다는 단점이 있음

→ 시간의 정보를 반영해주지 않음, 구매의 순서, 시기를 무시한다는 단점

 

그러나, 일반적으로 상품 구매 패턴에는 구매 순서, 시기가 반영됨!

또한, 유저의 선호도는 끊임없이 변화할 수 있으며, 과거 구매 정보가 '동일하게' 중요하다기 보다는 최근 정보가 더 중요할 수도 있음.

예를 들어, 아이패드를 새로 산 유저는 아이패드를 산 후에, 기존에 많이 구매하던 생활용품들보다는 아이패드 관련 용품을 많이 구입하게 되는 것처럼!

그래서 등장한 것이 Sequential Recommendation 방법이다.

 

Sequential Recommendation 

시간의 흐름에 따라 동적으로 변화하는 User의 Preference를 포착해준다!

- 과거 행동에서 유의한 순차 패턴을 찾고, 시점에 따라 가중치를 다르게 주어 이를 기반으로 가장 선호할 다음 item을 추천하는 방식

 

Sequential Recommendation 모델 흐름

- 기존 NLP 분야에서 사용되던 모델들을 추천시스템에 적용하는 것이 대세

- NLP에서 text data가 sequential 이었던 것처럼, User의 item 선호도를 sequential 데이터로 파악

 

 

-Markov Chains(MCs) → (RNN 기반 모델) GRU4Rec → CASER(CNN) →  SASRec(Self-Attention) → SSE-PT → BERT4Rec(BERT) → Transformer4Rec

 대략 이러한 흐름으로 나타났다고 볼 수 있다.

그 중 GRU4Rec, SASRec, BERT4Rec에 대해서 살펴보도록 하겠다

 

GRU4Rec

- NLP에서 주로 사용되던 RNN 기반 모델을 추천시스템에 활용했다는 점에서 중요한 의의! 

- 일반적인 GRU Architecture를 커스터마이징하여 활용! 다중의 GRU layer를 쌓고 입력값을 중간마다 연결해주는 형태

 

 

- 과거의 Session Sequence 데이터를 GRU 레이어에 입력하여, 바로 다음에 올 확률이 가장 높은 item을 예측하는 추천해주는 task

- 다중의 GRU 레이어를 쌓고 입력값을 중간마다 연결해준다!

 

Point 1. 1 - of - N 인코딩을 사용해 아이템을 input 레이어에 입력

 

 

 

 

 Point 2. 세션 병렬 미니 배치

- 자연어 처리에서 사용한 미니배치 구성 방식을 그대로 적용할 수 없음! 

 

- 이유1 ) session 길이의 분산이 크다 :

NLP의 경우, input으로 들어가는 각 문장의 길이가 비슷비슷했다고 할 수 있음.

But, 구매 내역 데이터의 경우 사람마다 많은 차이가 있을 수 있기에 Session 길이의 분산이 크다고 할 수 있음. 

 

- 이유2 ) 시간의 흐름에 따라 일반적인 세션의 양상을 잡고자 함 :

NLP에서는 한 문장이 완성된 의미 단위를 가지고 이 문장에서 함축된 의미를 파악하는 것이 중요하다고 볼 수 있음.

But, 구매 내역 세션은 하나의 함축된 의미를 갖는다고 보기 어려우며, Sequential Recommendation에서는 이러한 세션의 함축적 의미를 파악하는 것이 주목적이 아님!

이 안에서 다음 토큰이 어떻게 움직이는지 포착하는 것이 주목적이기 때문에 NLP와는 다른 미니 배치 처리를 진행해줌

 

- HOW? 

SASRec

 

BERT4Rec

 

[ 참고 자료 ]