- 논문 링크(0회 인용, 2023 RecSys)
Summary
- reciprocal recommender system (RRS)은 양방향의 선호를 고려하는 매칭 기법으로, 데이팅 앱이나 구인구직 사이트에서 쓰이는 알고리즘이다.
- 본 논문에서는 distinctive sequence matching task을 해결하기 위해 Reciprocal Sequential recommendation을 제안한다.
- 먼저 유저의 dual-perspective embeddings에 기반하여 bilateral behavior sequence을 transformer network을 통해 모델링한다.
- 다음으로 macro, micro 레벨에서 sequential interactions을 포착하기 위해 multi-scale matching prediction을 제안한다.
- 또한, 정확도와 계산 효율성을 보장하는 micro to macro self-distillation을 제안하여 모델 효율성을 개선한다.
Motivation
- 기존의 reciprocal recommender system은 content-based 방법과 collaborative filtering based 방법이 있었는데 이들은 시간에 따라서 대상의 속성이 변한다는 특징을 반영하지 못한다.
- 시간에 따라 나열된 유저의 행동 sequence을 모델링하는 sequential recommendation 필요했고 이런 배경에서 ReSeq이 개발되었다.
- ReSeq은 dual perspective의 관점에서 sequence을 모델링하기 때문에 two-sided matching을 하고자 한다. 즉, 전통적인 추천 시스템에서는 유저가 아이템을 일방적으로 고르는 형식이었다면 RSS에서는 두 개의 유저 집단이 있고 서로를 자율적으로 선택하는 형태인 것이다.
- ReSeq은 RSS이면서 dynamic sequence을 모델에 반영하는, 첫 시도라는 점에서 의미가 있다.
Approach
Problem Formulation
- RSS에서 등장하는 두 개의 집단: $u_i \in \mathcal{U}, v_j \in \mathcal{V}$
- 기존의 RS처럼 user, item이라고 칭하지 않는다. RSS에서는 서로가 서로를 선택할 수 있는 동등한 위치이기 때문이다.
- goal of RSS: join function $\hat{y}_{i,j} = \overrightarrow{g}(u_i, v_j) + \overleftarrow{g}(u_i, v_j)$을 학습하기. 이 joint function은 bilateral preference selection을 모델링한다.
- $S^T_{u_i} = ( v^{t_1}_1, v^{t_2}_2, \cdots, v^{t_a}_a )$ 또는 $S^T_{v_j} = ( u^{t_1}_1, u^{t_2}_2, \cdots, u^{t_b}_b )$: 각각의 time step에서 current time T까지의 behavior sequence
- $S^T_{u_i}$ sequence에서 $v^{t_{j'}}_{j'}$은 $t_{j'}$ 시점에 $u_i$와 $v_{j'}$가 matching이 되었음을 나타낸다.
- 목적은 두 유저의 historical behavior sequence을 반영하는 일종의 score $\hat{y}_{i,j} = \overrightarrow{g}(u_i, S^T_{u_i}, v_j, S^T_{v_j}) + \overleftarrow{g}(u_i, S^T_{u_i}, v_j, S^T_{v_j})$을 예측하는 matching function을 만드는 것이다.
Dual-perspective dynamic sequential behavior modeling: Bilateral user representation leraning
RSS가 기존의 RS와 가장 다른 점은 유저들끼리 매칭하는 것이 dual-perspective process라는 점이다. 즉, 유저가 아이템을 일방적으로 선택하는 것이 아닌, 서로가 actively 선택하고, passively 선택당하는 관계이다. 따라서, 유저를 나타내는 방법도 dual-perspective의 형태를 가져야할 것 같다. 기존에 유저를 나타내는 벡터는 한 종류였지만, RSS에서는 두 종류(dual)로 나타내는 것이다.
- active selectors: 선택하는 집단이며 preference 표현한다고도 볼 수 있다.
- passive candidates: 선택당하는 집단이며 본인의 feature을 표현한다고도 볼 수 있다.
- 한쪽 집단인 $\mathcal{U}$에 대해서 두 종류의 embedding 행렬이 있다.
- $\mathbf{M}^U_p \in \mathbf{R}^{|\mathcal{U}| \times d}$: active user embedding
- $\mathbf{M}^U_f \in \mathbf{R}^{|\mathcal{U}| \times d}$: active user embedding
- 다른쪽 집단인 $\mathcal{V}$에 대해서 두 종류의 embedding 행렬이 있다.
- $\mathbf{M}^V_p \in \mathbf{R}^{|\mathcal{V}| \times d}$: active user embedding
- $\mathbf{M}^V_f \in \mathbf{R}^{|\mathcal{V}| \times d}$: active user embedding
한쪽 집단이 다른쪽 집단을 선택하는 과정에서, 즉 매칭이 이루어지는 상황은 active interest와 passive attraction의 합이 맞춰지는 과정이다. 잘 생각해보면, $\mathbf{M}^U_p, \mathbf{M}^V_f$와 $\mathbf{M}^V_p, \mathbf{M}^U_f$가 두 쌍으로 관련이 있을 것이다. 이 두 쌍에서 매칭이 이루어지는 모델 가정을, 행렬 분해를 했을 때 공통의 요소를 공유한다고 가정함으로써 반영하는 것이 핵심이다.
여기서 $\mathbf{A} \in \mathbb{R}^{|\mathcal{U}| \times d'}$, $\mathbf{B} \in \mathbb{R}^{|\mathcal{V}| \times d'}$, $\mathbf{C} \in \mathbb{R}^{d' \times d}$이다.
Dual perspective behavior sequence encoding
Unidirectional active dynamic encoding
위와 같이 행렬을 분해했으면, 이를 이용해서 유저의 행동 sequence을 인코딩해보자. 직관적으로 active users는 feature을 보고 상대를 선택한다. 따라서 유저의 active dynamic representation을 유저가 과거에 선택한 passive representations에 기반하여 인코딩한다.
- 유저의 behavior sequence인 $S^T_{u_i} = ( v^{t_1}_1, v^{t_2}_2, \cdots, v^{t_a}_a )$가 주어졌다고 가정하자.
- fixed length인 $n$으로 패딩하고 sequence의 시작에 [CLS] special token을 추가한다.
- 유저가 선택한 대상은 passive representation임을 기억하자. 다른쪽 집단, $\mathcal{V}$에서 $\mathbf{M}^V_p$가 아닌 $\mathbf{M}^V_f$에서 embedding을 찾아야 한다. 또한, transformer와 유사하게 position embedding을 넣는다.
- $P \in \mathbb{R}^{(n+1) \times d}$: position embedding
- $\mathbf{E}^{V}_f \in \mathbb{R}^{(n+1) \times d}$: input sequence passive embbedding
- 여기서 n이 아니라 n+1 차원이 된 이유는, 초반에 special token [CLS]을 추가했기 때문이다.
- 이제 transformer network에 입력값을 태울 것인데, position embedding과 passive embedding을 합친 것을 multi-head self attention layers에 넘긴다.
- 위 식은 RRS와 관계 없는, transformer layer의 식이다.
- 이전 transformer layer의 output 값을 $\mathbf{H}^{l-1}$이라고할 때, attention mask을 씌워서 multi-head attention을 태우고, 이를 FFN으로 넘긴다.
- $L$개의 transformer layers을 통과한 output vector는 유저의 active dynamic representation을 나타낼 것이다. 이를 $\mathbf{H}^L$라 하고 두 부분으로 쪼개보자.
- $\mathbf{p}_{u_i} = \mathbf{H}^L_0 \in \mathbb{R}^d$: [CLS] token에 대응되는 output. 유저의 macro, 또는 global active dynamic representation이다.
- $\tilde{p}_{u_i} = \mathbf{H}^L_{1:n+1} \in \mathbb{R}^{n \times d}$: 유저의 micro, 또는 fine-grained active dynamic representation이다.
Bidirectional passive dynamic encoding
위에서는 선택을 하는 active user을 encoding하는 과정을 살펴보았다면, 이제 선택을 당하는 passive user을 encoding하는 과정을 생각해보자. 선택 당하는 사람을 인코딩할 때, 그 사람을 선택하는 사람을 봐야한다. 즉, 상대 집단의 preference을 봐야한다는 것이다. $\mathcal{U}$ 집단이 선택 받는다고 생각해보면, $\mathcal{V}$ 집단의 preference가 반영될 것이다. 따라서, embedding vector을 lookup할 때, $\mathbf{M}^V_f$가 아니라 $\mathbf{M}^V_p$을 참조하여 $\mathbf{E}^V_p \in \mathbb{R}^{(n+1) \times d}$을 만든다. $L$개의 transformer layers 거친 후에, active user와 마찬가지로 output vector을 두 부분으로 쪼갠다.
- $\mathbf{f}_{u_i} = \mathbf{H}^L_0 \in \mathbb{R}^d$: 유저의 macro, 또는 global active dynamic representation이다.
- $\tilde{f}_{u_i} = \mathbf{H}^L_{1:n+1} \in \mathbb{R}^{n \times d}$: 유저의 micro, 또는 fine-grained active dynamic representation이다.
Multi-scale sequence matching
위에서 user의 active/passive dynamic representations을 얻을 수 있었다. 이제 이 벡터를 가지고 어떻게 RSS을 할 것인지 알아보자.
Macro level matching
위에서 macro/micro 관점에서의 벡터를 만들었다. 이제 최종 점수를 계산할 때도, 이 두가지 관점으로 접근하되 active-passive matching, 즉 dual persepctive propensity 방법을 사용한다. 먼저, macro level에서 계산되는 점수는 아래와 같다.
- 잘 보면, 유저 $u_i$ 입장에서 active dynamic representation인 $\mathbf{p}_{u_i}$와 유저 $v_j$ 입장에서 passive dynamic representation인 $\mathbf{f}_{v_j}$의 내적이 한 파트이다.
- 또 다른 항은 $v_j$가 active user이고 $u_i$가 passive user인 경우, 계산되는 점수이다.
Time sensitive micro-level matching
아래와 같이 계산된다.
Time-sensitive micro-level matching인 TiSensiMatch 함수가 어떻게 계산되는지 알아보자. input은 $u_i, v_j$가 각각 active, passive user일 때이다.
- $\mathbf{G} = \tilde{\mathbf{p}}_{u_i} \cdot (\tilde{\mathbf{f}}_{v_j})^T$: 각기 다른 time step에서 active/passive representations가 매칭되는 정도를 나타낸다.
- $\mathbf{G}$에 대해 two dimensions of co-attention을 실행한다. 이를 위해 $\boldsymbol{\delta, \gamma}$을 구한다.
- $\boldsymbol{\gamma} = softmax( \mathbf{\tilde{f}}_{v_j} \cdot \mathbf{e}^p_{u_i} )$: passive dimension에서 구한 attention weight
- $\boldsymbol{\delta} = softmax( \mathbf{\tilde{p}}_{u_i} \cdot \mathbf{e}^f_{v_j} + \mathbf{\alpha}^\tau)$: active user 관점에서 구한 time-sensitive attention weight. $\boldsymbol{\alpha}$는 learnable relative time weight이다.
- 마지막으로 아래와 같이 aggregate 한다.
$\hat{z}_{j \rightarrow i}$도 동일하게 생각하면 되고 최종 micro level 점수인 $\hat{z}_{i,j}$는 이 둘의 합으로 정의된다.
Experiments
Data
- online recruitment: chinese online recruitment platform에서 수집한 로그
- question answering: stack exchange에서 질문하는 사람들에게는 적당한 전문가를, 답변하는 사람들에게는 이전 답변 이력을 참조하여 적절한 질문을 추천하였다.
Baseline models
- 기본 모델: BPR, LFRR, NeuMF 등
- transformer based 모델: SASRec, BERT4Rec 등
Evaluation metric
- HR@K
- NDCG@K
- Mean reciprocal rank: MRR@K
Results
- Trecruitment data의 결과도 비슷하여 q&a 데이터 세트에 대한 결과만 첨부하였다.
- collaborative filtering에 비해서 transformer based 모델이 더 나은 결과를 보인다.
- 이는 곧, transformer based 모델이 sequential modeling을 더 잘한다는 것을 보여준다.
- ReSeq는 거의 모든 경우에 대해서 베이스라인 모델보다 더 좋은 성능을 보인다.
Ablation study
아래 네가지 경우에 대해서 성능을 측정해보고, 본 논문에서 제안한 모델 아키텍쳐가 정말 유효한지 검증해보자.
- w/o DSE: ReSeq의 핵심 파트이다. decomposition, sharing embedding matrix을 제외한 경우이다.
- w/o MASK: 서로 다른 mask 행렬이 아니라 동일한 bidirectional mask matrix을 사용한다.
- w/o TSA: micro level matching에서 time sensitive attention을 제외한다.
- w/o SD: self-distillation loss을 제거한다.
네가지 경우에 대해 기존의 metric보다 더 낮은 성늠을 보임을 알 수 있다. 즉, ReSeq의 핵심적인 모델 아키텍쳐가 모두 필요한 부분임을 알 수 있다.
Conclusion
- 2023 RecSys에 선정된 페이퍼를 읽어보았다. 기존에는 한쪽이 일방적으로 다른 쪽을 선택하는 관계였다면, Reciprocal RS는 서로가 선택하는 상황에서 추천을 하는 것이며 이에 대한 활용 분야는 데이팅앱, 구인구직 사이트 등이 있다는 점이 흥미로웠다.
- 그러나 time, memory complexity에 대해서는 고려해봐야 한다. 아무래도 embedding matrix의 개수가 더 많아졌고, 유저의 수가 매우 많아진다면 연산이 힘들수도 있기 때문이다.
- 시간나면 소스코드를 살펴봐야겠다.
댓글