사용자의 문맥을 활용한 추천 모델 중 하나인 SASRec: Self-Attentive Sequential Recommendation
을 정리해 보았습니다.
사용자의 문맥을 활용한, Sequential Recommendation 추천 리서치를 진행했으며, 아래 3개의 주요한
시퀀셜 추천 논문을 3가지를 비교해 보았습니다 (with LLM).
SASRec: Self-Attentive Sequential Recommendation
BERT4Rec: Sequential Recommendation with Bidirectional Encoder Representations from Transformer
GRU4Rec: Session-based Recommendations with Recurrent Neural Networks
이 중 실시간 추론에 사용할 수 있으며, 다양한 데이터에서 골고루 좋은 성능을 보여줄 것으로 기대가 되는 SASRec 논문을 읽어보기로 하였습니다.
Abstract
순차적 동적 특성은 현대 추천 시스템에서 중요한 요소이며, 마르코프 체인(NC)과, 순환 신경망(RNN)의 접근 방식이 사용되고 있습니다. NC 기반 방법은 희소한 데이터에서 잘 동작하고, RNN 기반 방법은 조밀한 데이터셋에서 잘 동작합니다.
이 논문의 목표는 희소한 데이터셋과, 조밀한 데이터셋 모두에서 잘 동작하는 Self-Attention 기반 순차 모델인 (SASRec) 모델을 제안하며, 실험적 연구를 통해서, SASRec 모델이 희소한 데이터셋과, 조밀한 데이터셋 모두에서 논문 출판 시점의 SOTA 모델보다 좋은 성능임을 보여줍니다. 또 이 모델은 유사한 CNN/RNN 기반 모델보다 효율성이 더 높습니다.
1. Introduction
Sequential Recommendtaion의 목표는 사용자의 과거 활동을 기반으로 한 모델에, 최근 활동 정보(컨택스트)를 사용하는 것입니다. 이는 과거 행동 수에 따라 입력차원이 기하급수적으로 증가하기 때문에, 많은 어려움이 있습니다.
마르코프 체인(MC)은 다음 행동이 이전 행동(또는 몇 가지 최근 행동)에만 의존한다고 가정하며, 추천 시스템에서 단기적인 아이템 전환을 설명하는 데 성공적으로 사용되었습니다.
순환 신경망(RNNs)은 사용자의 모든 이전 행동을 은닉 상태(hidden state)로 요약하고 이를 사용해 다음 행동을 예측하는 방식이며, 대량의 조밀한 데이터를 요구합니다.
새로운 시퀀셜 모델인 Transfomer는 최근 기계 번역 작업에서 Convolution과 recurrent를 능가하는 성능과 효율성을 보여주었습니다. Transfomer는 self-attention 메커니즘을 사용하여 단어들 간의 syntactic, semantic 인 패턴을 발견할 수 있습니다. 이 방법에서 영감을 받아, 우리는 self-attention 메커니즘을 순차 추천 문제에 적용하고자 합니다.
이 아이디어가 두 가지 문제를 해결할 수 있을 것으로 기대합니다.
- RNN처럼 과거의 모든 행동에서 컨텍스트를 추출할 수 있는 능력
- MC처럼 소수의 행동만으로도 예측을 구성할 수 있는 능력
2. Related Work
A. General Recommendation
추천시스템은 사용자의 과거 피드백을 기반으로 사용자와 아이템의 호환성을 모델링하는 것에 집중합니다.
피드백은 묵시적 피드백(클릭, 댓글, 구매)과 명시적 피드백(평점, 좋아요, 싫어요)으로 나뉘며, 이를 모델링하기 위해 point-wise, pair-wise 등의 방법이 제안되었습니다.
행렬 분해(Matrix Factorization, MF) 방법은 사용자의 선호도와 아이템의 특성을 나타내는 잠배 벡터를 찾아, 이들의 내적을 통해 상호작용을 추정하는 모델입니다. 아이템 유사도 모델(Item Similarity Models, ISM)은 사용자에 대한 모델링 없이 사용자가 이전에 상호작용한 아이템들과의 유사도를 측정해 사용자의 특정 아이템에 대한 선호도를 추정합니다.
다양한 딥러닝 모델이 추천에 활용되었습니다. 이미지, 텍스트 등의 아이템 특징을 추출하기 위해 신경망을 사용할 수 있습니다. NeuMF는 다층 퍼셉트론(Multi-Layer Perceptrons, MLP)을 통해 사용자의 선호도를 추정하고, AutoRec은 오토인코더(autoencoders)를 사용해 평점을 예측합니다.
B. Temporal Recommendation
사용자의 활동에 대한 시간을 명시적으로 모델링한 temporal recommendation은 Netflix Prize에서 강력한 성능을 보여주었습니다. TimeSVD++은 시간을 세그먼트로 분리하고, 각 시간 세그먼트에서 사용자와 아이템을 개별적으로 모델링하여 좋은 성능을 보여주었습니다. 이러한 모델은 단기 또는 장기적인 시간 변화를 나타내는 데이터셋을 이해하는데 필수적입니다.
Sequential recommendation 은 행동의 순서를 고려하고, 시간과 관계없는 순차적 패턴을 모델링합니다. 시퀀스 모델은 시간의 패턴보다는 사용자의 최근 행동에서 사용자의 컨택스트를 모델링하는 것입니다.
C. Sequential Recommendation
많은 순차 추천 시스템은 연속된 아이템 간의 순차적 패턴을 포착하기 위해 아이템-아이템 전이 행렬(item-item transition matrices)을 모델링하려고 합니다.
FPMC는 MF(Matrix Factorization) 항과 아이템-아이템 전이 항을 결합하여 각각 장기 선호도와 단기 전이를 포착합니다. Caser라는 CNN 기반 방법은 L개의 이전 아이템의 임베딩 행렬을 '이미지'로 간주하고, 컨볼루션 연산을 적용합니다
GRU4Rec는 Gated Recurrent Unit을 사용하여 클릭 시퀀스를 모델링하였습니다. RNN 기반 모델은 이전 단계의 상태와, 현재 행동을 입력으로 받기 때문에, 학습 효율성이 떨어질 수 있으며 이를 위해 session-parallelism 같은 기술이 제안되었습니다.
D. Attention Mechanisms
어탠션 메커니즘의 아이디어는 시퀀셜 한 출력마다, 입력의 관련된 부분에 집중하는 것입니다. 추가로, 어탠션 메커니즘 해석이 가능합니다.
최근에 어탠션 메커니즘은 추천 시스템에 조합되었습니다. 어텐션 펙토라이제이션 머신 (Attentional Factorization Machines, AFM)은 컨텐츠 추천을 위해 피쳐의 상호작용에 대한 중요도를 학습합니다. 그러나 조합된 모델들은 기존의 추천모델에 추가적인 구성 요소로 어탠션을 사용한 것입니다. (attention+RNNs, attention+FMs, etc.).
순수한 어탠션 기반 시퀀스-시퀀스 모델인 Transformer는 기계 번역에서 RNN/CNN 계열의 모델을 능가하는 SOTA급의 성능과 효율성을 보여주었습니다. Transformer는 문장의 복잡한 구조를 포착하고, 관련된 단어를 검색하여 다음 단어를 생성하기 위해 제안된 셀프-어탠션 모듈에 의존합니다. Transformer에서 영감을 받아, 우리는 self-attention 접근 방식을 기반으로 한 새로운 순차 추천 모델을 구축하려고 합니다. 하지만 순차 추천 문제는 기계 번역과는 상당히 다르며, 특수하게 설계된 모델이 필요합니다.
III. METHODOLOGY
sequential recommendation은 사용자의 행동 시퀀스(s1, s2, s3, sn)를 받아 다음 행동을 예측하는 것입니다. Figure 1에서 보여주듯, 모델의 입력을 (S1, S2, .. , Sn-1) 으로, 출력을 같은 시퀀스의 시프트 된 버전인 (S2, S3, …, Sn+1) 으로 생각하는 것이 편리합니다.
우리는 어떻게 임베딩 레이어, 셀프 어탠션 블록, 예측 레이어를 사용하여 sequential recommendation model을 만들었는지 보여 줄 것입니다. 이어서 우리는 SASRec 모델의 복잡도를 분석하고, 다른 모델과 어떻게 다른지 분석할 예정입니다.
노테이션은 테이블 1에 요약되어 있습니다.
A. Embedding Layer
우리는 학습 시퀀스를 고정된 길이의 시퀀스로 변환합니다.
n은 모델이 다룰 수 있는 최대 길이입니다. 만약 시퀀스가 n보다 크다면, 우리는 가장 최근의 n개의 액션만 다룹니다. 만약 시퀀스 길이가 n보다 작다면 우리는 길이가 n이 될 때까지 왼쪽에 패딩 아이템을 더해줍니다. 패딩으로는 상수 영백터 0을 사용합니다.
M ∈ R^( |I|×d ) 은 아이템 임베딩 행렬이며, d는 차원입니다. 행렬 M에서 입력 임베딩 E ∈ R ^( n×d )을 생성합니다.
Positional Embedding:
셀프-어탠션 모델은 어떤 재귀적인, 컨볼루션 한 모듈을 포함하지 않기 때문에, 이전 아이템의 위치 정보를 알지 못합니다. 그래서 우리는 학습할 수 있는 position embedding P를 입력 임베딩으로 사용하여 입력 임베딩에 주입합니다. 고정 위치 임베딩을 사용해 보았지만, 이는 더 낮은 성능을 가져오는 것을 확인했습니다.
B. Self-Attention Block
The scaled dot-product attention 은 다음과 같이 정의됩니다.
Q 는 쿼리를 나타내고, K와 V 는 item의 key 와 value 입니다.
어텐션레이어는 다음과 같이 계산됩니다.
QK^T : 쿼리 Q와 키 K 상호작용 정보
QK^T / sqrt(d) : 스케일 벡터 srqt(d)를 적용하여 내적의 합이 매우 커지지 않도록 함
softmax( QK^T / sqrt(d) ) : V에 있는 각 v_i를 얼마나 사용할 것인지에 대한 가중치 벡터
Attention(Q, K, V) : Q, K 의 상호작용 정보를 가중치로 사용한, V의 wighted sum
Self-Attention layer:
기계 번역과 같은 NLP 작업에서 어텐션 메커니즘은 K행렬과 V행렬을 같은 행렬 (K=V) 로 사용됩니다. 최근에 제안된 self-attnetion 방법은 K=V=Q로 사용되도록 제안되었습니다. 우리의 경우 셀프 어텐션 연산은 임베딩 E를 입력으로 받아, E 행렬을 선형 변환을 통해서 3개의 행렬로 바꾼 후에, 어텐션 레이어로 전달하도록 하였습니다.
여기서의 W 들은 선형 변환에 사용되는 행렬입니다. 이는 모델이 비대칭 상호작용을 학습할 수 있도록 합니다.
예를 들어 < query i, key j > 와 <query j, key i > 의 상호작용이 다른 경우를 학습할 수 있습니다.
Causality:
시퀀스의 특징으로 인해, 모델은 t+1개의 아이템을 예측하기 위해 처음 t 개의 아이템을 고려해야 합니다. 그러나, 셀프 어텐션 레이어의 t번째 출력은 하는 그다음의 아이템의 임베딩을 포함할 수 있어 모델에 문제가 발생할 수 있습니다. 그래서 Q_i와 K_j (j>i) 의 모든 링크를 금지하도록 어텐션을 수정하였습니다.
Point-Wise Feed-Forward Network:
셀프 어텐션은 모든 과거의 아이템의 임베딩을 적절한 가중치로 취합할 수 있음에도 불구하고, 이는 여전히 선형 모델입니다. 모델에 비선형성을 부여하고, 잠재적인 차원의 상호작용을 고려하기 위해서 우리는 point-wise two-layer feed-forard 네트워크를 모든 S_i에 적용하였습니다.
W_1, W_2는 d*d 차원 행렬이고, b_1, b_2 는 d차원 벡터입니다. S_i와 S_j는 어떤 상호작요도 없는 것이 중요하며, 이는 데이터 누출 방지를 의미합니다.
C. Stacking Self-Attention Blocks
복잡한 아이템의 전이를 학습하기 위해서 셀프 어텐션 레이어와 피드포워드 네트워크로 이루어진 셀프 어텐션 블록을 쌓아 학습을 진행합니다.
b(b > 1)번째 블록은 다음과 같이 정의됩니다.
첫 번째 블록은 다음과 같이 정의됩니다.
그러나 모델의 크기 증가는 과적합을 야기하고, vanishing gradients으로 인해 학습 과정이 불안정해지고, 더 많은 학습시간을 요구합니다.
이러한 문제를 완화하기 위해 다음의 연산을 적용하였습니다.
g는 셀프 어텐션 레이어 또는 피드 포워드 네트워크입니다.
Residual Connections:
sequential recommendation은 가장 마지막에 본 아이템이, 다음 아이템의 핵심 역할을 하는 경우가 많습니다. 마지막에 본 아이템의 임베딩을 마지막 레이어에 Residual Connections을 적용하여 모델이 저 차원의 정보를 쉽게 활용하도록 해 주었습니다.
Layer Normalization:
레이어 정규화는 입력 피쳐들을 정규화 해 주어 모델 학습을 안정적이고 더 빠르게 해 줍니다. 배치 정규화와 다르게, 레이어 정규화에 사용되는 통계 정보는 같은 배치의 다른 샘플 데이터와 무관합니다.
O는 원소 단위의 곱셈 (Hadamard proeuct)이며 뮤(와 시그마(σ)는 x의 평균과 분산을 의미합니다. 알파와 베타는 학습된 스케일 요소와 바이어스 요소입니다.
Dropout:
드랍아웃 레이어를 임베딩 E에 사용하여 오버비팅 문제를 완화하였습니다.
D. Prediction Layer
b개의 셀프 어탠션 블록을 통해 수비된 아이템들의 정보를 추출한 후, F^(b)_t 를 기반으로 첫 t개의 아이템이 주어졌을 때 MF(Matrix Factorizaion) 레이어를 사용하여 아이템 i와의 관련성을 예측합니다.
r_i,t는 아이템 t개 이후에 올 아이템 i, N 은 아이템 임베딩 행렬입니다. 그래서 상호작용 스코어 r_i,t 를 사용하여 아이템을 정렬할 수 있습니다.
Shared Item Embedding:
모델 사이즈를 줄이고 오버피팅을 완화하기 위해서, 우리는 단일 아이템 임베딩 M 을 사용하는 방법을 고려하였습니다.
F는 아이템 임베딩 M에 의존하는 함수로 표현되는 것이 중요합니다.
M: F^(b)_t = f(Ms1 ,Ms2, . . . ,Mst).
같은 아이템 임베딩을 사용하는 것의 잠재적인 문제는, 내적이 비대칭 아이템 변환을 나타내지 못하는 것입니다. (ex. 아이템 i는 j뒤에 자주 오지만, 그 반대는 그렇지 않은 경우) 그러나 우리의 모델은 비선형 변환을 학습하기 때문에 이런 문제가 없습니다.
FFN(M_i)M_j^T ≠ FFN(M_j)M_i^T
Explicit User Modeling:
개인화된 추천 모델을 제공하는 방법은 두 가지가 있습니다.
1) 사용자의 선호도를 나타내는 사용자 임베딩을 학습하는 경우 (MF, FPMC, Caser)
2) 사용자의 이전 액션을 고려하고, 방문한 아이템의 임베딩에서 묵시적 사용자 임베딩을 만들게 하는 경우 (FISM, Fossil, GRU4Rec).
우리는 사용자의 액션에서 기반한 임베딩 F를 사용하기 때문에 후자에 속합니다. 그러나 명시적인 사용자 임베딩을 추가할 수 있지만, 큰 성능 향상을 가져오지는 못하였습니다. 이는 모델이 사용자의 모든 활동을 고려하고 있기 때문입니다.
E. Network Training
패딩과 절단을 통해서 사용자의 시퀀스를 같은 길이의 시퀀스 s로 변환하는 것을 다시 봅시다. 우리는 o_t를 각 time step t의 출력으로 정의했습니다.
<PAD>는 패딩 된 아이템을 나타냅니다.
모델은 시퀀스 s를 입력으로 사용하고, 상응하는 시퀀스 o는 출력으로 기대됩니다. 여기에 binary cross entroy loss를 최적화 함수로 사용합니다.
이 수식에서, o_t 가 <PAD>인 항목은 무시됩니다.
네트워크는 Stochastic Gradient Descent (SGD)의 변형인 적응형 계산이 있는 Adam 최적화를 통해서 네트워크가 최적화됩니다. 각 에폭에서, 우리는 각 시퀀스에 각 타임 스탭 별 무작위로 하나의 negative 아이템 j를 생성합니다.
F. Complexity Analysis
Space Complexity:
우리 모델의 학습된 파라미터는 임베딩, 셀프 어텐션 레이어, 피드 포워드 네트워크, 레이어 정규화 파라미터이며 종 파라미터의 수는 O(|I|d + nd + d^2)입니다. 이는 다른 모델(FPMC)의 중간 정도입니다. 사용자 정보를 필요로 하지 않으며 추천에서 d는 일반적으로 매우 작습니다.
Time Complexity:
우리 모델의 계산 복잡도는 셀프 어텐션 레이어( O(n^2 * d ) )와 피드 포워드 레이어 ( O(nd^2) )에 의존적이므로 총 계산 복잡도는 O( n^2 * d )입니다.
그러나 우리 모델의 편리한 특징은 각 셀프 어텐션 레이어는 여러 GPU 가속화를 사용하여 병렬화 될 수 있는 것입니다.
G. Discussion
이 부분은 기존의 모델과, SASRec 모델의 Sequence Recommendation 방법에 대해 논의합니다.
IV. EXPERIMENTS
이 섹션에서는 우리의 실험과 경험적 결과를 정리합니다. 우리의 실험은 다음 연구 질문에 대답하기 위해 디자인되었습니다.
RQ1: SASRec 모델은 CNN, RNN 기반 방법을 포함한 SOTA 모델보다 더 좋은 성능을 내는가?
RQ2: SASRec 구조의 다양한 구성 요소의 영향은 무엇인가?
RQ3: 학습 효율성과, 확정성은 어떤가?
RQ4: 어탠션 가중치는 위치나 아이템의 속성과 관련된 유의미한 패턴을 학습할 수 있는가?
A. Datasets
다음의 데이터셋을 사용하여 실험을 진행했습니다. 각 데이터셋은 도메인, 플랫폼, 희소성 측면에서 크게 다릅니다.
- Amazon (Beauty, Games)
- Steam
- MovieLens-1M
여기에 모두 같은 전처리를 했습니다.
- 모든 데이터셋의 리뷰, 평가를 암묵적 피드백으로 간주
- 타임스탬프를 사용한 행동의 순서
- 5개 미만의 데이터가 가진 사용자 제외
시퀀스를 세 부분으로 나눔
- 가장 최근 행동 -> 테스트 용도
- 두 번째 행동 -> 검증 용도
- 나머지 모든 행동 -> 훈련 용도
B. Comparison Methods
평가에는 다음과 같은 방법을 사용했습니다.
- PopRec : 인기도 기반 추천
- Bayesian Personalized Ranking
- Factorized Markov Chains
- Factorized Personalized Markov Chains
- Translation-based Recommendation (TransRec)
- GRU4Rec
- GRU4Rec+
- Convolutional Sequence Embeddings (Caser)
C. implementation Details
SASRec의 아키텍처는 다음과 같습니다.
- 셀프 어탠션 블록의 수는 2 (b=2)
- 학습된 위치 임베딩을 사용
- learning rate 가 0.001인 Adam optimizer 사용
- 배치 사이즈는 128
- 드랍아웃은 0.2 ~ 0.5 사용 (데이터셋마다 다름, sparse 한 경우 0.5)
- 최대 시퀀스 길이인 n은 200 (movielens), 50(나머지)
D. Evaluation Metrics
평가 지표로는 두 개의 Top-N 지표를 사용합니다.
- Hit Rate@10 (Hit@10, REcall@10)
- NDGC@10
E. Recommendation Performance
- non-neural 방법은 spaese 한 데이터셋에서 좋은 성능을 보여주었습니다.
- neural 방법은 dense 한 데이터셋에서 좋은 성능을 보여주었습니다.
( 이는 spaese 한 데이터셋에서 오버피팅이 되기 쉽기 때문입니다.)
- SASRec의 성능은 모든 데이터셋에서 좋은 성능을 보여주었습니다.
추가적으로 어탠션 블록의 수를 10~50까지 변화하면서 NDCG@10을 분석해 보았습니다.
d>=40인 경우 모든 데이터셋에서 만족스러운 성능을 보여주었습니다.
F. Ablation Study
SASRec에 많은 구성요소가 있기 때문에, 각 컴포넌트의 영향을 절제 연구를 통해서 분석해 보았습니다.
1) 위치 임베딩 P를 제거하는 경우, 사용자 액션의 순서를 고려하지 못하게 되어, sparse 한 데이터셋에서는 가장 좋은 성능을, dense 한 데이터셋에서 낮은 성능을 보여주었습니다.
2) 아이템 임베딩을 공유하지 않은 경우 : 일관되게 성능이 저하되었으며, 오버피팅의 영향으로 보입니다.
3) Residual Connections 제거 : 성능이 크게 감소되었으며, 특히 sparse 한 데이터에서 많은 영향을 받았습니다.
4) DropOut 제거 : sparse 한 데이터셋에서 성능이 크게 감소되었습니다.
5 ~ 7) 블록의 수를 조절
8) 멀티헤드 어텐션 : Transformer에서는 멀티헤드 어텐션이 유효하다고 했습니다. 그러나 SASRec의 경우 멀티헤드 어텐션은 기존보다 더 낮은 성능을 보여주었는데, 이는 d가 작기 때문인 것으로 보입니다. (Transformer : 512)
G. Training Efficiency & Scalability
학습 속도와, 수렴 시간을 평가해 보았습니다.
H. Visualizing Attention Weights
타임스테프 t에서, self-attention 메커니즘은 위치 임베딩과 아이템 임베딩에 따라 첫 t개의 항목에 가중치를 할당합니다.
학습 시퀀스를 분석하여 위치 및 아이템에 대한 평균 어텐션 가중치를 시각화했습니다.
V. CONCLUSION
sequential recommendation을 위한 셀프 어텐션 기반 SASRec 모델을 제안하였습니다.
희소한 데이터셋과, 밀집된 데이터셋 모두에서 기존 SOTA 모델의 성능을 능가한 것을 보여주었으며, RNN, CNN 기반 모델보다 더 효율적인 것을 보여주었습니다.
'Machine Learning > 추천시스템' 카테고리의 다른 글
tensorflow recommenders는 어떻게 listwise ranking을 구현했을까? (5) | 2024.09.22 |
---|---|
Tensorflow recommenders 튜토리얼 후기 (2) | 2024.09.10 |
추천 시스템 캐글 대회 후기 (OTTO – Multi-Objective Recommender System) (0) | 2023.02.06 |
Deep Learning Recommendation Model for Personalization and Recommendation Systems 리뷰 (0) | 2022.08.22 |