Re4: Learning to Re-contrast, Re-attend, Re-construct for Multi-interest Recommendation
论文地址:https://arxiv.org/pdf/2208.08011.pdf
一般的多兴趣建模过程是对用户序列进行编码,抽取出用户的多个兴趣向量,然后利用这些用户兴趣向量进行下一步候选集选取。这篇paper将这个过程称为前向流过程(forward flow),即物料序列到多兴趣向量的过程。论文提出了一个后向流过程(backward flow),即用抽取的多个兴趣向量来重构物料向量。不论是MIND还是ComiRec-SA,抽取多兴趣的过程没有保证多个兴趣向量的差异性,也没有保证兴趣向量的相关性和推荐系统的误差是一致的。
重构结构
这个前向流就是多兴趣提取的过程,后向流就是论文提出的
前向流
前向流中,第 i i i个序列行为在第 k k k个兴趣上的相关性分数为
a k , i = e x p ( w k T t a n h ( W 1 x i ) ) ∑ j e x p ( w k T t a n h ( W 1 x j ) ) a_{k,i} = \frac {exp(\mathbf w_k^T tanh(\mathbf W_1 \mathbf x_i))} { \sum_j exp(\mathbf w_k^T tanh(\mathbf W_1 \mathbf x_j))} ak,i=∑jexp(wkTtanh(W1xj))exp(wkTtanh(W1xi))
W 1 ∈ R d h × d \mathbf W_1 \in R^{d_h \times d} W1∈Rdh×d是所有兴趣共享的转换矩阵, w k ∈ R d h \mathbf w_k \in R^{d_h} wk∈Rdh是兴趣相关的转换向量。
兴趣向量如下:
z
k
=
∑
j
a
k
,
j
W
2
x
j
\mathbf z_k = \sum_j a_{k,j} \mathbf W_2 \mathbf x_j
zk=j∑ak,jW2xj
后向流
Re-contrast
重新对比的动机是提取的多兴趣向量没法保证差异性,所有的兴趣向量可能在向量空间中非常接近。根据兴趣向量构造正负例进行对比学习,如上面结构图所示,拉近表示相同兴趣的向量距离,推远不同兴趣的距离。
这里的正负例构造比较特别,正样本集合是相关性分数 a k , j a_{k,j} ak,j大于一定阈值的物料向量 x j \mathbf x_j xj
P k = { x j ∣ a k , j > γ c } P_k = \{ \mathbf x_j| a_{k, j} > \gamma_c \} Pk={xj∣ak,j>γc}
γ c = 1 / N x \gamma_c = 1 / N_x γc=1/Nx表示用户序列长度的倒数
负例有三部分,第一部分自然是小于阈值 γ c \gamma_c γc的物料集合,第二部分是用户的其他兴趣向量,第三部分是不在用户序列的其他物料。
使用InfoNCE损失来衡量对比学习loss
L
C
L
=
−
∑
i
log
e
x
p
(
z
k
⋅
z
k
,
i
+
/
τ
)
e
x
p
(
z
k
⋅
z
k
,
i
+
/
τ
)
+
∑
j
e
x
p
(
z
k
⋅
z
k
,
j
−
/
τ
)
L_{CL} = -\sum_i \log \frac {exp(z_k \cdot z_{k,i}^+ / \tau ) } { exp(z_k \cdot z_{k,i}^+ / \tau) + \sum_j exp(z_k \cdot z_{k,j}^- / \tau) }
LCL=−i∑logexp(zk⋅zk,i+/τ)+∑jexp(zk⋅zk,j−/τ)exp(zk⋅zk,i+/τ)
Re-attend
相关性分数 a k , i a_{k,i} ak,i表示为第 k k k个兴趣向量 z k z_k zk和第 i i i个行为 x i x_i xi的相关性,但是这个相关性分数是通过多兴趣编码层计算得到的,那么直接通过兴趣向量和行为向量的点积(或者其他相似度)计算来衡量这个分数的准确性。
a ^ k , i = φ ( z k , x i ) \hat a_{k, i} = \varphi (z_k, x_i) a^k,i=φ(zk,xi)
这里 φ \varphi φ 表示相似性衡量函数,可以用点积;新的分数和原来的分数使用交叉熵来衡量,得到新的loss函数
L A T T = ∑ k ∑ i L C E ( a k , i , a ^ k , i ) L_{ATT} = \sum_k \sum_i L_{CE} (a_{k, i}, \hat a_{k, i}) LATT=k∑i∑LCE(ak,i,a^k,i)
Re-construct
利用得到的兴趣向量来重构用户行为向量,使得和原来的用户行为向量尽量保持一致。
首先通过一个线性映射 W 4 ∈ R N x d b × d \mathbf W_4 \in R^{N_xd_b \times d} W4∈RNxdb×d将兴趣向量 z k z_k zk还原成一个兴趣矩阵 C k \mathbf C_k Ck,然后计算每个序列在这个兴趣矩阵下的权重 β k , i , j \beta_{k,i,j} βk,i,j,最后通过一个线性映射矩阵加权求和得到还原的在第 i i i个兴趣下的行为序列向量 x ^ k , j \hat x_{k, j} x^k,j。通过正样本中的物料来衡量损失。
C k = U p s a m p l e ( z k ) \mathbf C_k = Upsample(z_k) Ck=Upsample(zk)
β k , i , j = w j T t a n h ( W 3 c k , i ) ∑ m w j T t a n h ( W 3 c k , m ) \beta_{k,i,j} = \frac {w_j^T tanh (\mathbf W_3 c_{k, i}) } { \sum_mw_j^T tanh (\mathbf W_3 c_{k, m}) } βk,i,j=∑mwjTtanh(W3ck,m)wjTtanh(W3ck,i)
x ^ k , j = ∑ i β k , i , j W 5 c k , i \hat x_{k, j} = \sum_i \beta_{k, i, j} \mathbf W_5 c_{k, i} x^k,j=i∑βk,i,jW5ck,i
L C T = ∑ k ∑ i I ( x j ∈ P k ) ∣ ∣ x ^ k , j − x j ∣ ∣ F 2 L_{CT} = \sum_k \sum_i I(x_j \in P_k) \vert \vert \hat x_{k,j} - x_j \vert \vert _F^2 LCT=k∑i∑I(xj∈Pk)∣∣x^k,j−xj∣∣F2
这个还原操作看起来非常合理,不过计算量还是比较大的,实际上线可能会增加些耗时。
最终的损失函数
L R e 4 = L R e c + λ C L L C L + λ A T T L A T T + λ C T L C T L_{Re^4} = L_{Rec} + \lambda_{CL}L_{CL} + \lambda_{ATT}L_{ATT} + \lambda_{CT}L_{CT} LRe4=LRec+λCLLCL+λATTLATT+λCTLCT