인공지능 AI/추천시스템

[AI/추천시스템/Recommender System] 순차적 추천(Sequential Recommendation)

일반적 추천과 순차적 추천 비교

일반적 추천(Conventional Recommendation):

- 과거의 사용자-아이템 피드백을 기반으로 새로운 아이템을 추천합니다.

- 피드백이 발생한 시간 혹은 발생 순서를 고려하지 않습니다.

ex) 1년 전 본 영화와 지난주에 본 영화가 같이 고려됩니다. 

시리즈물 1, 2를 연속으로 본 행위가 고려되지 않습니다.

 

순차적 추천(Sequential Recommendation)

- 사용자 행동을 시간 순으로 관리하는 것이 가능해졌습니다. (웹시스템의 발전)

- 사용자의 과거행동에 기반하여 다음 번 아이템을 추천합니다.

 

 

순차 데이터 (Sequence Data) 

시간 혹은 어떤 순서에 따라서 발생하는 데이터

시계열 데이터, 음성, 동영상, 언어 등

 

 

언어 데이터와 추천 데이터는 공통점이 많습니다.

sparse하고 sequential하다는 점, one-hot encoding을 적용한다는 점.

그래서 많은 언어 모델이 추천 모델로 변환되어 적용되기도 합니다.

 

Vanilla RNN 구조 

순환신경망은 입력과 출력 변수를 받습니다. 출력이 다시한번 입력과 결합되는 방식입니다. 

이런 (Vanilla) RNN 구조에는 sequential data가 적합합니다. 

예를 들어 순차적인 아이템 목록과 아이템에 대한 추가정보 같은 데이터 말이죠.

LSTM 구조

RNN의 long-term dependency 문제(sequence가 길어질수록 정보가 전달이 잘 안 이루어짐)를 해결하기 위해 등장했습니다.

기억해야할 정보를 구별하기 위해 cell state와 forget state를 추가했습니다.

RNN과 마찬가지로 input gate와 output gate를 사용하고,

forget state 는 이전 셀 상태를 얼마나 기억할지 결정하고 cell state는 forget gate에 의해 걸러진 이전 셀 상태와 입력 게이트 결과가 합쳐져 계산됩니다.

hidden state는 현재 셀 상태와 출력 게이트의 결과가 합쳐져 계산됩니다. 

 

GRU 구조

RNN의 long-term dependency를 마찬가지로 해결하면서 LSTM의 복잡성도 간소화한 구조입니다.

LSTM과 성능은 비슷하지만 구조가 더 단순하다는 장점이 있습니다.

 

cell state과 hidden state를 하나로 합쳤고,

forget state와 input gate를 하나로 합쳤습니다. 

 

순차적 구조를 가지는 추천시스템 모델들

 

GRU4Rec

GRU4Rec

user의 장기적 행동이 아닌 단기적 기간의 행동을 기반으로 추천합니다.

GRU 구조를 이용하여 과거 행동을 기억하고 다음 행동을 예측합니다.

 

Caser

sequential한 user의 행동에서 과거의 행동은 유의미하며 다음 행동에 영향을 줍니다.

이를 다양한 패턴과 방식으로 파악하는 다양한 필터를 활용하였습니다.

CNN 구조는 local pattern을 찾는데 유용하기 떄문에, 순열 데이터의 분석에도 사용되어왔습니다. 

과거 구매 아이템을 임베딩을 통해 2D 이미지로 변환합니다.

그리고 convolutional layer를 통해 horizontal 패턴과 vertical 패턴을 학습합니다.

그리고 user의 특성과 결합하여 fully-connected layer를 통해 다음의 2개 아이템을 학습합니다. 

 

위의 figure를 설명하면,

숙소와 항공편, 햄버거와 음식점을 임베딩합니다.

항공편과 숙소를 통해 만리장성을 추천하고,

햄버거와 식당을 통해 맥주바를 추천합니다.

 

horizontal filter는 연속된 item들의 동시적 union-level를 표현하고

vertical filter는 연속된 item들 각각 point level를 표현합니다.

 

Sli-Rec

user의 장기적 행동, 단기적 기간의 행동, 장기적+단기적 행동 모두 고려합니다.

1. 장기적 행동(선호도)는 잘 변하지 않으며, 보통 성별/나이의 영향을 받습니다.

2. 단기적 행동(선호도)는 직전 행동의 영향을 많이 받고, 시간에 따라 많이 변합니다.

3. 장기적+단기적 행동(선호도)를 예측하기 위해서는 각각 서로 다른 모델을 만들고 이를 합쳐서 하나의 모델을 구성하는 작업을 진행합니다.

 

1. 장기적 행동(선호도) - Long-term Model

Matrix Factorization 계열의 모델을 활용했습니다.

Asymmetrix-SVD(Koren, 2008)을 활용해 MF모델과 Neighbouring 모델을 섞었습니다.

 

2. 단기적 행동(선호도) - Short-term Model

GRU4Rec과 유사하지만 LSTM을 사용했습니다.

행동 발생한 시간을 고려하여 LSTM의 계산을 수정합니다.

(일반적인 RNN은 순서만 고려하고 시간을 고려하지는 않습니다.)

 

3. 단기적+장기적 행동(선호도) - Model-fusion

둘의 적절한 비율은 모델이 결정합니다.

FDSA

Feature-level Deeper Self-Attention Network for Sequential Recommendation, IJCAI, 2019

 

기존 방법은 일반적으로 순차적인 아이템 목록만을 고려합니다.

하지만 FDSA는 추가적인 정보를 활용하여 추천 성능을 높이는 구조를 제안하였습니다.

 

즉, 사용자가 선정한 아이템의 순차적 정보와 그 아이템에 대한 세부적인 정보까지 반영한 방법론을 제안하였습니다.

multi-head attention 등의 기법을 활용하여 각 정보들을 요약하고, 이를 활용하였습니다.

input: 순차적인 아이템 목록을 각각 위치정보를 반영한 벡터로 변환합니다.

그리고 더 복잡한 특성들을 반영하기 위해 여러 self-attention block을 결합하여 사용합니다.

 

추가 input: 추가적인 정보(ex.브랜드 정보, 아이템 설명 텍스트 정보)를 vanilla attention layer에 활용합니다.

메타 정보들을 dense vector representation의 형태로 변환합니다.

 

어느 정보가 사용자의 선택에 영향을 미쳤는지 보기 위하여 vanilla attention layer를 사용합니다.

그리고 순차적인 아이템 목록을 보존한 상태로 각 아이템 정보 간 관계를 파악하는 self-attention block을 사용합니다.

 

최종 결과값으로 input으로 들어오고 다음 item을 예측합니다. 

 

 

 

다음에는 RecBole을 활용한 FDSA, GRU4Rec, Caser, BERT4Rec등의 sequential 모델들을 구현하는 포스트를 보도록 하겠습니다.

 

 

reference:

https://calvinfeng.gitbook.io/machine-learning-notebook/supervised-learning/recurrent-neural-network/recurrent_neural_networks

http://dmqm.korea.ac.kr/uploads/seminar/Introduction%20to%20Sequential%20Recommender%20Systems_%EA%B9%80%EC%84%9C%EC%97%B0.pdf