本篇博客主要参考了2016年SIGIR会议上的paper《Learning Query and Document Relevance from a Web-scale Click Graph》。首先说明的是这篇paper提出的模型主要是应用在搜索领域,即根据用户的query和其点击的document日志信息,学习query和document的向量在同一语义空间中的表征方式,将这些向量的表征方式使用到在线预测系统中,方便根据向量的内积来判断用户当前输入的query和不同document之间的相似度,从而返回和用户输入query具有最高相似度的document。
对于这类问题,一个角度是可以把query和document看成是词语的序列,通过NLP的思想来对其进行表征,但是这样的话就没有考虑用户的点击日志信息,得到的embedding信息就缺少了用户兴趣信息,这样就会导致给一个query可能返回的document是语义上相近的,但是可能并不是用户真正想要的;另一个角度则是只利用query和document的日志点击信息,但这样因为长尾定律存在着query和document的sparse的问题,故对于最终的预测效果也会产生不利的影响。
为了解决上述的问题,作者提出了一个统一的框架同时利用了query和document中的词语信息以及用户日志点击的行为信息来将query和document映射到 了一个相同的语义空间中去,同时对于从未出现的query和document提出了一种统一的编码策略,很好的解决了absent的问题。
上面这个二部图,左边的
q
1
,
q
2
,
q
3
q_1,q_2,q_3
q1,q2,q3是query,右边的
d
1
,
d
2
d_1,d_2
d1,d2是document,它们之间的连线代表了它们在用户的点击日中中出现过,即用户在搜索框中输入了
q
1
q_1
q1,最终在返回的所有结果中点击了
d
1
d_1
d1,连线上的权值代表了点击的次数。整个算法是一个迭代式的传播方法,即随机选择一个起点方向(query方向或者是document方向),然后初始化起点方向部分所有点的状态向量,然后通过边的传播将这些向量传播到另一个方向上去,然后另一个方向继续根据连线传播回来,这样反复迭代几次之后,当所有的向量趋于稳定的时候,整个过程停止,那么每一个query和document在同一语义空间中的向量也就生成好了。这里的假设就是被多个query关联在一起的document和被多个document关联在一起的query在语义上具有更近的相似度。
可以发现,由于是一个反复的迭代过程,因此取不同的部分(query或者document)作为起点可以生成2套不同的向量(在论文后续的实验部分,通过论证,证明了这2套不同的向量都对最终的预测结果有影响),其实算法过程是一样的,这里以从query作为起点来进行说明。首先是对query部分的样本进行初始化,论文中的方式竟然是词袋模型,使用的是词频TF编码的方式,同时对每一个词频向量都进行了归一化,即每一个向量的模都为1,这样每一个query都被表征为了
∣
V
∣
|V|
∣V∣维的向量,
V
V
V代表了词表的大小(这篇paper发表的时间是2016年,而word2vec等word embedding算法在2013年就发表了,这里之所以采用了这么老的算法,作者说是为了保证每一个维度都具有可解释性,我对这里还是有一些怀疑态度的,毕竟词袋模型大大增加了向量的维度,所以我感觉使用了word embedding效果也许会更好?)。当初始化了之后,就开始了传播迭代过程,思想很简单,公式如下:
D
j
n
=
1
∣
∣
∑
i
=
1
∣
q
u
e
r
y
∣
C
i
,
j
.
Q
i
n
−
1
∣
∣
2
∑
i
=
1
∣
q
u
e
r
y
∣
C
i
,
j
.
Q
i
n
−
1
D_j^n=\frac{1}{||\sum_{i=1}^{|query|}C_{i,j}.Q_i^{n-1}||_2}\sum_{i=1}^{|query|}C_{i,j}.Q_i^{n-1}
Djn=∣∣∑i=1∣query∣Ci,j.Qin−1∣∣21∑i=1∣query∣Ci,j.Qin−1
其中
D
j
n
D_j^n
Djn代表了第n轮迭代中,第j个document的向量表征形式,
C
i
,
j
C_{i,j}
Ci,j代表了在用户的日志点击行为中
q
u
e
r
y
i
query_i
queryi和
d
o
c
u
m
e
n
t
j
document_j
documentj之间的关联次数,前面的
1
∣
∣
∑
i
=
1
∣
q
u
e
r
y
∣
C
i
,
j
.
Q
i
n
−
1
∣
∣
2
\frac{1}{||\sum_{i=1}^{|query|}C_{i,j}.Q_i^{n-1}||_2}
∣∣∑i=1∣query∣Ci,j.Qin−1∣∣21是归一化项。
所以从整体来看,整个生成过程还是比较简单的。下面来讲一下作者针对从未出现过的query和document的向量embedding的生成方式,
其实其核心思想是直接明了的,虽然query和document可以是新产生的,但是组成query和document的词语确不是新的,从这个角度入手,先对每一个词语生成embedding,然后新query或者document的embedding可以由词语的embedding组合而来。图中以词语u向document的映射过程为例进行一个说明:query到document的边转化成了这些query中的词语u的到document的边,词语u到documnet的权重是由包含了该词语u的query到目标document的权重之和。当二部图确定好了之后,就可以开始迭代过程了,需要注意的是这里的迭代过程只能从document一侧开始,初始化向量采用的是上一步在query和document的二部图中训练好的向量,迭代公式是:
U
i
=
1
∣
∣
∑
j
=
1
∣
K
u
i
∣
P
i
,
j
K
u
i
(
j
)
∣
∣
2
∑
j
=
1
K
u
i
P
i
,
j
K
u
i
(
j
)
U_i=\frac{1}{||\sum_{j=1}^{|K_{u_i}|}P_{i,j}K_{u_i}(j)||_2} \sum_{j=1}^{K_{u_i}}P_{i,j}K_{u_i}(j)
Ui=∣∣∑j=1∣Kui∣Pi,jKui(j)∣∣21∑j=1KuiPi,jKui(j)
其中
∣
K
u
i
∣
|K_{u_i}|
∣Kui∣是在二部图中和词语
u
i
u_i
ui关联的document。
那么在预测的时候,作者不是简单的把词语u加起来作为absent的query和document表征,而是使用了线性加权的方式进行的,这个权重是通过训练得到的,首先说明一点的是这个权值针对的是每一个词语,而且是全局的,也就是无论目前query或者document是什么,这些权值一旦训练好了就不再改变(其实我感觉这里有点不太合理,因为感觉在不同类别query中不同词语的权重应该有所区别的,这里其实是由改进空间的),训练公式如下:
m
i
n
w
∑
i
=
1
∣
T
∣
∣
∣
T
i
−
∑
u
j
∈
U
T
i
a
l
l
W
j
.
U
j
∣
∣
2
2
min_w \sum_{i=1}^{|T|}||T_i-\sum_{u_j \in U_{T_i}^{all}}W_j.U_j||_2^2
minw∑i=1∣T∣∣∣Ti−∑uj∈UTiallWj.Uj∣∣22
其中
T
i
T_i
Ti就是前面阶段训练好的query或者document的embedding向量,目标就很显然了就是通过这些词语
U
j
U_j
Uj来加权更好的逼近之前训练好的query或者document,损失函数采用的是简单的均方损失。
那么当权重训练好了之后,在预测阶段就可以通过词语unit的加权方式来对未出现的query或document进行很好的表征,从而提升整体系统的效果。