介绍
传统的搜索引擎采用一刀切的策略。它们对任何用户的查询都使用相同的排名函数。众所周知,该策略无法满足同一查询背后用户的不同搜索信息需求(比如apple fruit 和 apple phone)。现有的个性化搜索方法大多从用户的搜索历史中提取点击和局部特征,并根据查询结果和诱导的用户兴趣计算文档相关性。但是,这些功能通常是手动设计的。很难期望这些特性完全涵盖了重要因素。深度学习模型不需要人工设计和提取,就可以从训练数据中自动学习文档的表示、用户配置文件和其他相关特征。它们还可以涵盖更广泛的功能。
然而,对于深度学习方法来说,训练数据是一个关键问题,它涉及大量的参数,需要大量的训练数据。这对于个性化搜索来说是一个非常具有挑战性的问题,因为个性化模型严重依赖于用户的个人数据,而特定用户的搜索历史总是有限的。每次搜索只有几次点击。此外,可用的数据是噪声。例如,如果用户点击了一个搜索结果而不是另一个搜索结果,通常认为前者比后者更可取,这可能并不总是正确的。这是因为用户可以只点击一些相关文档,也可以点击不相关的文档。盲目使用所有这些数据可能会导致错误的用户配置文件。在这种情况下,选择能带来最有用信息的适当培训数据是很重要的。
本文方法基于GAN,其中包含一个生成器和一个鉴别器。通过对抗训练的minimax博弈,generator试图生成高质量的反例来迷惑鉴别器,而鉴别器则为生成器提供reward,以帮助生成器调整数据分布。然而,由于文本数据的离散性,不可能生成一个作为负样本的自由文本向量。
为什么GAN不适合处理离散数据?https://blog.csdn.net/qq_29997655/article/details/82711333
Idea
本文设计了一个通用的个性化搜索框架PSGAN。两个模型:
- 第一种方法让生成器根据当前查询的相关性分布和用户兴趣直接从候选文档中选择一个负样本。称之为基于文档选择的个性化搜索GAN模型。
- 第二种方法首先生成与用户意图(通过历史信息)和当前查询一致的相关查询,然后通过生成的查询计算文档的相关性。我们希望通过生成的查询可以更好地估计文档的相关性,因为信息丰富。称之为基于查询生成个性化搜索GAN模型。
PSGAN
Problem Formulation
表1列出了本文中使用的符号。假设给定一组查询
Q
Q
Q,每个查询
q
q
q
∈
∈
∈
Q
Q
Q由用户
u
u
u发出。用
U
U
U来表示当前查询
q
q
q之前
U
U
U的所有历史搜索行为(搜索sessions)。我们根据时间将
U
U
U中的sessinos分为两部分:过去的session
L
u
L_u
Lu和当前会话
S
M
S_M
SM,即
U
U
U=
L
u
L_u
Lu∪{
S
M
S_M
SM}。我们有
L
u
L_u
Lu={
S
1
S_1
S1,····,
S
i
S_i
Si,···,
S
S
S
M
_M
M
−
_−
−
1
_1
1},其中
M
M
M是与
u
u
u相关联的session数目。每个session
S
i
S_i
Si由一系列查询组成,每个查询包括一个查询字符串和搜索引擎返回的文档列表。例如,如果第
i
i
i个session中有
n
n
n个查询,那么
S
i
S_i
Si={(
q
q
q
i
^i
i
1
_1
1,
D
D
D
i
^i
i
1
_1
1),…,(
q
q
q
i
^i
i
j
_j
j,
D
D
D
i
^i
i
j
_j
j),…,(
q
q
q
i
^i
i
n
_n
n,
D
D
D
i
^i
i
n
_n
n)。
S
M
S_M
SM包括在同一session中在
q
q
q之前发出的查询。在不引起歧义的情况下,本文的其余部分省略了符号的上标和下标。用
d
d
d来表示用户
u
u
u发出的查询
q
q
q的结果中的文档,其历史搜索数据用
U
U
U表示
discriminator
尝试学习 U U U、 q q q和 d d d之间的相关分布 f f f ϕ ϕ ϕ( d d d, q q q, U U U),从相关文档中采样的数据被视为正示例,生成器生成的数据被视为负示例。
generator
尝试学习一个分布 p θ p_θ pθ( d d d | q q q, U U U, r r r)逼近 p p p t _t t r _r r u _u u e _e e( d d d | q q q, U U U, r r r),并根据学习的 p θ p_θ pθ生成反例来迷惑鉴别器。
PSGAN - the Framework
PSGAN中的minimax博弈可以描述为:给定一个用户发布的查询,generator试图生成一个看起来符合用户意图的(否定)文档,并欺骗鉴别器;而鉴别器则试图在相关文档和generator生成的否定文档样本之间进行清晰的区分。形式上,给定一组查询Q,有:
discriminator指定为:
注意,与IRGAN不同,PSGAN有一个额外的组件U,用于建模用户概要文件。
Optimizing Discriminator.
将上述学习形式转化为成对训练:
d
+
d_+
d+为真实分布的采样,
d
θ
d_θ
dθ是generator的生成分布的采样。不改变优化目标的情况下,可以写成:
为了迫使鉴别器更加注意那些难以区分的文档,为每个文档对分配一个权重。权重越大,表示negative文档越接近相关文档。所以应该引起更多的关注。根据生成模型产生的生成概率,用
r
θ
r_θ
rθ加权(
d
+
d_+
d+,
d
θ
d_θ
dθ):
其中
r
θ
r_θ
rθ(
d
+
d_+
d+,
d
θ
d_θ
dθ)=
p
θ
p_θ
pθ(
d
θ
d_θ
dθ|
q
q
q,
U
U
U,
r
r
r)
−
−
−
p
θ
p_θ
pθ(
d
+
d_+
d+|
q
q
q,
U
U
U,
r
r
r)
+
+
+
1
1
1,当
p
θ
p_θ
pθ(
d
θ
d_θ
dθ|
q
q
q,
U
U
U,
r
r
r)为1,其他文档为0时,
r
θ
r_θ
rθ(
d
+
d_+
d+,
d
θ
d_θ
dθ)得分最高为2.0。在这种情况下,
d
θ
d_θ
dθ极难区分。当两个文档的概率相等且难以区分时,
r
θ
r_θ
rθ(
d
+
d_+
d+,
d
θ
d_θ
dθ)取1。
Optimizing Generator.
在实践中,由于文本数据的离散性,很难生成文本数据。根据IRGAN,从候选文档集
D
D
D中选择高质量的文档来生成负示例
D
′
D^′
D′,形式上,生成模型的梯度为( policy gradient):
然后,根据概率
θ
θ
θ选择一个文档。文档的权重设置为
r
θ
r_θ
rθ=
r
θ
r_θ
rθ(
d
+
d_+
d+,
d
θ
d_θ
dθ)。feedback组件
由Discriminator给予的作为对Generator的reward。
两个模型
1.Document Selection based Model
The Discriminator
Discriminator和Generator结构一致:
Discriminator试图估计给定当前查询
q
q
q和用户数据
U
U
U的个性化文档相关性,即
f
ϕ
f_ϕ
fϕ(
d
d
d)=score(
d
d
d |
q
q
q,
S
M
S_M
SM,
S
S
S
M
_M
M
−
_−
−
1
_1
1,…,
S
1
S_1
S1)。在这个模型中,把相关性进一步分为三个部分:文档与查询的相关性、与用户长期概要文件的相关性和与短期概要文件的相关性。即:
其中score
ϕ
_ϕ
ϕ(
d
d
d |
q
q
q)反映了文档和当前查询之间的即席相关性,score
ϕ
_ϕ
ϕ(
d
d
d |
S
M
S_M
SM)表示文档在短期用户配置文件方面的个性化相关性,score
ϕ
_ϕ
ϕ(
d
d
d |
L
u
L_u
Lu)是文档和长期用户配置文件之间的相关性。
F
F
F是稠密层,用于将三个分数合并,并输出最终的个性化关联得分。
长短期用户配置提取遵循HRNN,它使用层次化的RNN模型和注意力机制来构建长期和短期的用户配置文件。然而,**HRNN只将用户的历史查询和满意的点击作为历史数据,而忽略了无关的文档**。请注意,将停留时间超过30秒的点击或是会话中最后一次点击的点击视为满意的点击,而将满足点击上方的被跳过文档集合和未点击的下一个文档视为无关文档。通过考虑那些不相关的文档来改进模型。定义为HRNN+。模型的结构如图1所示。
- 对于score
ϕ
_ϕ
ϕ(
d
d
d |
q
q
q),遵循SLTB的方法并提取文档的原始排名、查询点击熵和其他局部特征作为关联特征
r
r
r
q
_q
q
,
_,
,
d
_d
d,
F
q
F_q
Fq时dense layer
- 对于score
ϕ
_ϕ
ϕ(
d
d
d,
S
m
S_m
Sm),session
S
M
S_M
SM中的每个查询,通过将相关文档的平均向量和不相关文档的平均向量作为输入,输入到RNN层来生成向量,即,我们具有
x
i
x_i
xi=[
q
i
q_i
qi,
v
v
v
d
+
_d^+
d+
i
_i
i,
v
v
v
d
−
_d^-
d−
i
_i
i ],其中
x
i
x_i
xi是session中的第
i
i
i个步骤的输入,
q
i
q_i
qi是查询字符串的向量.
v
v
v
d
+
_d^+
d+
i
_i
i是相关文档的平均向量,
v
v
v
d
−
_d^-
d−
i
_i
i 是不相关文档的平均向量。对于
q
q
q前有
n
n
n个查询的session
S
M
S_M
SM ,最后一步输出是session的编码,取用户的短期profile,即
h
h
h
1
^1
1
M
_M
M=RNN(
h
h
h
1
^1
1
M
_M
M
,
_,
,
n
_n
n
−
_−
−
1
_1
1,
x
n
x_n
xn),则文档
d
d
d对用户短期兴趣的关联度得分为:
- 对于score
ϕ
_ϕ
ϕ(
d
d
d |
L
u
L_u
Lu),使用第一层历史session的输出编码作为第二层RNN的输入,即
h
h
h
2
^2
2
i
_i
i=RNN(
h
h
h
2
^2
2
i
_i
i
−
_−
−
1
_1
1,
h
h
h
1
^1
1
i
_i
i)(上标“2”表示第二层)。与HRNN类似,使用一种注意力机制来加权历史session,以建立长期档案:
其中
e
i
e_i
ei=
u
u
u
T
^T
T
i
_i
i
u
d
u_d
ud。
u
i
u_i
ui=tanh(
F
d
F_d
Fd(
q
q
q,
h
h
h
2
^2
2
i
_i
i))是表示
q
q
q和session
S
i
S_i
Si之间匹配程度的向量。
u
d
u_d
ud是当前session的文档向量。然后用
计算动态长期用户profile,
HRNN+根据
f
ϕ
f_ϕ
fϕ(
d
d
d)计算文档的相关性,并根据相关性对文档进行排序。在基于文档选择的模型中,直接使用
f
ϕ
f_ϕ
fϕ(
d
d
d)作为判别函数。HRNN+与基于文档选择的模型的区别在于,HRNN+只使用历史点击信息进行训练,并且一次性计算
f
ϕ
f_ϕ
fϕ(
d
d
d)并输出排名列表。而在基于文档选择的模型中,
f
ϕ
f_ϕ
fϕ(
d
d
d)被训练在多个epochs,并且在每个epoch中,训练数据将由生成器更新。
The Generator
生成器的目标是从候选文档集中选择一个与相关文档类似的negative文档,使用类似的模型作为Discriminator。具体地说,生成器函数
g
θ
g_θ
gθ定义如下:
式(1)中定义的分量
p
θ
p_θ
pθ由以下公式定义:
2.Query Generation based Model
由于用户的意图很可能偏离当前的查询,为了使文档的分布更符合用户的真实意图,提出了第二种方法,即基于查询生成的模型。使用与基于文档选择的模型相同的方法,训练Discriminator,学习查询、文档和用户配置文件之间的关联关系。
但是对于 Generator,为了更好地估计用户的真实意图,首先通过分析用户的历史搜索日志生成更符合用户当前意图的查询。然后使用Generator通过生成的查询判断文档的相关性,从而根据用户的真实意图更好地估计文档的分布情况。生成查询的模型将搜索日志中的下一个查询作为目标查询,并通过最小化生成查询与目标查询之间概率的交叉熵来训练模型。不同于以往的训练方法,PSGAN通过Discriminator的反馈训练 Generator以适应相关查询的分布。
The Generator
如果生成
k
k
k个查询,可以使用softmax函数计算每个查询的生成概率。更具体地说,对于每个生成的查询q′,有:
g
θ
g_θ
gθ是Generator的函数,
p
θ
p_θ
pθ是Generator计算的概率分布。
同时,通过Discriminator给出的函数,可以计算出每个生成查询下文档的概率分布。有:
文档的概率分布
p
θ
p_θ
pθ定义为:
在这种情况下,生成模型的梯度变为:
可以看出,优化生成器θ的参数相当于使生成的查询更符合用户的真实意图。
Query Generation
使用两个编码器对历史信息进行编码,使用一个解码器来生成查询。由于在某些情况下,用户的查询意图可以从用户的历史查询中推断出来,因此首先使用一个长期编码器来处理过去会话中的历史信息。由于用户在一个session中的查询意图往往是一致的,为了准确地描述用户的session意图,使用一个短期编码器来处理当前会话中的历史查询。模型如图2所示。
- 对于长期编码器,使用RNN将过去session中的历史查询序列{ q 1 q_1 q1,…, q i q_i qi,… q m q_m qm}作为输入(假设在 L u L_u Lu中共有 m m m个查询)。对于输入的新查询 q i q_i qi,有 h i h_i hi=RNN( h h h i _i i − _− − 1 _1 1, q i q_i qi)。
- 由于一个session中有多个查询,为了更细粒度地描述,使用层次结构对当前的搜索意图进行编码。同时考虑查询内部术语之间的关系和查询之间的关系。对于短期编码器,再次假设当前session中在
q
q
q之前有n个查询。首先使用双向RNN将每个查询字词编码为第一层,然后使用另一个RNN编码第一层的输出作为第二层。具体地说,对于第一层有:
对于第一层的输出 q q q,假设 L i L_i Li是查询字符串 q i q_i qi中包含的词数目,有:
类似地,对于第二层,第i个查询的表示由
- 对于解码器,使用短期编码器的最后一个输出,通过
初始化状态。进一步在两个编码器上为解码器添加了一个注意机制。
具体地说,对于长期编码器中的第 i i i个查询,相关注意是
其中 u i u_i ui是 u u u L ^L L t _t t , _, , i _i i=tanh( F m F_m Fm( s s s t _t t − _− − 1 _1 1, h i h_i hi))的缩写形式。
( u u u T ^T T i _i i u m u_m um)用于测量解码器的前一状态 s s s t _t t − _− − 1 _1 1与第 i i i个查询的编码 h i h_i hi之间的相关性。
最后,下一项的隐藏态是
类似地,由短期编码器加权的下一项的隐藏状态是
我们连接
h
h
h
L
^L
L
t
_t
t和
h
h
h
S
^S
S
H
^H
H
t
_t
t作为解码器选择下一个术语的最终上下文向量:
对于解码器的每个步骤,生成概率计算为:
最后,对于生成的查询:
由
k
k
k个单词组成,其产生概率估计如下:
式(10)中的
g
g
g
θ
_θ
θ(
q
q
q
′
′
′,
q
q
q,
U
U
U)可用于计算
p
θ
p_θ
pθ(
q
q
q
′
′
′|
q
q
q,
U
U
U),公式(11)中用于估算
p
θ
p_θ
pθ并训练发电机。
Query Candidate Selection
上面的模型假设根据用户以前的搜索历史生成查询。但是,如果直接生成查询,我们会发现一些困难。
- 首先,如果查询从未出现在搜索日志中,则查询与文档之间的某些关联特征(如点击信息)将不可用,因此生成的查询对最终排名的影响很难评估。
- 由于单词词典太大,生成的查询质量不稳定。因此,要求生成的查询必须已经出现在搜索日志中,也就是说,只将训练的查询生成模型应用于查询日志中有限的一组候选查询。这样可以在一定程度上控制风险,使模型更加稳定。
为了确定可以生成的候选查询列表,使用下面的排名函数对日志中的历史查询进行排名,并选择前10个。对于候选查询
q
j
q_j
qj,只需使用以下公式计算其对
q
q
q的重要性:
当
q
j
q_j
qj时q的扩展时:
否则:
这个组件简单的评估
q
j
q_j
qj和
q
q
q之间的特殊性,扩展查询
q
j
q_j
qj包含的单词越多,
q
j
q_j
qj对
q
q
q的特定性就越强;
s
s
s(
q
q
q,
q
j
q_j
qj):
用来衡量
q
q
q和
q
j
q_j
qj的相似性,这将评估两个查询之间的语义关系
f
f
f(
q
q
q,
q
j
q_j
qj):
n
n
n
q
_q
q
,
_,
,
q
j
q_j
qj表示两个查询同时出现在同一会话中的次数,
n
q
n_q
nq表示
q
q
q在整个搜索日志中出现的次数
r
r
r(
q
q
q,
q
j
q_j
qj):
表示两个查询之间的点击相关性,其中
c
c
c
q
_q
q
,
_,
,
q
_q
q
j
_j
j是在两个查询
q
q
q和
q
j
q_j
qj下同时点击的URL数,
c
q
c_q
cq是在
q
q
q下单击的URL数。
一旦候选查询被选中,使用公式(12)来评估每个候选查询的重要性,并根据公式(10)(11)选择文档。这样,当用户的真实意图与当前查询不一致时,我们可以提供更好的选择。为了保证在当前查询与用户意图一致或候选集中没有比当前查询更好的选择的情况下,模型退化为当前查询,在训练和测试模型时,我们还将当前查询添加到候选集中。
EXPERIMENTS
Dataset
日志中的每个数据记录都包含用户id、查询字符串、发出查询的时间、搜索引擎检索到的URL、标识用户是否单击文档的标记以及单击文档的驻留时间。日志是根据抽样用户id的列表从搜索引擎中提取的,以确保这些用户在这段时间内的所有搜索历史记录都保存在我们的数据集中。数据集包含33204个用户和2665625个查询。在现有工作的基础上,根据发出非活动时间超过30分钟的查询,将日志分割成会话。最后我们得到了654776个Session。因为在本文提出的第二种方法中,我们需要根据当前查询生成查询,需要过滤一部分无意义的查询,例如只包含单个无意义单词(如“a”)的查询。
将实验环节按4:1:1的比例分成训练集、验证集和测试集。利用word2vec对实验数据中的查询和文档内容进行预训练。在实验中,简单地将一个查询的词向量平均作为查询的表示,并使用tf-idf加权平均词向量作为文档向量。将驻留时间超过30秒或是会话中最后一次单击的单击视为满意的单击(sat click),并将其他文档称为非sat单击。原始训练数据是由sat点击文档和一些非sat点击文档组成的文档对。使用sat点击的文档作为相关文档,选择的非sat点击文档作为无关文档。模型通过抽样非sat点击文档来增强训练数据,这些文档更难区分为无关文档,并对数据对进行加权。
结果
图4显示,无论查询是清晰的(较低的熵)还是模糊的(更大的熵),模型始终优于SLTB。在点击量较大的查询上,个性化模型相对于原始排名的整体改进更为显著。
用户之前发出的查询(重复查询)或不发出的查询(非重复查询)对模型进行实验。结果如图5所示我们发现所有的个性化模型都比最初的排名有更大的改进,并且基于深度学习的模型表现得更好