CauseRec:Counterfactual User Sequence Synthesis for Sequential Recommendation
摘要
基于历史行为学习用户表示是现代推荐系统的核心。序列推荐的最新进展证明了从给定行为序列中提取有效用户表示的有效性。尽管在此已经取得了重大进展,但作者认为,由于用户交互记录的噪声和稀疏性质,单独对观察行为序列进行建模可能最终导致系统脆弱和不稳定。在本文中,作者提出通过对反事实数据分布建模来学习准确和鲁棒的用户表示,这需要对噪声行为(攻击)不太敏感,并且更多地信任不可或缺的行为。具体地说,给定观察到的行为序列,作者设计的CauseRec框架在细粒度项目级别和抽象兴趣级别识别可有可无和不可或缺的概念。CauseRec通过替换原始概念序列中的可有可无和不可或缺的概念,有条件地从反事实数据分布中采样用户概念序列。利用从合成的用户序列中获得的用户表示,CauseRec通过将反事实与观察结果进行对比来执行对比用户表示学习。并在现实世界的公共推荐基准上进行了大量的实验,并通过多方面模型分析证明了CauseRec的有效性。结果表明,通过学习准确和鲁棒的用户表示,所提出的CauseRec优于最先进的顺序推荐。
Challenge
- CH1:自然噪声。在现实情况中,由于存在着各种干扰因素(例如标题偏差、位置偏差、营业推广等因素)影响着用户的第一印象,会导致用户的兴趣与点击行为之间存在不一致性。
- CH2:数据稀疏性。在推荐系统中,用户通常只与有限数量的项目进行交互,而在现实系统中,项目库的数据通常是以亿为计量单位的
作者认为如果在推荐系统中,针对既稀疏又有噪声的用户行为序列进行建模,可能会得到一个准确率不高并且易碎的系统。因此需要学习准确和鲁棒的用户表示
Contributions
- 建立了反事实数据分布模型来解决数据稀疏性问题
- 设计了CauseRec框架,通过在细粒度项目级和抽象级以及各种对比目标上的反事实转换来学习准确和健壮的用户表示
Methods
反事实问题:“如果我们干预观察到的行为序列,用户表示会是什么?”
具体来说,给定观察到的行为序列,CauseRec在细粒度item-level和抽象兴趣level识别可有可无的概念。概念表示为用户兴趣的某个方面。CauseRec在item-level和兴趣level的用户概念序列上执行反事实转换。 通过修改可有可无的概念来获得反事实的positive用户表示,并通过替换不可或缺的概念来获得反事实的negative用户表示。为了学习准确和鲁棒的用户表示,通过两个方面进行对比学习:1)真实和反事实的用户表示; 2)用户表示和target item。具体来说,对比反事实即out-of-distribution的hard negatives,由于它们对可有可无的的概念不太敏感,因此可能使学习的表示变得鲁棒。对比反事实的positives ,潜在地使学习准确的表示,因为他们将更多地信任更能代表用户兴趣的不可或缺的概念。
问题形式化
数据集,N用户数,
T
u
T_u
Tu用户u的行为数:
D
=
(
x
u
,
t
,
y
u
,
t
)
u
=
1
,
2
,
…
,
N
,
t
=
1
,
2
,
…
,
T
u
D = {(x_{u,t},y_{u,t})}_{u=1,2,\dots,N,t=1,2,\dots,T_u}
D=(xu,t,yu,t)u=1,2,…,N,t=1,2,…,Tu
x
u
,
t
x_{u,t}
xu,t表示用户u点第t次点击前的行为序列:
x
u
,
t
=
y
u
,
1
:
(
t
−
1
)
x_{u,t}={y_{u,1:(t-1)}}
xu,t=yu,1:(t−1)
序列推荐的目标是在给定历史行为序列
x
u
,
t
x_{u,t}
xu,t的情况下,预测下一次点击项目
y
u
,
t
y_{u,t}
yu,t,可以表示为对多有可能的项目的概率建模:
P
(
y
u
,
t
=
y
∣
x
u
,
t
)
P(y_{u,t=y}|x_{u,t})
P(yu,t=y∣xu,t)
基础召回模型
文章回顾最基础的召回模型:
user encoder
f
θ
(
x
)
f_\theta(x)
fθ(x):输入用户的历史行为序列,输出用户表示
item encoder
g
θ
(
y
)
g_\theta(y)
gθ(y):输入项目,输出与user encoder在同一个向量空间的项目表示
θ
\theta
θ是所有可训练的参数
常见的召回模型步骤:lookup item ID获取item embedding,mean-pooling+MLP从t-1个item embedding 编码出user embedding,利用点积或余弦相似度获取matching score,倒序输出topN个item。
f
θ
(
x
)
=
M
L
P
(
1
t
−
1
∑
i
=
1
t
−
1
g
θ
(
y
i
)
)
(1)
f_\theta(x) = MLP(\frac{1}{t-1}\sum_{i = 1}^{t-1}{g_\theta(y_i)}) \tag{1}
fθ(x)=MLP(t−11i=1∑t−1gθ(yi))(1)
a
r
g
min
θ
1
∣
D
∣
∑
(
x
,
y
∈
D
)
−
l
o
g
P
θ
(
y
∣
x
)
(2)
arg\min_{\theta}\frac{1}{|D|}\sum_{(x,y\in D)}-logP_{\theta}(y|x) \tag{2}
argθmin∣D∣1(x,y∈D)∑−logPθ(y∣x)(2)
P
θ
(
y
∣
x
)
=
e
x
p
ϕ
θ
(
x
,
y
)
∑
y
′
∈
Y
e
x
p
ϕ
θ
(
x
,
y
′
)
(3)
P_{\theta}(y|x) = \frac{exp\phi_{\theta}(x,y)}{\sum_{y'\in Y}exp\phi_{\theta}(x,y')} \tag{3}
Pθ(y∣x)=∑y′∈Yexpϕθ(x,y′)expϕθ(x,y)(3)
可有可无和不可或缺概念
CauseRec主要为了回答“如果我们对观察到的行为序列进行干预,用户表示会是什么?”
CauseRec 中的反事实转换与“对观察到的行为序列的干预”有关。
为了回答“用户代表将是什么”,文章引入了一个重要的归纳偏差 inductive bias,使干预能符合预期。具体来说,首先确定历史行为序列中不可或缺/可有可无的概念。
- 一个不可或缺的概念表示一个行为序列的子集,可以共同代表用户兴趣的一个有意义的方面。
- 一个可有可无的概念表示一个嘈杂的子集,它在表示感兴趣的方面不太有意义/不重要。
给定已识别的概念,设计了反事实转换来构建 out-of-contribution 的反事实用户序列。这里出现了归纳偏差,即通过替换原始用户序列中可有可无的概念构建的反事实序列应该仍然具有与原始用户序列相似的语义。(不能换了太多,把原始行为序列表达的用户意图都改变了)这里的语义是指用户在兴趣/偏好方面的特征。因此,替换原始用户序列中不可或缺的概念应该会生成不同的用户表示。文章将这些结果的用户表示视为反事实negative的用户表示。注意到这种negative是hard negative,hard是指其他可有可无的概念与原始用户序列保持相同,negative意味着用户序列的语义应该不同。相比之下,替换原始用户序列中的可有可无的概念应该不会导致不同的用户表示。文章将这些用户表示视为反事实positive的用户表示。
反事实negative的用户表示:替换原始用户序列中不可或缺的概念应该会生成不同的用户表示
反事实positive的用户表示:替换原始用户序列中的可有可无的概念应该不会导致不同的用户表示
为了识别不可或缺/可有可无的概念,作者建议首先定义了concepts,之后根据concpest得分情况划分不可或缺/可有可无,从本质上说,concepts分数表明这些概念在多大程度上代表了用户的兴趣。
Item-level Concepts
因为每个项目都有其独特的细粒度特征,一个简单而可行的解决方案是将行为序列中的每个项目视为一个单独的概念。直观的理解就是拿序列中的项目表示依次和target item计算相似度。
首先独立编码每个用户的历史行为
C
=
X
=
g
θ
(
x
u
,
t
+
1
)
∈
R
t
×
d
\pmb{C} = \pmb{X} = g_{\theta}(x_{u,t+1})\in R^{t\times d}
C=X=gθ(xu,t+1)∈Rt×d
因为一个用户的真实兴趣没有根据,作者使用第t+1项作为指标。计算
C
\pmb{C}
C与tagert item y的相似度。
c
i
c_i
ci为
C
\pmb{C}
C中第i个概念的表示
P
i
i
t
e
m
=
ϕ
θ
(
c
i
,
y
)
(4)
P_i^{item} = \phi_\theta(c_i,y)\tag{4}
Piitem=ϕθ(ci,y)(4)
Interest-level Concepts
由于某些item可能共享相似的语义,Item-level Concepts可能会存在概念冗余的情况,并且Item-level Concepts可能会降低item之间高阶关系建模的能力。 为此,文章通过利用注意力机制来提取Interest-level Concepts。 形式上,利用
X
∈
R
t
×
d
\pmb{X}\in R^{t\times d}
X∈Rt×d得到以下注意力矩阵:
A
=
s
o
f
t
m
a
x
(
W
2
t
a
n
h
(
W
1
X
T
)
)
T
(5)
\pmb{A} = softmax(\pmb{W_2}tanh(\pmb{W_1X^T}))^T \tag{5}
A=softmax(W2tanh(W1XT))T(5)
A
∈
R
t
×
K
,
K
\pmb{A}\in R^{t\times K},K
A∈Rt×K,K是预先定义的concepts数目
由于Interest-level Concepts 和 target item 并没有落在同一个空间,通过加权和计算:
P
i
n
t
e
r
e
s
t
=
A
T
ϕ
θ
(
X
,
y
)
(6)
P^{interest} = \pmb{A}^T\phi_\theta(\pmb{X},y)\tag{6}
Pinterest=ATϕθ(X,y)(6)
并且可以通过下式可以计算出concept序列:
C
=
A
T
X
(7)
\pmb{C} = \pmb{A}^T \pmb{X}\tag{7}
C=ATX(7)
不论是Item-level Concepts 还是Interest-level Concepts,将得分最高的前一半概念视为必不可少的概念,而将其余视为可有可无的概念。 这种策略主要是为了防止必不可少或可有可无的概念数量太少。
反事实序列生成
反事实序列生成旨在通过替换原始用户序列的一部分概念来构建分布外out-of-distribution的用户序列。这里的用户序列可以是众所周知的item序列,也可以是兴趣level的概念序列。基于之前介绍的归纳偏差,建议以
r
r
e
p
r_{rep}
rrep的速率替换已识别的必不可少/可有可无的概念,以分别构建反事实的negative/positive用户序列。具体来说,文章维护了一个mini-batch大小的队列,在每个一个mini-batch的时候作为concept的缓存(包括不可或缺/可有可无两者,可以两者进行区分共用一个队列,也可以分别用一个队列),下一个mini-batch的时候就从这个队列里出队一些concepts进行替换,完成反事实序列的生成。
直接删除不可或缺/可有可无的概念似乎也是可行的,但替换具有不影响整体序列长度和概念的相对位置的优点。
user embedding生成
f
θ
(
x
)
=
M
L
P
(
1
t
−
1
∑
i
=
1
t
−
1
g
θ
(
y
i
)
)
(1)
f_\theta(x) = MLP(\frac{1}{t-1}\sum_{i = 1}^{t-1}{g_\theta(y_i)}) \tag{1}
fθ(x)=MLP(t−11i=1∑t−1gθ(yi))(1)
CauseRec-Item:利用物品粒度生成的反事实序列输入到用户编码器
f
θ
f_\theta
fθ中编码出 user embedding。
C
=
X
=
g
θ
(
x
u
,
t
+
1
)
∈
R
t
×
d
\pmb{C} = \pmb{X} = g_{\theta}(x_{u,t+1})\in R^{t\times d}
C=X=gθ(xu,t+1)∈Rt×d
CauseRec-Interest:利用兴趣粒度生成的反事实序列输入到用户编码器
f
θ
f_\theta
fθ中编码出 user embedding
C
=
A
T
X
\pmb{C} = \pmb{A}^T \pmb{X}
C=ATX
CauseRec-H(ierarchical):利用物品粒度生成的反事实示例,结合concepts score的提取过程,得到兴趣行为序列再输入到用户编码器
f
θ
f_\theta
fθ中获得user embedding。作者强调,这里不会进行concepts score计算。如果再做替换,会引入噪声。concepts score是在物品粒度计算好的情况下,替换也是在物品粒度发生的,只是在兴趣粒度汇总,也就是经历一次一个attention和一次变换
A
=
s
o
f
t
m
a
x
(
W
2
t
a
n
h
(
W
1
X
T
)
)
T
\pmb{A} = softmax(\pmb{W_2}tanh(\pmb{W_1X^T}))^T
A=softmax(W2tanh(W1XT))T
C
=
A
T
X
\pmb{C} = \pmb{A}^T \pmb{X}
C=ATX
对比学习
经过反事实变换得到的反事实positive/negative行为序列分别记作
{
x
+
,
m
}
m
=
1
,
…
,
M
\{x^{+,m}\}_{m=1,\dots,M}
{x+,m}m=1,…,M,
{
x
−
,
n
}
n
=
1
,
…
,
N
\{x^{-,n}\}_{n=1,\dots,N}
{x−,n}n=1,…,N
反事实negative的用户表示:替换原始用户序列中不可或缺的概念应该会生成不同的用户表示
反事实positive的用户表示:替换原始用户序列中的可有可无的概念应该不会导致不同的用户表示
除了最大化似然概率的目标函数外,文章引入几个对比学习的目标函数来学习更精确的更鲁棒的用户表示
反事实和真实序列的对比
一个健壮的用户表示应该对序列中可有可无的概念不那么敏感。因此,从反事实序列中学习到的具有不可或缺的概念转换的用户表示应该远离原始用户表示。
一个准确的用户表示应该更多地信任不可或缺的概念。因此,从反事实序列中学习的具有可有可无的概念转换的用户表示应该直观地更接近原始用户表示。
文章使用三元组边际损失来衡量样本之间的相对相似性:
L
c
o
=
∑
m
=
1
M
∑
n
=
1
N
max
{
d
(
x
q
,
x
+
,
m
)
−
d
(
x
q
,
x
−
,
n
)
+
Δ
c
o
,
0
}
(8)
\mathcal{L}_{c o}=\sum_{m=1}^{M} \sum_{n=1}^{N} \max \left\{d\left(\mathbf{x}^{q}, \mathbf{x}^{+, m}\right)-d\left(\mathbf{x}^{q}, \mathbf{x}^{-, n}\right)+\Delta_{\mathrm{co}}, 0\right\}\tag{8}
Lco=m=1∑Mn=1∑Nmax{d(xq,x+,m)−d(xq,x−,n)+Δco,0}(8)
x
q
x^q
xq表示原始用户表示,
x
+
,
m
x^{+,m}
x+,m表示positive对应的用户表示,
x
−
,
n
x^{-,n}
x−,n表示negative对应的用户表示,文章将距离函数d设置为L2距离。这是因为由相同用户编码器生成的用户表示在相同的嵌入空间中。凭经验设置裕量
Δ
c
o
\Delta_{\mathrm{co}}
Δco = 1
target item与行为序列的对比
作者利用L2-归一化之后的target item表示 y ~ \tilde{y} y~和用用户表示 x ~ \tilde{x} x~,利用下式防止学到的反事实用户序列的用户表示太琐碎:
L i i = ∑ m = 1 M 1 − x ~ + , m ⋅ y ~ + ∑ n = 1 N max ( 0 , x ~ − , n ⋅ y ~ − Δ i i ) (9) \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)\tag{9} Lii=m=1∑M1−x~+,m⋅y~+n=1∑Nmax(0,x~−,n⋅y~−Δii)(9)
作者设置 Δ i i \Delta_{\mathrm{ii}} Δii = 0.5,上式的意思是, x ~ + , m \tilde{x}^{+,m} x~+,m是pos的反事实用户表示,用它计算的matching score 应该越接近1越好; x ~ − , n \tilde{x}^{-,n} x~−,n是neg的反事实用户表示,用它计算的matching score 应该越小越好(只要不大于0.5就行)。
最终整个系统的损失函数为:
L
c
a
u
s
e
=
L
m
a
t
c
h
i
n
g
+
λ
1
L
c
o
+
λ
2
L
i
i
\mathcal{L}_{cause} = \mathcal{L}_{matching} + \lambda_1\mathcal{L}_{\mathrm{co}}+\lambda_2\mathcal{L}_{\mathrm{ii}}
Lcause=Lmatching+λ1Lco+λ2Lii
总结
\mathcal{L}{matching} + \lambda_1\mathcal{L}{\mathrm{co}}+\lambda_2\mathcal{L}_{\mathrm{ii}}$$
总结
作者提出不可或缺/可有可无的概念来替换原始序列生成反事实序列的想法很好,但我认为替换策略太过简单,并不能体现反事实的原理。反事实的原理是:当某件事情A发生了,对应产生了结果B,而此时A如果不发生,对应的结果B的情况就称为反事实。其实可以发现作者的反事实序列本身有点牵强。但是通过设计出符合客观事实的数据集来丰富原始数据减少数据稀疏性问题,这是一个很好的点,也有许多人在做类似的尝试。另外作者也提出了两个对比学习,可以借鉴。