Conv-knrm模型介绍
论文链接
前言
该模型是同作者对KNRM的改进,KNRM直接计算了query和document的单词嵌入向量之间的余弦作为其单词level的相似性,进而使用kernel-pooling计算query和document的相似性,Conv-knrm则考虑了n-gram级别的单词表达,通过卷积的形式计算单词的n-gram representation,同时将所有的query和document表达矩阵交叉匹配,计算多个相似矩阵,每个相似矩阵都是用kernel-pooling提取单词不同程度的软匹配,从而从更多的角度,更细粒的来获得query和document的相似性。
N-gram组成和交叉匹配
T
d
,
T
q
T_d, T_q
Td,Tq表示document和query的嵌入矩阵。单词的嵌入维度为
L
L
L
v
=
w
⋅
T
i
:
i
+
h
v = w·T_{i:i+h}
v=w⋅Ti:i+h
对于一个窗口大小为h的卷积来说,一个卷积核就是对这h个单词嵌入加权求和,获得一个value。
w
w
w是
1
×
h
L
1\times hL
1×hL
设
F
F
F个卷积核来从不同角度计算value:
g
→
i
h
=
r
e
l
u
(
W
h
⋅
T
i
:
i
+
h
+
b
→
h
)
,
i
=
1
,
.
.
.
,
m
W
h
:
F
×
h
L
,
b
→
h
:
F
×
1
\overrightarrow{g}^h_i = relu(W^h·T_{i:i+h}+\overrightarrow{b}^h), i=1,...,m \\ W^h:F\times hL, \overrightarrow{b}^h:F\times1
gih=relu(Wh⋅Ti:i+h+bh),i=1,...,mWh:F×hL,bh:F×1
当计算到边界单词时添加’<PAD>’。
即:
G
h
=
C
N
N
h
(
T
)
=
[
g
→
1
h
,
g
→
2
h
,
.
.
.
,
g
→
m
h
]
G
h
:
m
×
F
G^h = CNN^h(T) = [\overrightarrow{g}^h_1,\overrightarrow{g}^h_2,...,\overrightarrow{g}^h_m]\\ G^h:m\times F
Gh=CNNh(T)=[g1h,g2h,...,gmh]Gh:m×F
G
h
G^h
Gh的每一行都代表一个长度为F的h-gram向量。这样可以计算
G
q
h
,
G
d
h
,
h
=
1
,
.
.
.
,
h
m
a
x
G^h_q, G^h_d, h=1,...,h_{max}
Gqh,Gdh,h=1,...,hmax
交叉匹配层就是匹配query和document的各个长度(这个长度指的是h-gram的h)的n-grams。设query的n-gram的长度为
h
q
h_q
hq,document的n-gram的长度为
h
d
h_d
hd,可以生成一个转换矩阵
M
h
q
,
h
d
M^{h_q,h_d}
Mhq,hd,该矩阵的每一个元素都代表query-document的n-gram对的相似值。
M
i
,
j
h
q
,
h
d
=
c
o
s
(
g
→
i
h
q
,
g
→
j
h
d
)
M
=
{
M
h
q
,
h
d
∣
1
<
=
h
q
<
=
h
m
a
x
,
1
<
=
h
d
<
=
h
m
a
x
}
M_{i,j}^{h_q,h_d} = cos(\overrightarrow{g}_i^{h_q},\overrightarrow{g}_j^{h_d})\\ M=\{M^{h_q,h_d}|1<=h_q<=h_{max}, 1<=h_d<=h_{max}\}
Mi,jhq,hd=cos(gihq,gjhd)M={Mhq,hd∣1<=hq<=hmax,1<=hd<=hmax}
使用n-gram的转换矩阵来排序
这一步把转换矩阵
M
M
M池化为K维的软特征向量,对于每一个转换矩阵:
ϕ
(
M
h
q
,
h
d
)
=
{
K
1
(
M
h
q
,
h
d
)
,
K
2
(
M
h
q
,
h
d
)
,
.
.
.
,
K
k
(
M
h
q
,
h
d
)
}
ϕ
(
M
h
q
,
h
d
)
:
k
×
1
K
k
(
M
h
q
,
h
d
)
=
∑
i
=
1
m
log
K
k
(
M
i
h
q
,
h
d
)
K
k
(
M
i
h
q
,
h
d
)
=
∑
j
exp
(
−
(
M
i
j
h
q
,
h
d
−
μ
k
)
2
2
σ
k
2
)
\\ \phi(M^{h_q,h_d})=\{K_1(M^{h_q,h_d}),K_2(M^{h_q,h_d}),...,K_k(M^{h_q,h_d})\}\\ \phi(M^{h_q,h_d}):k\times 1\\ K_k(M^{h_q,h_d}) = \sum_{i=1}^{m}\log K_k(M_i^{h_q,h_d})\\ K_k(M_i^{h_q,h_d}) = \sum\limits_{j}\exp(-\frac{(M_{ij}^{h_q,h_d}-\mu_k)^2}{2\sigma_k^2})
ϕ(Mhq,hd)={K1(Mhq,hd),K2(Mhq,hd),...,Kk(Mhq,hd)}ϕ(Mhq,hd):k×1Kk(Mhq,hd)=i=1∑mlogKk(Mihq,hd)Kk(Mihq,hd)=j∑exp(−2σk2(Mijhq,hd−μk)2)
其中
μ
k
,
σ
k
\mu_k,\sigma_k
μk,σk是人为确定的。
Φ ( M ) = ϕ ( M 1 , 1 ) ⊕ . . . ϕ ( M h q , h d ) . . . ⊕ ϕ ( M h m a x , h m a x ) Φ ( M ) : K × h m a x 2 \Phi(M) = \phi(M^{1,1})⊕...\phi(M^{h_q,h_d})...⊕\phi(M^{h_{max},h_{max}})\\ \Phi(M):K\times h_{max}^2 Φ(M)=ϕ(M1,1)⊕...ϕ(Mhq,hd)...⊕ϕ(Mhmax,hmax)Φ(M):K×hmax2
Learning-to-rank:
f
(
q
,
d
)
=
t
a
n
h
(
w
r
T
Φ
(
M
)
+
b
r
)
f(q,d) = tanh(w_r^T\Phi(M)+b_r)
f(q,d)=tanh(wrTΦ(M)+br)
计算上式时先把
M
M
M展开成
(
K
⋅
h
m
a
x
2
)
×
1
,
w
r
:
1
×
(
K
⋅
h
m
a
x
2
)
,
b
r
:
1
(K·h_{max}^2)\times1,w_r:1\times (K·h_{max}^2),b_r :1
(K⋅hmax2)×1,wr:1×(K⋅hmax2),br:1
损失函数是:
l
=
∑
q
∑
d
+
,
d
−
∈
D
q
+
,
−
m
a
x
(
0
,
1
−
f
(
q
,
d
+
)
+
f
(
q
,
d
−
)
)
l=\sum\limits_{q}\sum\limits_{d^+,d^- \in D_q^{+,-}}max(0,1-f(q,d^+)+f(q,d^-))
l=q∑d+,d−∈Dq+,−∑max(0,1−f(q,d+)+f(q,d−))
D
q
+
,
−
D_q^{+,-}
Dq+,−表示的是对于query
q
q
q的文档对,
d
+
d^+
d+的相关性高于
d
−
d^-
d−(一般情况:
d
+
d^+
d+是被用户点击过的文档,
d
−
d^-
d−是被跳过的文档)。
域迁移
现实中可能目标域的标签十分有限。所以作者提出了一个域迁移的方法。在相似的数据充足的源域里训练Conv-knrm模型,然后在目标域里再次训练。不过再次训练的过程只更新learning-to-rank层。前面的是固定的。
因为转换矩阵M的每一个元素都从不同的角度(这里的不同角度我是这样理解的:不同的kernels( μ , σ \mu,\sigma μ,σ)代表了不同的侧重点,h-gram不同的h也代表了word representation的不同角度的表达,cross match更是通过排列组合的形式把所有可能出现的表达形式都计算出来)代表某一种特定类型的软标签,learning-to-rank层就是学习当前域里这些软标签的权重,域迁移时软标签是稳健的,但是他们的权重是会变化的,因此只学习learning-to-rank层的权重参数即可。