SIGIR'21 因果推断+序列推荐:反事实数据促进鲁棒用户表征生成

2022-09-19 11:30:53 浏览数 (2)

CauseRec: Counterfactual User Sequence Synthesis for Sequential Recommendation https://dl.acm.org/doi/pdf/10.1145/3404835.3462908

‍‍‍‍1. 背景

本文主要针对的是如何从用户历史行为序列中学习到更鲁棒更有效的表征。用户历史行为序列中是存在噪声的,并且序列本身是稀疏的,因此本文针对现存的问题,提出CauseRec方法通过对反事实数据分布进行建模,更多地信任不可或缺的行为从而提高鲁棒性。给定行为序列,CauseRec识别可有可无的概念和不可或缺的概念,CauseRec 通过替换原始序列中的可有可无和不可或缺的概念,有条件地从反事实数据分布中采样用户概念序列。

2. 方法

2.1 问题定义

数据集表示为

mathcal{D}={(x_{u,t},y_{u,t})}_{u=1,2,...,N,t=1,2,...,T_u}

,其中

x_{u,t}={y_{u,1:(t-1)}}

表示用户在

y_{u,t}

商品之前的历史行为数据,按时间排序。

item的embedding函数定义为

g_{theta}(cdot)

,聚合行为序列中的embedding得到用户表征的函数为

f_{theta}(cdot)

文中会涉及到concept的概念,这里笔者直接翻译为了“概念”,可以直接理解为经过函数转换后得到的embedding,不用太过纠结其含义。

2.2 CauseRec框架

image.png

2.2.1 总体方案

从文章标题我们可以知道本文是利用反事实推断的方法来操作的,因此CauseRec的本质是要回答这样一个问题“如果我们干预观察到的序列,用户表示会是什么”。首先确定历史行为序列中不可或缺/可有可无的概念。一个不可或缺的概念表示一个行为序列的子集,可以共同代表用户兴趣的一个有意义的方面。一个可有可无的概念表示一个噪声的子集,它在表示感兴趣的方面没有多大意义。对于可有可无的这些内容,替换成别的内容得到反事实序列后,该序列应与原序列具有相似语义,即和原序列一样能反映相似的用户偏好(这部分为正样本);相反的,如果替换了不可或缺的内容,那么反事实序列应该和原序列反映的用户偏好存在偏差(负样本)

2.2.2 识别可有可无/不可或缺的概念

item-level concepts

对于序列行为,可以得到概念序列

C=X in mathbb{R}^{ttimes d}

,其中

X=g_{theta}(x_{u,t 1})

。概念分数表示概念对于用户兴趣的重要性。计算方式如下,其中ci表示序列中第i个商品的概念(concept),y表示目标商品的表征,

phi

是相似度函数,本文采用点积。

p_{i}^{i t e m}=phi_{theta}left(mathbf{c}_{i}, mathbf{y}right)
interest-level concepts

上述解决方案可能会导致概念冗余,因为某些项目可能共享相似的语义,并且可能会降低项目之间的高阶关系建模能力。利用注意力机制计算兴趣级别的概念,计算方式如下,利用注意力机制得到权重,并与原始X加权后得到概念(concept),最后在采用与目标商品表征的相似度求解得到兴趣级别的概念分数。

mathbf{A}=operatorname{softmax}left(mathbf{W}_{2} tanh left(mathbf{W}_{1} mathbf{X}^{top}right)right)^{top}
mathrm{C}=mathrm{A}^{top} mathrm{X}
P^{text {interest }}=mathbf{A}^{top} phi_{theta}(mathbf{X}, mathbf{y})

对于上述两种方式,所有分数中,得分最高的前半部分作为不可或缺的概念,后半部分作为可有可无的概念。

2.2.3 反事实变换

上述我们已经得到了序列中不同商品的重要性分数,现在就需要利用这个分数来构造相应的序列了。在原始序列中,以

r_{rep}

的概率替换其中可有可无/不可或缺的概念,然后构造相应的反事实正负例。维持一个先进先出的队列,作为概念的记忆,使用出列的概念用作替换。从当前mini-batch中提取的概念加入到队列中,然后出队的概念替换其中的可有可无或不可或缺的概念。

2.2.4 目标函数

观察与反事实序列之间的对比

正如在总体方案中所说的,我们想要得到一个更加鲁棒的用户表征就需要使得表征更加依赖于那些不可或缺的概念。因此,从具有可有可无的概念转换的反事实序列中学习的用户表示应该直观地拉近原始用户表示。本文采用triplet loss来约束,公式如下,

x^q

表示原始表征,

x^{ ,m}

表示正样本,

x^{-,n}

表示负样本,

Delta_{co}

表示margin,文中设置为1,d()函数表示L2距离。

mathcal{L}_{c o}=sum_{m=1}^{M} sum_{n=1}^{N} max left{dleft(mathbf{x}^{q}, mathbf{x}^{ , m}right)-dleft(mathbf{x}^{q}, mathbf{x}^{-, n}right) Delta_{mathrm{co}}, 0right}
兴趣与商品之间的对比

上述损失函数只考虑了用户表征,这里进一步考虑目标商品来促进表征。对于用L2标准化后的目标商品表征

tilde{y}

和用户表征

tilde{x}

构建以下损失函数,其含义是希望正样本可以和原始样本反映同样的偏好,即点积或者其他反馈;而负样本则应该存在偏差

Delta_{ii}

,本文设置为0.5。

mathcal{L}_{i i}=sum_{m=1}^{M} 1-tilde{mathbf{x}}^{ , m} cdot tilde{mathbf{y}} sum_{n=1}^{N} max left(0, tilde{mathbf{x}}^{-, n} cdot tilde{mathbf{y}}-Delta_{mathrm{ii}}right)
总损失函数
mathcal{L}_{text {cause }}=mathcal{L}_{text {matching }} lambda_{1} mathcal{L}_{text {co }} lambda_{2} mathcal{L}_{i i}

其中

mathcal{L}_{matching}

表示原始的匹配损失,即

arg min _{theta} frac{1}{|mathcal{D}|} sum_{(x, y) in mathcal{D}}-log p_{theta}(y mid x)

3. 实验结果

image.png

4. 总结

本文主要是针对如何通过用户行为序列生成更加鲁棒的用户表征。用户的行为序列是稀疏且存在噪声的,作者通过因果推断中反事实的概念,去修改原始序列中重要的部分和不重要的部分(这两部分通过item-level和interest-level concept来得到重要性)。修改不重要的部分得到的序列应与原始序列表达语义类似,而修改重要部分得到的序列应与原始序列存在偏差,修改后得到的反事实序列可以分为正负样本对,从而构建triplet loss来约束相似度。

0 人点赞