关注我们,一起学习~
标题:Explanation Guided Contrastive Learning for Sequential Recommendation
地址:https://arxiv.org/pdf/2209.01347.pdf
代码:https://github.com/demoleiwang/EC4SRec
会议:CIKM 2022
公司:Salesforce
1. 导读
对比学习 被广泛的应用于序列推荐 ,以解决交互数据稀疏的问题,但现有的基于对比学习的方法无法确保通过对给定锚用户序列的一些随机增强(或序列采样)获得的正(或负)序列在语义上保持相似(或不同)。当正负序列分别为假阳性和假阴性 时,可能会导致推荐性能下降。本文通过提出解释引导增强(EGA)和解释引导对比学习序列推荐(EC4SRec)模型框架来解决上述问题。EGA 的关键思想是利用解释方法来确定商品在用户序列中的重要性,并相应地推导出正负序列 。然后,EC4SRec 在 EGA 操作生成的正负序列上结合自监督和监督对比学习,以改进序列表征学习以获得更准确的推荐结果。
2. 基础
2.1 问题定义 令U,V分别为用户和商品集合。用户序列表示为
S_u=[v_1^u,...,v_{|S_u|}^u] 。序列推荐的目标是通过已知的交互序列预测用户下一时刻可能交互的商品
v_{*}^{u}=arg max _{v in mathcal{V}} Pleft(v_{left|s_{u}right| 1}^{u}=v mid s_{u}right)
2.2 序列推荐中的对比学习 主要介绍对比学习中的基础的数据增强方法,论文中还介绍了推荐学习推荐系统的具体例子DuoRec,CL4Rec,可以前往论文阅读。数据增强方法如下,
随机裁剪 ,即随机从原交互序列中删除一部分连续的交互序列。
随机掩码(mask) ,对交互序列,随机掩码一定比例的交互商品,利用一个掩码商品[m]代替那些需要掩码的商品。
随机重排 ,从序列中随机选取一个连续子序列,然后随机打乱它,再放回去。
随机检索 ,从与当前序列有相同目标商品的序列集合中随机选一个。
3. 方法
3.1 框架 如图 2 所示为所提框架,序列编码器用于将给定用户的历史商品序列表示为向量表征
h_u ,然后进行匹配预测下一个交互的商品。
与现有的序列推荐对比学习方法不同,EC4SRec 在一定轮次利用解释方法来确定用户序列,其中下一个商品由序列编码器和预测器返回。解释引导增强将利用商品重要性分数来生成用户序列的正视图和负视图,以进一步训练序列编码器和商品预测器。图 2 右侧显示了不同的损失函数和推荐损失函数,用于在不同的解释引导对比学习方法下训练模型。
更新商品重要性分数的解释方法的方案,也称为update schedule,由超参数 p 控制。对于总共有 N 轮次的模型训练,将更新安排在轮次
l cdot lfloor frac{N}{p 1}rfloor, 1leq l leq p 。例如,对于p = 3 和 N = 100,更新将安排在第 25、50 和 75 轮次。第一次更新之前的轮次(即例子中的25步之前),EC4SRec 可以采用任何好的序列推荐模型来训练初始序列编码器和项目预测器。
3.2 解释引导的重要性分数 为了获得序列中每个商品的解释引导的重要性分数,将用户序列,序列编码器SeqRec,以及对下一个商品的预测概率输入到模型无关的解释方法Expl(),Expl()计算得出重要性分数,表示为下式,
score(s_u)=Expl(y_u,s_u,SeqRec)
score(s_u)=[score(v_1^u),...,score(v_{|S_u|}^u)]
虽然任何解释方法(例如,显着性、遮挡和积分梯度)都可以用作Expl(),但这里使用显着性(Saliency)来说明每个商品的重要性得分是如何得出的。假设有一个商品embedding矩阵
Ein mathbb{R}^{|V| times d} 。商品
v_i^u 的embedding向量
e_{v_i^u} 可以从 E 得到。
e_{v_i^u} 的维度 j 的重要性分数可以定义为:
operatorname{score}left(e_{v_{i, j}^{u}}right)=left|frac{partial y_{u}}{partial e_{v_{i, j}^{u}}}right| 对d维内的分数求和再做一下标准化就可以得到下式,
operatorname{score}left(v_{i}^{u}right)=frac{sum_{j=1}^{d} operatorname{score}left(e_{v_{i, j}^{u}}right)}{sum_{i^{prime}=1}^{left|s_{u}right|} sum_{j=1}^{d} operatorname{score}left(e_{v_{i^{prime}, j}^{u}}right)} .
3.3 解释引导的数据增强 本节提出了五种解释引导的增强操作,三种用于生成正视图,两种用于生成负驶入。
正视图和负视图的解释引导裁剪(ecrop ,ecrop-) ,为了在
s_u 上执行ecrop (或ecrop−),选择重要性得分最低(或最高)的k(或
|s_u|-k )商品被删除以生成正(或负)视图。
**解释引导的掩码得到正负视图(emask , emask-)**,为了对
s_u 执行emask ,选择重要性分数最低的k个商品进行屏蔽。
**解释引导的重排得到正视图(erord )**,对序列中得分最低的k个商品重新排序,再插入到原序列中。
**解释引导的检索得到正视图(ertrl )**,类似于前面的随机检索,先用随机检索选出一个序列,然后利用每个序列的重要性分数计算每个序列的概率,公式如下,
begin{array}{c}
Pleft(s_{u_{k}}right)=frac{operatorname{util}left(s_{u_{k}}right)}{sum_{s_{u_{j}} in S_{u}^{c}} u operatorname{til}left(s_{u_{j}}right)} \
operatorname{util}left(s_{u_{k}}right)=frac{left|s_{u} cap s_{u_{k}}right|}{left|s_{u} cup s_{u_{k}}right|} sum_{v in s_{u} cap s_{u_{k}}} operatorname{score}(v)
end{array} 然后,使用概率分布对来自序列集合的解释引导检索序列进行采样。
3.4 解释引导的对比学习 3.4.1 解释引导的自监督学习 该模型可以看作是 CL4SRec 的扩展,其解释引导的增强操作为对比学习生成了正视图和负视图。损失函数由三个部分组成:(i)推荐损失,(ii)解释引导的正视图的对比损失,以及(iii)解释引导的负视图的对比损失:
mathcal{L}_{E C 4 S operatorname{Rec}(S S L)}=sum_{u in U_{B}} mathcal{L}_{r e c}left(s_{u}right) lambda_{c l }left(mathcal{L}_{c l }left(s_{u}right) lambda_{c l-} mathcal{L}_{c l-}left(s_{u}right)right)
mathcal{L}_{r e c}left(s_{u}right)=-log frac{exp left(operatorname{sim}left(h_{u}, h_{v_{*}^{u}}right)right)}{exp left(operatorname{sim}left(h_{u}, h_{v_{*}^{u}}right)right) sum_{v^{-} in V^{-}} exp left(operatorname{sim}left(h_{u}, h_{v^{-}}right)right)}
A^ ={a_{ecrop },a_{emask },a_{erord }} 和
A^-={a_{ecrop-},a_{emask-}} 。为了计算
L_{cl }(s_u) ,从A 中采样得到
a_i 和
a_j (
a_i neq a_j )然后应用于
s_u ,得到两个正视图
s_u^{a_i} 和
s_u^{a_j} 。重复这一操作应用于其他所有用户和序列生成正视图,用户u的正视图集合表示为
S_u^ ={s_u^{a_i}, s_{u}^{a_j}} 。为了让
s_u^{a_i} 和
s_u^{a_j} 的表征彼此相近,和其他用户的表征疏远,损失函数定义为下式,
mathcal{L}_{c l }left(s_{u}right)=-log frac{exp left(operatorname{sim}left(h_{u}^{a_{i}}, h_{u}^{a_{j}}right)right)}{exp left(operatorname{sim}left(h_{u}^{a_{i}}, h_{u}^{a_{j}}right)right) sum_{u_{u^{prime}}^{a} in S^{ }-S_{u}^{ }} exp left(operatorname{sim}left(h_{u}^{a_{i}}, h_{u^{prime}}^{a}right)right)}
同理可以得到
S_u^- ,对于用户的负视图,希望其与其他用户的负视图相近,和所有用户的正视图疏远,
S^- 表示对所有用户重复上述操作后的负视图集。损失函数如下,h为序列表征
mathcal{L}_{c l-}left(s_{u}right)=-frac{1}{left|S^{-}right|-1} sum_{s_{u^{prime}}^{a} in S^{-}-left{s_{u}^{a-}right}} log frac{exp left(operatorname{sim}left(h_{u}^{a-}, h_{u^{prime}}^{a}right)right)}{sum_{s in S^{ } cupleft{s_{u^{prime}}^{a}right}} exp left(operatorname{sim}left(h_{u}^{a-}, hright)right)}
3.4.2 解释引导的监督对比学习 该模型扩展了 DuoRec 以使用解释引导增强。损失函数为下式,
h_u^{ertrl } 是通过ertrl 增强的序列的表征。
mathcal{L}_{E C 4 S operatorname{Rec}(S L)}=sum_{u in U_{B}} mathcal{L}_{r e c}left(s_{u}right) lambda mathcal{L}_{s l }left(s_{u}right)
begin{array}{l}
mathcal{L}_{s l }left(s_{u}right)= \
quad-left(log frac{exp left(operatorname{sim}left(h_{u}, h_{u}^{e r t r l }right) / tauright)}{exp left(operatorname{sim}left(h_{u}, h_{u}^{e r t r l }right) / tauright) sum_{s^{-} in S_{u}^{-}} exp left(operatorname{sim}left(h_{u}, h^{-}right) / tauright)} right. \
left.quad log frac{exp left(operatorname{sim}left(h_{u}^{e r t r l }, h_{u}right) / tauright)}{exp left(operatorname{sim}left(h_{u}^{e r t r l }, h_{u}right) / tauright) sum_{s^{-} in S_{u}^{-}} exp left(operatorname{sim}left(h_{u}^{e r t r l }, h^{-}right) / tauright)}right)
end{array} 3.4.3 结合 将上面两部分结合可得到最终的损失函数
begin{array}{l}
mathcal{L}_{text {EC4SRec }}= \
quad sum_{u in U_{B}} mathcal{L}_{r e c}left(s_{u}right) lambda_{c l } mathcal{L}_{c l }left(s_{u}right) lambda_{c l-} mathcal{L}_{c l-}left(s_{u}right) lambda_{s l } mathcal{L}_{s l }left(s_{u}right)
end{array}
4. 结果