[논문 정리] SDM: Sequential Deep Matching Model for Online Large-scaleRecommender System
-
Concept
대규모 데이터 환경에선, 추천에 앞서 후보군을 결정하는 Matching 과정이 필요하다.
Matching엔 아이템 기반 CF가 많이 활용되지만, 이 경우 동적으로 변하는 유저의 취향을 반영하기가 힘들다. 이러한 Matching에 Sequential 추천을 활용하면 유저의 취향을 더 잘 파악할 수가 있다.
Sequential 추천 시나리오에선, 하나의 세션(short-term)에도 여러 목적이 있을 수 있다는 점과 유저에 따라 긴 시간(long-term) 동안 유지되는 선호도가 있다는 점을 고려하는 것이 중요하다.
SDM은 각 세션 마다 여러 목적이 있을 수 있다는 점을 고려해 Single Head Attention 대신, Multi Head Attention를 도입했다. 또한 긴 시간 동안 유지되는 유저의 선호도 특성을 세션과 잘 조합하기 위해서, element-wise한 벡터 결합 방식 대신 Sigmoid를 활용한 Fusion Gate를 활용했다.
Problem Formulation
세션 데이터를 시간 기준, 오름차순으로 정렬해 활용한다.
세션 데이터 중 최근에 발생한 세션을 모아 $S^u$라고 설정한다. $S^u$의 특징은 다음과 같다.
10분 미만(환경에 따라 다르게 설정 가능)의 시간 차가 있을 경우엔, 동일 세션으로 간주한다.
최대 길이를 50(다르게 설정 가능)으로 설정한다.
따라서 동일한 세션 ID 여도, 50이 넘어가면 새로 세션을 설정해야 한다.
앞서 설정한 $S^u$외에 나머지 세션들의 데이터는 $L^u$로 설정한다.
과거의 모든 데이터를 활용하는 대신 $L^u$은 현재 기준 7일 이전의 데이터까지만 활용한다.
최종적으로 $S^u$와 $L^u$을 통해 유저가 관심있을 아이템을 추천할 수 있다.
$S^u$와 $L^u$은 각각의 레이어를 거쳐 $s_t^u$와 $p^u$를 구성하고, 두 벡터를 활용하여 유저 Embedding $o_t^u$를 얻는다. 최종적으로 유저 Embedding $o_t^u$와 아이템 Embedding $v_i$ 사이 유사도를, dot-product를 통해서 구하고 이를$z = o_t^u \cdot v_i$라고 설정한다.
결국 두 Embedding 사이 유사도 $z$가 크다면 Matching이 될 것이다.
Training and Online Serving
Training
Seqential 추천의 목적은 $t$ 까지의 데이터를 통해 $t+1$ 시점의 아이템을 추천하는 것이다.
따라서 Label(Positive)을 $t + 1$ 번째 선택된 아이템으로 설정한다.
Label을 위와 같이 설정할 경우, Matching은 $K$개의 아이템 클래스 중 상위 N개를 선택하는 분류 문제가 된다.
따라서 Softmax를 활용해 SDM 모델을 학습할 수 있다. 하지만 대규모 데이터 환경에선 $K$(클래스의 개수)가 매우 크고, 이에 따라 Softmax 연산이 굉장히 오래 걸리게 된다.
결국 빠른 학습을 위해 negative sample을 활용한, Sampled-Softmax를 도입한다.
학습을 위해 필요한 negative sample(Label)은 log-uniform 샘플러를 활용한다. 왜 log-uniform 샘플러를 골랐는지 딱히 설명이 없었지만, 아마 데이터의 Long-tail 특성을 고려했기 때문인 거 같다.
최종적으로 Sampled-Softmax를 활용한 Loss 함수를 나타내면 아래 수식과 같다.
유저가 가장 좋아할 만한 N개는 Softmax에 의한 점수 대신, Nearest Neighbor 기법을 통해서 구한다.
따라서 $o_t^u$와 가장 가까운 N개의 $v_i$가 추천된다.
Embedding with Side Information : Item, User
Item
아이템의 종류는 매우 많기 때문에, 아이템 ID 만으론 아이템을 완전히 표현할 수 없다.
그래서 추가로 브랜드, 셀러, 가격 등 다양한 side information을 Embedding 하여 Concat 한다.
그 결과 $t$ 시점에 유저가 소비한 아이템 $i_t^u$의 Embedding $e_{i_t^u}$를 표현하면 아래와 같다.
여기서 $F$는 side information의 집합을 의미하고, $e_i^f$는 각각 Embedidng한 결과이다.
$$e_{i_t^u} = concat({e_i^f|f \in F})$$
User
유저의 나이, 성별, 사는 곳에 따라 선호 상품이 달라질 수 있다.
이를 반영하기 위해서, 아이템에서와 똑같이 다양한 side information을 Embedding 하고 Concat한다.
마찬가지로 $P$는 side information의 집합을 의미하고, $e_u^p$는 각각을 Embedding 한 결과이다.
$$e_u = concat({e_u^p|p \in P})$$
SDM Model
모델의 전체적인 과정을 요약하면 아래 그림과 같다.
설명을 추가하면, 구매 정보를 통해 short-term 정보$S^u$와 long-term 정보 $L^u$를 얻을 수 있고, 이는 $e^u$(Query)와의 Attention으로 $p^u$와 $s_t^u$로 변경된다. 최종적으로 $p^u$와 $s_t^u$의 결합은 Fusion Gate를 사용하고, 결합 가중치는 Sigmoid를 통해 학습된다.
Short-term preference
LSTM
수식은 일반적인 LSTM과 동일하며, short-term에만 활용된다.
$e_{i_t^u}$를 입력 받아 $h_i^u$를 반환하는 역할을 한다.
아이템의 Sequential한 정보를 얻기 위해 $h_t^u$ 까지의 모든 hidden states를 모두 모아서 $X^u$로 반환한다.
$X^u$는 Multi-Head Self Attention에 입력 돼 $head_i^u$를 얻는데 활용된다.
Multi-head Self-Attention
일반적인 Multi-head Self-Attention과 동일하다.
$\hat {X^u}$는 User Attention을 얻기 위해 활용된다.
앞서 Multi Head는 각 $head_i$에 따라 다른 정보를 확인하기 위해서 도입했었다.
이를 확인하기 위해서 $h_t^u$를 Query 삼아 $h_i$ 들과 Attention 했을 때의 가중치는 확인해봤다.
높은 가중치를 가질 때의 시점이, $head_i$ 마다 다른 것을 통해 Multi Head의 효과를 확인할 수 있다.
short-term preference : User Attention
앞서 구한 유저 Embedding $e_u$와 $\hat {X^u} = [\hat{h_1^u}, ..., \hat{h_t^u}]$ 사이 Attention을 통해 유저의 short-term preference 정보인 $s_t^u$를 얻는다.
Long-term preference, Fusion Gate
Short-term preference를 얻을 때와는 다르게 LSTM 활용하지 않는다.
long-term preference
아이템의 side information 마다의 Embedding인 $g_k^u$와 유저 Embedding $e_u$ 사이 Attention을 하여, 각 side information에 대한 유저의 long-term preference를 얻는다.
이후 각 side information에 대해서 구했던 preference를 concat하여 합친 뒤, tanh 함수를 거쳐 유저의 long-term preference인 $p^u$를 얻는다.