多兴趣向量重构用户向量

132 阅读3分钟

Re4: Learning to Re-contrast, Re-attend, Re-construct for Multi-interest Recommendation

论文地址:arxiv.org/pdf/2208.08…

一般的多兴趣建模过程是对用户序列进行编码,抽取出用户的多个兴趣向量,然后利用这些用户兴趣向量进行下一步候选集选取。这篇paper将这个过程称为前向流过程(forward flow),即物料序列到多兴趣向量的过程。论文提出了一个后向流过程(backward flow),即用抽取的多个兴趣向量来重构物料向量。不论是MIND还是ComiRec-SA,抽取多兴趣的过程没有保证多个兴趣向量的差异性,也没有保证兴趣向量的相关性和推荐系统的误差是一致的。

重构结构

这个前向流就是多兴趣提取的过程,后向流就是论文提出的 在这里插入图片描述

前向流

前向流中,第ii个序列行为在第kk个兴趣上的相关性分数为

ak,i=exp(wkTtanh(W1xi))jexp(wkTtanh(W1xj))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))}

W1Rdh×d\mathbf W_1 \in R^{d_h \times d}是所有兴趣共享的转换矩阵,wkRdh\mathbf w_k \in R^{d_h}是兴趣相关的转换向量。

兴趣向量如下: zk=jak,jW2xj\mathbf z_k = \sum_j a_{k,j} \mathbf W_2 \mathbf x_j

后向流

Re-contrast

重新对比的动机是提取的多兴趣向量没法保证差异性,所有的兴趣向量可能在向量空间中非常接近。根据兴趣向量构造正负例进行对比学习,如上面结构图所示,拉近表示相同兴趣的向量距离,推远不同兴趣的距离。

这里的正负例构造比较特别,正样本集合是相关性分数ak,ja_{k,j}大于一定阈值的物料向量xj\mathbf x_j

Pk={xjak,j>γc}P_k = \{ \mathbf x_j| a_{k, j} > \gamma_c \}

γc=1/Nx\gamma_c = 1 / N_x表示用户序列长度的倒数

负例有三部分,第一部分自然是小于阈值γc\gamma_c的物料集合,第二部分是用户的其他兴趣向量,第三部分是不在用户序列的其他物料。

使用InfoNCE损失来衡量对比学习loss LCL=ilogexp(zkzk,i+/τ)exp(zkzk,i+/τ)+jexp(zkzk,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) }

Re-attend

相关性分数ak,ia_{k,i}表示为第kk个兴趣向量zkz_k和第ii个行为xix_i的相关性,但是这个相关性分数是通过多兴趣编码层计算得到的,那么直接通过兴趣向量和行为向量的点积(或者其他相似度)计算来衡量这个分数的准确性。

(z_k, x_i)$$ 这里 $\varphi$ 表示相似性衡量函数,可以用点积;新的分数和原来的分数使用交叉熵来衡量,得到新的loss函数 $$L_{ATT} = \sum_k \sum_i L_{CE} (a_{k, i}, \hat a_{k, i})$$ ##### Re-construct 利用得到的兴趣向量来重构用户行为向量,使得和原来的用户行为向量尽量保持一致。 首先通过一个线性映射$\mathbf W_4 \in R^{N_xd_b \times d}$将兴趣向量$z_k$还原成一个兴趣矩阵$\mathbf C_k$,然后计算每个序列在这个兴趣矩阵下的权重$\beta_{k,i,j}$,最后通过一个线性映射矩阵加权求和得到还原的在第$i$个兴趣下的行为序列向量$\hat x_{k, j}$。通过正样本中的物料来衡量损失。 $$\mathbf C_k = Upsample(z_k)$$ $$\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}) }$$ $$\hat x_{k, j} = \sum_i \beta_{k, i, j} \mathbf W_5 c_{k, i}$$ $$L_{CT} = \sum_k \sum_i I(x_j \in P_k) \vert \vert \hat x_{k,j} - x_j \vert \vert _F^2$$ 这个还原操作看起来非常合理,不过计算量还是比较大的,实际上线可能会增加些耗时。 最终的损失函数 $$L_{Re^4} = L_{Rec} + \lambda_{CL}L_{CL} + \lambda_{ATT}L_{ATT} + \lambda_{CT}L_{CT}$$