본문 바로가기
ML&DL/Recommender System

[Recommender System / Paper review] #35 Text Is All You Need: Learning Language Representations for Sequential Recommendation

by 거북이주인장 2023. 9. 23.

Summary

  • 본 논문에서는 language model을 sequential modeling에 사용함으로써 cold-start 문제를 해결하고 transfer-learning을 추천 시스템 분야에 도입하고자 Recformer을 제안한다.
  • 기존의 sequential model과 달리 item-id을 임베딩 벡터로 만들지 않고 다른 네 종류의 임베딩 벡터를 사용한다: token embedding, token position embedding, token type embedding, item position embedding
  • 이때, token embedding은 아이템에 대한 정보를 key,value로 묶어서 flatten한 vector로 사용하여 한 유저의 item sequence을 sequence of sentence로 인식한다.
  • Recformer는 pre-trained 파라미터를 만들고 이를 새로운 데이터에 fine-tuning함으로써 추천 시스템 분야의 고질적인 문제인 cold start 문제를 해결하고자 한다. 기존에 학습한 아이템 정보를 새로운 데이터를 사용해 추천할 때도 이용하는 것이다.

Motivation

  • 추천 시스템에서 cold start 문제를 해결하기 위해 아이템의 textual 메타 정보를 pre-trained language models을 통해 표현하고 이를 추천 모델에 사용하는 방법이 연구되었다. 하지만 이는 아래의 세가지 단점이 있다.
    • 먼저, pre-trained LM은 보통 위키피디아와 같은 데이터로 학습이 되므로 추천 아이템이 가지는 도메인과 상이한 도메인일 가능성이 크다. 따라서 추천 아이템에 대한 representation이 적절하지 않을 수 있다.
    • 또한 pre-trained LM의 아이템 임베딩은 유저의 선호도가 아니라 보통 문장 내에서의 textual 의미를 담고 있다. 추천에서는 이런 문맥상의 의미보다 사람들의 선호에 대한 의미가 더 중요하다.
    • 마지막으로 LM을 학습하는 것과 추천 시스템 모델을 학습하는 것이 독립적이기 때문에 한계가 있을 수 있다.
  • 위의 motivation을 통해 Recformer는 아래를 달성하고자 한다.
    • pre-trained LM을 사용하는게 아니라 직접 추천 시스템 모델과 jointly 훈련한 pre-trained LM을 학습하는 방법을 제안한다.
    • jointly pre-trained LM은 아이템 ID에 대한 임베딩을 사용하지 않는다. 따라서 cold start 문제를 다른 방법보다 잘 푼다.
    • 새로운 데이터를 사용하여 pre-trained 모델을 fine-tuning하는 모델의 확장성을 확보한다.

Approach

Problem setup and formulation

  • item set: $\mathcal{I}$
  • 유저의 interaction sequence: $s = \{ i_1, i_2, \cdots, i_n \}$
  • Recformer는 item ID에는 관심이 없고 아이템 $i$의 attribute dictionary인 $D_i$을 사용한다.
    • $\{ (k_1, v_1), (k_2, v_2), \cdots, (k_m, v_m) \}$
    • key, value는 예를 들어 (color, black)과 같은 관계이므로 단어로 매칭할 수 있다. $\{ w^k_1, \cdots, w^k_c, w^v_1, \cdots, w^v_c \}$
    • 아이템이 $m$개의 attribute을 가지고 있다면 이를 flatten해서 마치 sentence와 같이 표현한다. $T_i = \{ k_1, v_1, k_2, v_2, \cdots, k_m, v_m \}$
  • 이전의 논문에서는 item id도 함게 고려했으나, Recformer에서는 오직 text만 고려한다.

Recformer: model inputs

Recformer는 기본적으로 srs(sequential recommender system) 문제이지만 item id가 아니라 item description text을 sentence로 flatten해서 사용한다는 특징이 있음을 서두에서 언급한바 있다. 예를 들어, 한 유저가 interaction한 아이템이 $n$개라면 각 아이템에 대해 $T_i = \{ k_1, v_1, k_2, v_2, \cdots, k_m, v_m \}$로 flatten하고 이를 차례대로 나열하는 것이다.

이때, Recformer는 아이템을 역순으로 나열한다. 즉, $T_n, \cdots, T_i$와 같이 순서를 바꾸는데 그 이유는 최근에 소비한 아이템이 더 중요하므로 input data에 넣기 위함이다. 최종적으로 special token인 [CLS] 까지 넣어서 아래와 같이 sequential input을 sentence로 변환하여 모델에 넣는다.

Embedding layer

핵심은 language model의 embedding layer와 self-attentive sequential recommenders을 섞는 것이다.

  • token embedding
    • word embedding matrix: $\mathbf{A} \in \mathbb{R}^{V_w \times d}$
    • Recformer는 item embedding이 따로 존재하지 않으므로 이 token embedding을 통해서 item간의 interaction을 파악한다.
  • token position embedding
    • 하나의 sequence에서 token의 위치를 나타낸다.
    • token embedding 만으로는 순서의 의미를 transformer에 담아낼 수 없으므로 필요한 임베딩 벡터이다.
  • token type embedding
    • 유저가 $i$번째 소비한 아이템이 $T_i$으로 변환됐고 이는 CLS, key, value로 flatten한 것이다. 따라서 이 셋중 어느 것에 속하는지 알려주는 것이 token type embedding이다.
    • $\mathbf{C}_{[CLS]}, \mathbf{C}_{Key}, \mathbf{C}_{Value} \in \mathbb{R}^d$
  • item position embedding
    • 결국 $X$은 item의 sequence이다. 따라서 item의 위치를 나타내는 positional embedding이 필요하다.
    • $k$번째 아이템의 key, value 자리는 모두 $\mathbf{D}_k \in \mathbb{R}^d$로 표현된다.
    • item position embedding도 결국 아이템간의 순서를 모델에 녹여내므로 Recformer에서 중요한 역할을 한다.

따라서 input sequence $X$에서 단어 $w$가 주어졌을 때, 이 단어에 대한 input embedding은 위 네개의 embeddings의 합의 layer normalization이다.

이 부분이 헷갈리니 다시 위의 모델 구조를 살펴보자.

  • token emb ~ item pos emb 모두 $d$차원의 벡터이다.
  • 예를 들어서 n번째 아이템의 Laptop 단어의 임베딩이 어떻게 만들어지는지 살펴보자.
  • 우선 token embedding은 명확하다. Laptop에 대한 임베딩 벡터일 것이다.
  • positional embedding도 $B_4$가 될 것이므로 명백하다.
  • token type embedding은 $d$차원 벡터이다. 여기서 중요한 것은 [MASK], Air, Laptop에 대한 token type embedding은 모두 같을 것이라는 것이다. 이들은 모두 value이기 때문이다.
  • item positional embedding은 Title ~ Gold까지 모두 동일한 d차원 벡터를 가진다.
  • 이 네 벡터를 합하고 layer normalization을 때리면 최종 원하는 $d$차원 임베딩 벡터인 $\mathbf{E}_w$가 나오는 것이다.

이렇게 각 token이 token position 별로, token type 별로, item position 별로 다른 의미를 가지는 것을 임베딩 벡터에 녹여낸 후에 최종 model embedding input을 만든다.

여기서 $l$은 한 유저의 interaction sequence의 maximum token length라고 되어 있는데.. 한 유저의 interaction sequence token length의 합이 아닐까? 그래야 말이 되는 것 같은데.. 우선 넘어가자!

Item or sequence representations

$\mathbf{E}_X$를 인코딩하기 위해서 bidirectional transformer structure인 Longformer을 사용한다. $\mathbf{E}_X$의 길이를 한번 생각해보자. 한 유저의 interaction sequence의 token 수의 합이다. 따라서 상당히 길 가능성이 높은데, 이 벡터들에 대해 dense attention을 사용하면 computationally heavy하기 때문에 local windowed attention을 사용하는 Longformer을 사용한다. Longformer은 special token [CLS]에 대해서는 global attention을, 다른 token에 대해서는 local windowed attention을 사용하는데, Recformer에서도 이를 그대로 사용한다.

잘 보면 $\mathbf{h}_{w_1}$은 아이템에 대한 임베딩이 아니라 하나의 단어에 대한 임베딩임을 주목하자. 어찌됐든 next item prediction을 하기 위해서는 단어에 대한 임베딩 벡터도 필요할텐데.. Recformer에서는 item을 위한 embedding table을 따로 두지 않고 item sentence인 $X = \{ [CLS], T_i \}$을 모델의 인풋으로 넣고 나오는 $\mathbf{h}_{[CLS]}$을 아이템 임베딩 벡터인 $\mathbf{h}_i$로 사용한다.

Prediction

next item을 유저의 interaction sequence인 $s$와 아이템 $i$간의 유사도 측정을 통해 예측한다. 즉, 유저의 sequence인 $s$가 주어졌을 때 다음에 나올 단어 (아이템) 중 가장 가까운 아이템을 찾는 것이다.

이를 모든 아이템 $i$에 대해서 하고, 가장 높은 내적값을 보이는 아이템을 next item으로 예측한다.

Learning framework: Pre-training

Recformer는 srs을 language model로 풀려고 하기 때문에 pre-training과 two-stage fine tuning을 제안한다.

이전의 srs pre-training methods는 추천 문제만 생각을 했는데, Recformer은 language modeling과 추천, 둘 모두를 고려해야한다. 따라서 Recformer pre-train 단계에서는 두가지 task을 도입한다: masked language modeling (mlm)과 item-item contrastive task(iic)이다.

  • MLM은 nlp에서 pre-train method로 많이 사용되는 방법론이다.
  • MLM을 auxiliary task로 학습하는 것은 본래의 task도 잘 학습하면서 단어의 semantic meaning을 잘 보존하는 것으로 알려져 있다.
  • Recformer에서는 MLM을 auxiliary task로 사용함으로써 general language corpus와 item text간의 contextual gap을 줄이고자 한다.
  • BERT에서 한 것처럼, 15%의 token positions을 선택하고 그 중에서 80%는 [MASK]로, 10%은 random token으로, 나머지는 unchaged token으로 둔다. 
  • MLM loss은 아래와 같다.

모든 단어에 대한 확률을 softmax로 구하고 이에 대한 cross entropy을 통해서 loss을 구한다.

다음으로 pre-train 단계에서 next item prediction task에서 많이 쓰이는 item-item constrastive (IIC)을 같이 수행한다.

  • ground-truth next item을 positive instances로 사용한다.
  • negative instances에 대해서는 negative sampling이나 fully softmax 대신, in-batch next item을 적용한다.
  • Recfomer가 item embeddings을 따로 저장하지 않기 때문에 이렇게 하는 것인데, in-batch negative instances는 같은 배치 안의 다른 sequence의 ground truth로 사용한다.
  • 이런 방식은 false negative가 포함될 가능성이 있지만 fine-tuning 단계에서 이를 보정해준다고 한다

IIC loss는 아래와 같이 계산된다.

  • $\mathbf{h}^+_i$: ground truth next item을 의미한다.
  • $\mathcal{B}$: 하나의 배치 안의 ground truth item set

pre-training stage에서는 mlm, iic을 jointly 학습하기 위해 multi-task training 전략을 사용한다.

Two-stage finetuning

finetuning 단계에서는 작은 데이터세트에서 정확한 supervision을 제공하지 못하는 in-batch negatives 때문에 false negatives을 가질 수 있고 추천 성능이 떨어지는 문제점을 해결해야 한다. 이를 위해 Recformer에서는 two-stage finetuning을 제안한다.

  • $\mathbf{I}$: 첫번째 단계에서 업데이트된다. feature matrix인데 learnable하지 않다. Recformer로부터 encoded 되는 item features이다. ($X = \{ [CLS], T_i \}$라고 얘기하는 부분인듯)
  • 미리 인코딩 함으로써 배치마다 re-encode하지는 않는다.
  • $\mathbf{I}$을 IIC의 supervision으로 사용한다.
  • 이렇게 best metric을 얻은 모델로 다시 re-initialize을하고 \mathbf{I}을 고정시킨채로 다시 파라미터를 업데이트한다.
  • pre-train 시에는 in-batch negatives로 IIC를 했다면 fine-tuning 시에는 fully softmax로 학습을 진행한다.

Experiments

Experimental setup

  • for pre-training
    • 아마존 데이터 중에서 automative, cell phones and accessories, clothing shoes and jewelry, electronics, grocery and gourment food, home and kitchen, movies and tv 카테고리 데이터를 training data로 사용했다.
    • cds and vinyl을 validation data로 사용했다.
  • finetuning
    • industrial and scientific, musical instruments, arts crafts and sewing, office products, video games, pet supplies을 target domain datasets으로 선택했다.
  • 아이템의 titles, categories, brand을 key-value pairs로 선택했다.

Baselines

  • ID-Only methods
    • GRU4Rec
    • SASRec
    • BERT4Rec
    • RecGURU
  • ID-Text methods
    • FDSA
    • S3-Rec
  • Text Only methods
    • ZESRec
    • UniSRec

Evaluation Metric

  • NDCG@N
  • Recall@N
  • MRR

Overall performance

  • ID-Text methods가 ID-Only methods, Text-Only methods보다 더 좋은 성능을 보인다. 아무래도 아이템 임베딩 뿐만 아니라 텍스트 임베딩도 사용하기 때문인 것으로 보인다.
  • Recformer는 전반적으로 모든 카테고리의 데이터에 대해서 다른 방법론보다 더 좋은 성능을 보인다.

Low resource performance

  • performance of zero-shot learning
    • 추천분야에서 zero-shot learning은 pre-train 모델을 downstream task에 학습하지 않고 바로 테스트 데이터로 성능을 평가하는 방법이다.
    • Item-Only methods에는 적용될 수 없다. 따라서 꺾은선 그래프로 표시된 supervised-methods는 zero-shot learning의 학습 결과는 아니라 그냥 비교용으로 써둔 것 같다.
    • 그림 4에는 Recformer의 zero-shot 성능이 다른 방법들보다 더 좋음을 보여준다.
    • 이는 곧, downstream task learning 없어도 Recformer의 knowledge transfer 기능이 꽤나 좋음을 의미한다.
  • Low-resource
    • downstream task의 학습 데이터 비율에 따른 성능 결과이다.
    • ID-Only method인 SASRec은 학습 데이터 비율이 적을 때 좋지 못한 성능을 보이고 Recformer와 UniSRec은 이때 압도적인 성능을 보인다.
    • 낮은 비율의 데이터로 실험을 하는 상태는 test 데이터에 포함된 아이템의 대부분이 training 데이터에 포함되지 못하는 상황인데, 이런 세팅에서 Recformer가 좋은 성능을 보이는 것이다.

Additional experiments

  • cold start study
    • training data에 등장하는 test data는 in-set dataset으로, 등장하지 않는 test data는 coldstart dataset으로 분류했다.
    • coldstart dataset의 경우에, id-only methods는 아예 해당 test data의 아이템 임베딩이 존재하지 않는다. 따라서 randomly initialized 임베딩 벡터를 사용할 수밖에 없다.
    • 표3을 보면 전체적으로 in-set dataset의 성능이 coldstart dataset 성능보다 더 높고, text-only methods인 UniSRec, Recformer의 성능이 SASRec보다 더 높다.
    • 따라서 coldstart 문제를 Recformer가 잘 해결함을 보여준다.

Conclusion

  • Recformer는 아이템 ID 임베딩이 아닌, 오직 아이템이 가지는 text 임베딩을 사용해 srs 문제에 접근했다.
  • 인상적인 점은, language model과 srs을 동시에 풀려고 했다는 점이다. 이를 통해 다른 방법론에 비해서 coldstart 문제를 잘 해결하고자 한다.
  • 또한, 추천분야에서 transfer learning이 어떻게 가능한지 잘 보여준 논문이라고 생각한다. coldstart 문제를 해결하는게 중요한 추천분야에서, transfer learning의 발전은, pre-train에서 finetuning으로 이어지는 학습 방법의 발전으로 이어질 것이라 생각된다.
  • 최근에 transformer에 대한 관심이 많아졌는데 추천 시스템 분야에서 transformer 뿐만 아니라 pre-train, finetuning을 적용하는 방법에 대해 알 수 있어서 재미있는 시간이었다.
  • 이를 잘만 활용하면 bert 같이 추천시스템 분야에서도 하나의 거대한 pre-train 모델이 있고, 다른 기업들이 이를 가져다 쓰는 방식이 발전할 수도 있지 않을까.. 이를 통해 coldstart 문제도 해결하고 model hub community도 활성화될 수 있지 않을까.. 라는 상상을 해본다.

Source code

댓글