Personalizing Search Results Using Hierarchical RNN with Query-aware Attention总结


论文链接

论文动机

在这篇论文之前关于个性化搜索的研究里,很少有研究考虑了历史queries和session的顺序信息。queries提出的顺序对于推断用户意图来说十分重要的,显然近期的session可以比陈旧的session提供更多的信息。所以本文为了利用这种序列信息,使用了层级RNN(HRNN)来挖掘这一信息,并自动的根据历史信息生成用户的描述文件。同时作者还引入了attention机制来根据当前的queries对历史信息赋予不同的权重,来动态的生成用户的描述文件。

训练过程简述

  1. 用带有attention机制的HRNN处理用户的历史信息,输入是queries和相应的文档向量,输出是短期描述向量和长期描述向量。分别计算长期向量和短期向量与候选文档的相似值。
  2. 同时也将其他的特征(例如query的点击熵,候选文档的原始排序,文档的点击数据等)通过MLP(Multilayer perceptron)编码。
  3. 将这三部分相加得到文档的re-ranking score。
  4. 使用LambdaRank模型这一基础的ranking算法来训练整个模型。

模型介绍

明确一下变量含义:

  1. u u u 表示用户
  2. L u L_u Lu 表示用户的查询记录(不包含当前session), L u = { S 1 , S 2 , . . . , S M − 1 } L_u = \{S_1,S_2,...,S_{M-1}\} Lu={S1,S2,...,SM1} S i S_i Si 表示一个历史session
  3. S M S_M SM 表示当前Session,每个session都包含一系列的queries,每个query都有一些列搜索引擎返回的文档
    S M = { { q M , 1 , d M , 1 , 1 , d M , 1 , 2 , . . } , . . . , { q M , n M , d M , n M , 1 , d M , n M , 2 , . . } } S_M = \{\{q_{M,1},d_{M,1,1},d_{M,1,2},..\}, ...,\{q_{M,n_M},d_{M,n_M,1},d_{M,n_M,2},..\} \} SM={{qM,1,dM,1,1,dM,1,2,..},...,{qM,nM,dM,nM,1,dM,nM,2,..}},当前session里用户正在提出query q M , n M q_{M,n_M} qM,nM,并且返回 D D D
  4. D D D表示当前query返回的文档列表。 D = { d 1 , d 2 , . . . } D= \{d_1,d_2,...\} D={d1,d2,...}. d i d_i di表示 d M , n M , i d_{M,n_M,i} dM,nM,i

计算目标:
对于每一个候选文档,都计算他的相关性得分,这个得分基于三部分: q M , n M , L u , S M q_{M,n_M},L_u, S_M qM,nMLu,SM
s c o r e ( d i ) = s c o r e ( d i ∣ q M , n M , S M , S M − 1 , . . . , S 1 ) = s c o r e ( d i ∣ q M , n M ) + s c o r e ( d i ∣ L u ) + s c o r e ( d i ∣ S M ) score(d_i) = score(d_i\mid q_{M,n_M}, S_M,S_{M-1},...,S_1) \\ = score(d_i\mid q_{M,n_M}) + score(d_i\mid L_u) + score(d_i\mid S_M) score(di)=score(diqM,nM,SM,SM1,...,S1)=score(diqM,nM)+score(diLu)+score(diSM)
s c o r e ( d i ∣ q M , n M ) score(d_i\mid q_{M,n_M}) score(diqM,nM)表示文档 d i d_i di和query q M , n M q_{M,n_M} qM,nM之间的相关性。 s c o r e ( d i ∣ L u ) score(d_i\mid L_u) score(diLu)表示文档 d i d_i di和用户长期兴趣之间的相关性。 s c o r e ( d i ∣ S M ) score(d_i\mid S_M) score(diSM)表示文档 d i d_i di和用户短期兴趣之间的相关性。
下面从三个方面介绍模型

  1. 利用序列加强的用户兴趣
  2. 建模动态的用户描述文件
  3. 重排序

利用序列加强的用户兴趣

短期兴趣建模

在这里插入图片描述
这个图是模型的整体框架,用最底层的RNN来生成用户的短期兴趣。
需要的是当前session的部分数据: S m ′ = { { q m , 1 , D m , 1 } , . . . , { q m , n m , D m , n m } } S_m^{'} = \{\{q_{m,1},D_{m,1}\},...,\{q_{m,n_m},D_{m,n_m}\} \} Sm={{qm,1,Dm,1},...,{qm,nm,Dm,nm}} D m , i D_{m,i} Dm,i表示对于当前query的用户满意文档。
q m , i q_{m,i} qm,i的向量和 D m , i D_{m,i} Dm,i里文档向量的平均向量 d m , i d_{m,i} dm,i(如果没有满意文档设为零向量)拼接在一起作为RNN的输入。
在本模型里,每一个query和document的表达向量是单词向量的tf-idf加权平均。
session-level RNN 的隐藏神经元计算公式:
h m , n 1 = f ( h m , n − 1 1 , q m , n , d m , n ) h^1_{m,n} = f(h^1_{m,n-1},q_{m,n},d_{m,n}) hm,n1=f(hm,n11,qm,n,dm,n)
h m , 0 1 h^1_{m,0} hm,01用零向量初始化,上标1,2表示RNN层数。
f ( ⋅ ) f(·) f()表示RNN cell,可以用LSTM,GRU等。本模型里所有的RNN cell都是GRU。
r m , n 1 = σ ( W r 1 [ q m , n ; d m , n ] + V r 1 h m , n − 1 1 ) z m , n 1 = σ ( W r 1 [ q m , n ; d m , n ] + V r 1 h m , n − 1 1 ) c m , n 1 = t a n h ( W 1 [ q m , n ; d m , n ] + V 1 ( r m , n 1 ⋅ h m , n − 1 1 ) ) h m , n 1 = ( 1 − z m , n 1 ) ⋅ h m , n − 1 1 + z m , n 1 ⋅ c m , n 1 r^1_{m,n}=\sigma(W_r^1[q_{m,n};d_{m,n}]+V_r^1h^1_{m,n-1})\\ z^1_{m,n}=\sigma(W_r^1[q_{m,n};d_{m,n}]+V_r^1h^1_{m,n-1})\\ c^1_{m,n} = tanh(W^1[q_{m,n};d_{m,n}]+V^1(r^1_{m,n}·h^1_{m,n-1}))\\ h^1_{m,n} = (1-z^1_{m,n})·h^1_{m,n-1}+z^1_{m,n}·c^1_{m,n} rm,n1=σ(Wr1[qm,n;dm,n]+Vr1hm,n11)zm,n1=σ(Wr1[qm,n;dm,n]+Vr1hm,n11)cm,n1=tanh(W1[qm,n;dm,n]+V1(rm,n1hm,n11))hm,n1=(1zm,n1)hm,n11+zm,n1cm,n1
r m , n 1 r^1_{m,n} rm,n1是遗忘门,表示上一个状态的信息要丢弃多少, z m , n 1 z^1_{m,n} zm,n1是更新门,表示上一个状态的信息要保留多少。所有的 W , V W,V W,V在所有session里都是共享参数。
最后一个隐层输出 h m , n m 1 h^1_{m,n_m} hm,nm1看做是整个session的表示,也就是短期兴趣向量。为简化后文写作 h m 1 h^1_m hm1

长期兴趣建模

第二层RNN以第一层RNN的输出 { h 1 1 , . . . , h M − 1 1 } \{h^1_1,...,h^1_{M-1}\} {h11,...,hM11}作为输入,计算 { h 1 2 , . . . , h M − 1 2 } \{h^2_1,...,h^2_{M-1}\} {h12,...,hM12}:
h m 2 = f ( h m − 1 2 , h m 1 ) h^2_m = f(h^2_{m-1},h^1_m) hm2=f(hm12,hm1)
h 0 2 h^2_0 h02用零向量初始化
f ( ⋅ ) f(·) f()依然是GRU
不过长期兴趣向量不是直接用最后一个隐层的状态 h M − 1 2 h^2_{M-1} hM12来表示了,因为历史数据对于当前query的重要程度是不同的,所以引入了attention机制为历史session加权。

建立动态用户描述文件

为每个二层隐层 { h 1 2 , . . . , h M − 1 2 } \{h^2_1,...,h^2_{M-1}\} {h12,...,hM12}计算weights { α 1 , α 2 , . . . , α M − 1 } \{\alpha_1,\alpha_2,...,\alpha_{M-1}\} {α1,α2,...,αM1}
e i = ϕ ( q M , n M , h i 2 ) α i = exp ⁡ ( e i ) ∑ j = 1 M − 1 exp ⁡ ( e j ) e_i = \phi(q_{M,n_M},h^2_i)\\ \alpha_i = \frac{\exp(e_i) }{\sum_{j=1}^{M-1}\exp(ej)} ei=ϕ(qM,nM,hi2)αi=j=1M1exp(ej)exp(ei)
ϕ ( ⋅ ) \phi(·) ϕ()是一个多层感知器(MLP), t a n h ( ⋅ ) tanh(·) tanh()做激活器。长期兴趣向量 h M − 1 2 , q h^{2,q}_{M-1} hM12,q计算如下:
h M − 1 2 , q = ∑ M − 1 i = 1 α i h i 2 h^{2,q}_{M-1}=\sum^{i=1}_{M-1}\alpha_ih^2_i hM12,q=M1i=1αihi2

重排序(Re-ranking)

s c o r e ( d i ∣ L u ) = s i m ( ( h M − 1 2 , q ) T W L , d i ) s c o r e ( d i ∣ S M ) = s i m ( ( h M , n M 1 ) T W S , d i ) score(d_i\mid L_u) = sim((h^{2,q}_{M-1})^TW_L,d_i)\\ score(d_i\mid S_M) = sim((h^1_{M,n_M})^TW_S,d_i) score(diLu)=sim((hM12,q)TWL,di)score(diSM)=sim((hM,nM1)TWS,di)
W L W S W_L W_S WLWS是两个相似矩阵,将兴趣向量映射到和文档相同的语义空间,在训练的时候优化。
s i m ( X , Y ) = X T Y ∥ X ∥ ⋅ ∥ Y ∥ sim(X,Y) = \frac{X^TY}{\|X\|·\|Y\|} sim(X,Y)=XYXTY
除了这两个score作者 还将query-document 相关特征、点击特征作为额外特征。因为原始的query-document特征无法直接获得,所以使用了原始的文档位置作为特征。点击特征也包括某个文档的额历史点击数量以及输入query的点击熵等。将这些额外特征作为输入传入MLP中,tanh作为激活函数获得第三部分的score。将这些score加在一起作为最终的相似得分。

使用LambdaRank这个基础的排序算法来对结果做重排序。
从查询记录里生成训练样本对,用户满意的文档当作相关文档,反之为不相关文档。以 d i d_i di(相关文档), d j d_j dj(不相关文档)为例,loss就是期望分布和预测分布的交叉熵 和 度量变化程度 Δ \Delta Δ的乘积:
l o s s = ( − p i j log ⁡ ( p i j ′ ) − p j i log ⁡ ( p j i ′ ) ) ∣ Δ ∣ loss = (-p_{ij}\log(p_{ij}^{'})-p_{ji}\log(p_{ji}^{'}))|\Delta| loss=(pijlog(pij)pjilog(pji))Δ
这里 Δ \Delta Δ用MAP计算,因为MAP能够激励把更相关的文档放在前面。
p i j ′ p_{ij}^{'} pij代表预测的 d i d_i di d j d_j dj更相关的概率, p i j p_{ij} pij代表真实的 d i d_i di d j d_j dj更相关的概率。 p i j ′ p_{ij}^{'} pij计算如下:
p i j ′ = 1 1 + exp ⁡ ( − ( s c o r e ( d i ) − s c o r e ( d j ) ) ) p_{ij}^{'} = \frac{1}{1+\exp(-(score(d_i)-score(d_j)))} pij=1+exp((score(di)score(dj)))1

结果评估度量

MAP,MRR,Avg.Click是比较常见的也很好理解,这里想重点说一下 # B e t t e r \#Better #Better这个度量。
因为一个用户是否点击某个文档不止和文档的相关性有关,还和他的位置相关,这种位置上的偏差可能会对主流指标造成影响。比如位置较低的文档被查看的概率就很低,即使他们可能相关,但是也不会被点击。这种文档就被主流指标错误的看做负样本(无关样本),从而如果提升这种文档的rank,主流指标是会降低的,从而对结果造成影响。所以 # B e t t e r \#Better #Better这个度量的计算对象是正负样本对,把被用户点击的文档看做是比被跳过的文档更好(更相关)的。(也就是不考虑位置太低的文档,只考虑真正相关/无关的文档)。本来位置错误的文档对经过重排序后位置正确了,称这个样本对为mproved pair, # B e t t e r \#Better #Better就加一。同时也引入 P − I m p r o v e P-Improve PImprove表示improved pairs的百分比。

后记

欢迎评论指正=v=

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值