← notes

큰 카테고리 체계에 적합한 sparse multi-interest 추천

, ,

TL;DR

대규모 아이템 카테고리 풀에서 유저마다 희소한 개념 집합을 adaptively 선택해 다중 관심 임베딩을 만들고, 이를 능동적으로 예측한 현재 의도로 aggregation하는 시퀀셜 추천 모델

  • 10억 스케일 산업 데이터(ULarge)에서 2등 베이스라인(MIND) 대비 HR@50 기준 +34.06% 개선.
  • inference 시 라벨이 없어도 “다음 의도”를 능동적으로 예측하는 aggregation module로 MIND류의 train/test gap 문제를 완화 + 수백개 이내 군집을 다루는 MIND류 대비 industry 규모의 카테고리 체계에 대응할 수 있음

Background

Method

SINE은 크게 sparse-interest extraction module과 interest aggregation module 두 단계로 구성된다.

Sparse-interest extraction module

각 단계가 왜 필요한지 먼저 요약하면: 유저마다 다른 소수의 concept을 뽑아내고(selection), 시퀀스 내 각 아이템이 어떤 concept/의도에 속하는지 추정한 뒤(assignment), 그 의도별로 시퀀스를 가중합해 interest embedding을 만든다.

  1. Concept activation (큰 concept pool 중 유저별 Top-K 개념 선택)
    • self-attentive pooling으로 시퀀스 전체를 요약하는 “virtual concept vector”를 생성한다: a=softmax(tanh⁡(XuW1)W2),zu=(a⊤Xu)⊤a = \text{softmax}(\tanh(X^u W_1) W_2), \quad z^u = (a^\top X^u)^\top
      • Xu∈Rn×DX^u \in \mathbb{R}^{n \times D}는 유저 uu의 시퀀스 아이템 임베딩 행렬, zu∈RDz^u \in \mathbb{R}^D는 유저의 전반적 의도를 요약한 벡터다
    • zuz^u와 전체 concept pool C∈RL×DC \in \mathbb{R}^{L \times D}(LL은 전체 concept 수, 최대 수천)의 내적으로 관련도 점수를 구하고 top-K만 선택한다: su=⟨C,zu⟩,idx=rank(su,K),Cu=C(idx,:)⊙Sigmoid(su(idx,:)1⊤)s^u = \langle C, z^u \rangle, \quad idx = \text{rank}(s^u, K), \quad C^u = C(idx,:) \odot \text{Sigmoid}(s^u(idx,:)\mathbf{1}^\top)
      • Cu∈RK×DC^u \in \mathbb{R}^{K \times D}가 유저별로 활성화된 K개 concept 임베딩이다. top-K ranking은 discrete하지만, 선택된 concept에 sigmoid 가중치를 곱해 gradient가 흐르도록 하는 relaxation trick(Graph U-Nets의 기법을 차용)
      • -> 즉 이 말은, “선택(discrete)“과 “가중치 부여(continuous)“를 분리해서, 선택 자체는 forward에서 top-K로 하되 backward는 sigmoid gate를 통해 학습 가능하게 만든다는 것
  2. Intention assignment: 시퀀스의 각 아이템이 선택된 K개 concept 중 어디에 속하는지 cosine 유사도 기반 softmax로 추정한다 Pk∣t=exp⁡(LN1(XtuW3)⋅LN2(Cku))∑k′=1Kexp⁡(LN1(XtuW3)⋅LN2(Ck′u))P_{k|t} = \frac{\exp(\text{LN}_1(X_t^u W_3) \cdot \text{LN}_2(C_k^u))}{\sum_{k'=1}^K \exp(\text{LN}_1(X_t^u W_3) \cdot \text{LN}_2(C_{k'}^u))}
    • inner product 대신 LayerNorm 후 cosine 유사도를 쓰는 이유: dot product는 일부 concept만 계속 선택되는 model collapse에 더 취약하기 때문이다(DisenRec의 관찰을 인용)
  3. Attention weighting: concept 관점이 아니라, “이 아이템이 다음 의도를 예측하는 데 얼마나 중요한가”를 별도의 self-attention(Pt∣kP_{t|k})으로 계산한다. concept마다 독립적인 attention layer를 두고, 여기에는 positional embedding을 더해 순서 정보를 반영한다
  4. Interest embedding 생성: 두 가중치를 곱해 시퀀스를 집계한다 ϕθk(x(u))=LayerNorm3(∑t=1nPk∣t⋅Pt∣k⋅Xtu)\phi_\theta^k(x^{(u)}) = \text{LayerNorm}_3\left(\sum_{t=1}^n P_{k|t} \cdot P_{t|k} \cdot X_t^u\right)
    • KK개의 interest embedding {ϕθk(x(u))}k=1K\{\phi_\theta^k(x^{(u)})\}_{k=1}^K가 최종 산출물이다

-> concept pool 크기 LL을 top-K selection으로 다루는 방식이 결국 “학습 가능한 soft clustering + hard gating”인데, differentiable top-K trick(sigmoid gating)이 실제로 gradient를 얼마나 풍부하게 흘려보내는지 궁금함. 선택되지 않은 concept은 매 스텝 gradient를 거의 못 받을 텐데

Interest aggregation module

Model optimization

Experiments