关注我们,一起学习
title:Intent Contrastive Learning for Sequential Recommendation
link:https://arxiv.53yu.com/pdf/2202.02519.pdf
code:https://github.com/salesforce/ICLRec
from:WWW 2022
1. 导读
用户与物品的互动是由各种意图驱动的(例如,准备节日礼物、购买捕鱼设备等)。然而,用户的潜在意图往往是不被观察到/潜在的,因此很难利用这些潜在意图进行序列推荐(SR)。本文提出了意图对比学习(ICL),通过聚类将潜在意图变量引入SR。其核心思想是从未标记的用户行为序列中学习用户的意图分布函数,并通过考虑学习的意图来优化SR模型,从而改进推荐模型。
本文主要是针对用户的兴趣表征进行聚类,然后以簇中心代表用户意图,根据用户意图和用户兴趣表征构建损失函数,并且结合原有的序列损失函数和对比学习损失函数构建多任务损失函数。
2. 基础
2.1 问题定义
用户集合U,商品集合V,每个用户有一个交互序列
S^u=\{s_1^u,...,s_{|S^u|}^u\},
s_t^u表示在时间步t时,用户u交互的商品。令
\mathbf{S}^u表示序列的embedding,即对序列中的每个商品进行编码,得到对应的embedding的集合。在实践中,固定长度T,序列长了就裁剪,短了就补全。模型目标是预测第
|S^u|+1个交互的商品。
2.2 序列模型
深度序列推荐模型,通常是将交互序列embedding集合
\mathbf{S}^u进行编码,发掘用户的兴趣表征
\mathbf{H}^u=f_{\theta}(\mathbf{S}^u),H中的每个元素表达用户在位置t时的兴趣。序列模型建模时,通常是对一个序列中,每次前t个构成的子序列来预测第t+1个商品,因此可以建模如下,其中负样本
s_{neg}为随机采样得到。
\theta^{*}=\underset{\theta}{\arg \max } \sum_{u=1}^{N} \sum_{t=2}^{T} \ln P_{\theta}\left(s_{t}^{u}\right)
\mathcal{L}_{\text {NextItem }}=\sum_{u=1}^{N} \sum_{t=2}^{T} \mathcal{L}_{\text {NextItem }}(u, t)
\mathcal{L}_{\text {NextItem }}(u, t)=-\log \left(\sigma\left(\mathbf{h}_{t-1}^{u} \cdot \mathbf{s}_{t}^{u}\right)\right)-\sum_{n e g} \log \left(1-\sigma\left(\mathbf{h}_{t-1}^{u} \cdot \mathbf{s}_{n e g}^{u}\right)\right)
2.3 推荐中的对比自监督学习
本文利用的对比学习自监督相关方法是,按照互信息最大化(MIM)原则,融合一个序列不同视图之间的相关性。给定一个序列
S^u和预先定义的函数集合
\mathcal{G},构建两个正样本的视角(positive view),公式如下,其中g是从
\mathcal{G}中采样得到的转换函数(转换方式包括对序列加掩码,裁剪和重排序等),通常,从同一序列创建的视图被视为正对,任何不同序列的视图都被视为负对。
\tilde{S}_{1}^{u}=g_{1}^{u}\left(S^{u}\right), \tilde{S}_{2}^{u}=g_{2}^{u}\left(S^{u}\right), \text { s.t. } g_{1}^{u}, g_{2}^{u} \sim \mathcal{G}
构建的新序列,经过编码器得到对应的序列兴趣表征集合
\tilde{\mathbf{H}}_1^u,
\tilde{\mathbf{H}}_2^u,将其聚合后得到兴趣向量表示当前整个序列的表征
\tilde{h}_1^u,
\tilde{h}_2^u,文中采用的聚合方式是拼接。然后根据infoNCE来构建损失函数,sim()表示内积,
h_{neg}表示负视角构建的兴趣表征。
\mathcal{L}_{\text {SeqCL }}=\mathcal{L}_{\text {SeqCL }}\left(\tilde{\mathbf{h}}_{1}^{u}, \tilde{\mathbf{h}}_{2}^{u}\right)+\mathcal{L}_{\text {SeqCL }}\left(\tilde{\mathbf{h}}_{2}^{u}, \tilde{\mathbf{h}}_{1}^{u}\right),
\mathcal{L}_{\mathrm{SeqCL}}\left(\tilde{\mathbf{h}}_{1}^{u}, \tilde{\mathbf{h}}_{2}^{u}\right)=-\log \frac{\exp \left(\operatorname{sim}\left(\tilde{\mathbf{h}}_{1}^{u}, \tilde{\mathbf{h}}_{2}^{u}\right)\right)}{\sum_{n e g} \exp \left(\operatorname{sim}\left(\tilde{\mathbf{h}}_{1}^{u}, \tilde{\mathbf{h}}_{n e g}\right)\right)}
3. 方法
图2为总体框架图。通过EM算法交替执行E步和M步来估计意图变量c的分布函数𝑄(𝑐) 并对模型参数进行了优化𝜃. 在E-step中,它通过聚类估计𝑄(𝑐) 。在M-step中,它通过梯度下降考虑到估计的𝑄(𝑐)优化𝜃 。
- E步,进行聚类,得到不同簇反映的用户意图
- M步,根据用户意图和兴趣表征,进行损失函数的计算以及参数更新。
3.1 ICL
3.1.1 建模潜在意图
假设用户存在K个意图
\{c_i\}_{i=1}^K,则优化目标可以改写为下式,通常的RS是不考虑用户意图,直接通过交互序列embedding
s_t^u进行第t+1的预测,具体公式可以看2.2,而ICL中,考虑用户意图,计算每个意图与第t次交互embedding的关系,然后将所有关系求期望后,在根据常用的流程往下计算损失。
\theta^{*}=\underset{\theta}{\arg \max } \sum_{u=1}^{N} \sum_{t=1}^{T} \ln \mathbb{E}_{(c)}\left[P_{\theta}\left(s_{t}^{u}, c_{i}\right)\right]
上述公式求解很复杂,因此根据EM算法,构造上式的下界,通过最大化下界来最大化上式,假设意图c满足分布Q(c),
\sum_{c}{Q(c_i)}=1,并且Q(c)≥0,可以得到下式,等式右边第一个是求期望,第二个是乘上Q()/Q(),值不变。
\begin{aligned}
\sum_{u=1}^{N} \sum_{t=1}^{T} \ln \mathbb{E}_{(c)}\left[P_{\theta}\left(s_{t}^{u}, c_{i}\right)\right] &=\sum_{u=1}^{N} \sum_{t=1}^{T} \ln \sum_{i=1}^{K} P_{\theta}\left(s_{t}^{u}, c_{i}\right) \\
&=\sum_{u=1}^{N} \sum_{t=1}^{T} \ln \sum_{i=1}^{K} Q\left(c_{i}\right) \frac{P_{\theta}\left(s_{t}^{u}, c_{i}\right)}{Q\left(c_{i}\right)}
\end{aligned}根据jensen不等式,可得下式,
\begin{aligned}
\geq & \sum_{u=1}^{N} \sum_{t=1}^{T} \sum_{i=1}^{K} Q\left(c_{i}\right) \ln \frac{P_{\theta}\left(s_{t}^{u}, c_{i}\right)}{Q\left(c_{i}\right)} \\
\propto & \sum_{u=1}^{N} \sum_{t=1}^{T} \sum_{i=1}^{K} Q\left(c_{i}\right) \cdot \ln P_{\theta}\left(s_{t}^{u}, c_{i}\right)
\end{aligned}前面我们提到序列推荐中,每次都用前t个子序列来预测第t+1时的商品,为了简化ICL损失函数的计算,只考虑最后一步的下界,则可以去掉上式的中间的求和,公式如下,其中
Q(c_i)=P_{\theta}(c_i|S^u)\sum_{u=1}^N{\sum_{i=1}^K}{Q(c_i)\ln P_{\theta}(S^u,c_i)}
3.1.2 意图表征学习
为了学习意图分布Q(c),将所有序列
\{S^u\}_{u=1}^{|U|}通过编码器编码得到表征
\{h^u\}_{u=1}^{|U|},然后在这些表征上做kmeans聚类,从而得到上式中得
P_{\theta}(c_i|S^u),如下式,
Q\left(c_{i}\right)=P_{\theta}\left(c_{i} \mid S^{u}\right)=\left\{\begin{array}{cc}
1 & \text { if } S^{u} \text { in cluster } i \\
0 & \text { else. }
\end{array}\right.我们将
\mathbf{c_i}表示为意图
c_i的向量表征 , 他们是簇的中心,使用平均池化,即求簇中表征的均值来得到。
3.1.3 意图对比学习
在得到Q(c)之后,想要最大化下界还需要知道
P_{\theta}(S^u,c_i)。假设意图的先验满足均匀分布,并且给定意图c时
S^u的条件分布和L2标准化的高斯分布同向,则可以该写成下式,其中
\mathbf{h}^u为
S^u的表征。
\begin{aligned}
P_{\theta}\left(S^{u}, c_{i}\right) &=P_{\theta}\left(c_{i}\right) P_{\theta}\left(S^{u} \mid c_{i}\right)=\frac{1}{K} \cdot P_{\theta}\left(S^{u} \mid c_{i}\right) \\
& \propto \frac{1}{K} \cdot \frac{\exp \left(-\left(\mathbf{h}^{u}-\mathbf{c}_{i}\right)^{2}\right)}{\sum_{j=1}^{K} \exp \left(-\left(\mathbf{h}_{i}^{u}-\mathbf{c}_{j}\right)^{2}\right)} \\
& \propto \frac{1}{K} \cdot \frac{\exp \left(\mathbf{h}^{u} \cdot \mathbf{c}_{i}\right)}{\sum_{j=1}^{K} \exp \left(\mathbf{h}^{u} \cdot \mathbf{c}_{j}\right)}
\end{aligned}则最终最大化的公式可以改写为最小化下式,其中sim()为内积,该公式最大化序列和意图之间的互信息。
-\sum_{v=1}^{N} \log \frac{\exp \left(\operatorname{sim}\left(\mathbf{h}^{u}, \mathbf{c}_{i}\right)\right)}{\sum_{j=1}^{K} \exp \left(\operatorname{sim}\left(\mathbf{h}^{u}, \mathbf{c}_{j}\right)\right)}
对每一个batch中的训练序列
\{S_u\}_{u=1}^N,构建两个正视角的序列分别得到两个表征
\mathbf{\tilde{h}_1^u}和
\mathbf{\tilde{h}_2^u},然后构建以下损失函数,其中
\mathbf{c}_{neg}表示给定batch中的所有意图。
\mathcal{L}_{\mathrm{ICL}}=\mathcal{L}_{\mathrm{ICL}}\left(\tilde{\mathbf{h}}_{1}^{u}, \mathbf{c}_{u}\right)+\mathcal{L}_{\mathrm{ICL}}\left(\tilde{\mathbf{h}}_{2}^{u}, \mathbf{c}_{u}\right)
\mathcal{L}_{\mathrm{ICL}}\left(\tilde{\mathbf{h}}_{1}^{u}, \mathbf{c}_{u}\right)=-\log \frac{\exp \left(\operatorname{sim}\left(\tilde{\mathbf{h}}_{1}^{u}, \mathbf{c}_{u}\right)\right)}{\sum_{n e g} \exp \left(\operatorname{sim}\left(\tilde{\mathbf{h}}_{1}^{u}, \mathbf{c}_{n e g}\right)\right)}
但是直接优化上式存在一个问题,就是不同的用户可能存在相同的意图,如果直接优化,可能会把相同意图的也作为负样本,即假阴性。最终修改损失函数如下,其中F表示具有相同意图的用户集合。把这个叫做FNM,缓解假阴性。
\mathcal{L}_{\mathrm{ICL}}\left(\tilde{\mathbf{h}}_{1}^{u}, \mathbf{c}_{u}\right)=-\log \frac{\exp \left(\operatorname{sim}\left(\tilde{\mathbf{h}}_{1}^{u}, \mathbf{c}_{u}\right)\right)}{\sum_{v=1}^{N} \mathbb{1}_{v \notin \mathcal{F}} \exp \left(\operatorname{sim}\left(\tilde{\mathbf{h}}_{1}, \mathbf{c}_{v}\right)\right)}
3.2 多任务
\mathcal{L}=\mathcal{L}_{NextItem}+\lambda \mathcal{L}_{ICL}+\beta \mathcal{L}_{SeqCL}
如上式所示,最终将原始的序列损失函数,加入用户意图的ICL损失函数和序列级别的自监督损失函数来构成多任务损失函数。
4. 结果