새소식

ML | AI/논문 리뷰 - 2022.08.18

[논문 정리] 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 연산이 굉장히 오래 걸리게 된다.

log-uniform 분포의 데이터 양상

결국 빠른 학습을 위해 negative sample을 활용한, Sampled-Softmax를 도입한다.

학습을 위해 필요한 negative sample(Label)은 log-uniform 샘플러를 활용한다. 왜 log-uniform 샘플러를 골랐는지 딱히 설명이 없었지만, 아마 데이터의 Long-tail 특성을 고려했기 때문인 거 같다.

 

최종적으로 Sampled-Softmax를 활용한 Loss 함수를 나타내면 아래 수식과 같다.

 

$$\hat y = softmax(z)$$

$$L(\hat y) = -\sum_{i \Subset K} y_{i} \log{\hat{y_i}}$$

더보기

Sampled Softmax에 대한 자세한 내용은 pdf를 통해 확인할 수 있다. 

candidate_sampling.pdf (tensorflow.org)

Online Serving

Serving을 통해 최종적으로 유저에게 Top-N개의 아이템을 추천해야 한다.

Top-N개의 아이템을 고를 땐 유튜브 추천 시스템과 동일한 방법을 활용했다.

유저가 가장 좋아할 만한 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 + Long term

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


Long term 영역

  • 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$를 얻는다.

Attention 시 softmax 가중치를 활용

Fusion Gate : Long term + Short term

최종적으로 $e_u$, $s_t$, $p^u$를 얻었다.

각각은 유저 Embedding, 유저의 short-term preference, 유저의 long-term preference이다.

 

유저의 선호도를 잘 표현해줄 수 있는 $o_t^u$를 얻기 위해선, long-term과 short-term의 가중치($G_t^u$)를 잘 찾는 것이 중요하다.

가중치 $G_t^u$를 구하기 위해서 Sigmoid 함수를 활용한다.

실험 결과 확인


Short-Long을 어떤 방식으로 결합할 것인지 

Sigmoid로 정한 가중치를 사용해 결합한 경우, 다른 방법에 비해 우수한 성능을 기록했다.

  • Sigmoid 항에 $e_u$ 항이 있어, 결국 $e_u$와 관련 있는 정보만 필터링 되는 느낌? 

 

Side information의 효과가 있는지

Side information을 넣었을 때(SDMMA), 아닌 경우(PSDMMAL-NoS) 보다 모든 부분에서 우수 했다.

 

Fusion 효과

Short-term에서 잔 정보만 계속 확인하여 결국 샴페인 잔이 추천됐다. 요건 사실 Short-term preference만 있어도 할 수 있는 것이다.

 

하지만 decanter 추천은 '와인 잔을 확인한 Short-term'과 '와인을 확인한 Long-term'이 Fusion 돼 나온 결과라고 생각할 수 있을 거 같다.

실제로 배포했을 때(Online)의 성능도 Fusion 했을 때 가장 좋은 성능을 기록했다고 하니, 효과가 정말 있는 거 같다. 

더보기
  • Novelty를 위한 측정 지표
    • 분모 : 유저가 오늘 클릭한 모든 카테고리의 수
    • 분자 : 15일 간 클릭하지 않았지만, 이번에 새로 클릭된 카테고리의 수 
Contents

포스팅 주소를 복사했습니다

이 글이 도움이 되었다면 공감 부탁드립니다.