1.论文摘要
该论文是在 ICLR 2017提出的一个无监督的句子嵌入的方法:使用维基百科等无标签的语料训练得到词向量,然后通过词向量加权平均获得句子表征向量。然后使用PCA/SVD再对句向量进行一次修正得到最终得句向量。
2. 计算句子表征的算法
先来看下论文中提出的句子表征的算法:
上面的算法过程中有两个重点:
• 为什么可以通过句子中的单词向量加权平均来获得句子初始的向量的表征?(公式(1))
• 为什么得到句子的初始向量之后要做一个修正(公式(2))
论文围绕着这两个问题进行了解答。
3. 随机游走模型
论文首先介绍了随机游走模型:将句子生成看出是一个动态过程,在第t时刻下的语篇向量 c t c_t ct决定生成第t个词。语篇向量表示的是这个时刻句子语义。不同时刻的语篇向量的游走变化会导致生成不同的词。词典中的每一个词都有一个词向量 v w v_w vw 。
一个时刻t ,生成的词是w的概率,可以由如下的公式表示:
Pr
[
w
emitted at time
t
∣
c
t
]
∝
exp
(
⟨
c
t
,
v
w
⟩
)
.
\operatorname{Pr}\left[w \text { emitted at time } t \mid c_{t}\right] \propto \exp \left(\left\langle c_{t}, v_{w}\right\rangle\right) .
Pr[w emitted at time t∣ct]∝exp(⟨ct,vw⟩).
假定在文本生成的过程中,语篇向量是在做一个缓慢的游走(意味着 c t c_t ct添加一个很小的位移向量就能获得 c t + 1 c_{t+1} ct+1),所以相近的词对应的语篇向量都是比较接近的。
假设一句话各个位置单词出现时,语篇向量变化不大,所以将使用一个固定的语篇向量 c s c_s cs来近似表示各个时刻的语篇向量 c t c_t ct。
Pr [ w emitted at time t ∣ c s ] ∝ exp ( ⟨ c s , v w ⟩ ) . \operatorname{Pr}\left[w \text { emitted at time } t \mid c_{s}\right] \propto \exp \left(\left\langle c_{s}, v_{w}\right\rangle\right) . Pr[w emitted at time t∣cs]∝exp(⟨cs,vw⟩).
从上述公式可以看出,某个时刻的语篇向量 c s c_s cs和词向量 v w v_w vw内积越大,该词越有可能出现。
对于停用词,在不同的句子中都有可能出现,所以这些停用词的词向量的模长尽量长一点,才能与不同的语篇向量的内积都比较大。
论文对上面的模型进行了两个主要的修改:
Pr
[
w
emitted in sentence
s
∣
c
s
]
=
α
p
(
w
)
+
(
1
−
α
)
exp
(
<
c
~
s
,
v
w
>
)
Z
c
~
s
where
c
~
s
=
β
c
0
+
(
1
−
β
)
c
s
,
c
0
⊥
c
s
w
h
e
r
e
Z
c
~
s
=
∑
i
n
(
<
c
~
s
,
v
w
i
>
)
\begin{matrix} \operatorname{Pr}\left[ w\text{ emitted in sentence } s\mid c_{s}\right] =\alpha p(w)+(1-\alpha )\frac{\exp\left(\left< \tilde{c}_{s} ,v_{w}\right> \right)}{Z_{\tilde{c}_{s}}}\\ \text{where }\tilde{c}_{s} =\beta c_{0} +(1-\beta )c_{s} ,c_{0} \perp c_{s}\\ where\ Z_{\tilde{c}_{s}} =\sum _{i}^{n}\left(\left< \tilde{c}_{s} ,v_{w_{i}}\right> \right) \end{matrix}
Pr[w emitted in sentence s∣cs]=αp(w)+(1−α)Zc~sexp(⟨c~s,vw⟩)where c~s=βc0+(1−β)cs,c0⊥cswhere Zc~s=∑in(⟨c~s,vwi⟩)
(1) 增加平滑项
在模型中引入一个加法项
α
p
(
w
)
α p(w)
αp(w) ,其中的
p
(
w
)
p(w)
p(w)表示单词在整个语料库中的概率,
α
α
α是一个标量,这保证了一个词的向量与语篇向量的内积很小很小的情况下,整个词也是可能被话语向量生成出来。论文也对这种平滑操作称为:SIF(smooth inverse frequency)
(2) 引入公共语篇向量
c
0
c_0
c0
引入了一个公共的语篇向量
c
0
c_0
c0,其表示所有句子都具有的公共语义。但句子间的差异需要有差异的那部分语义来体现的。所以在计算句子间的语义相似度的时候,需要先删除公共语义部分。
假定所有词向量大致满足均匀分布,且模长一致,
Z
c
~
s
Z_{\tilde{c}_{s}}
Zc~s 可以近似看成是一个定值。
Pr
[
w
emitted in sentence
s
∣
c
s
]
=
α
p
(
w
)
+
(
1
−
α
)
exp
(
<
c
~
s
,
v
w
>
)
Z
\operatorname{Pr}\left[ w\text{ emitted in sentence } s\mid c_{s}\right] =\alpha p(w)+(1-\alpha )\frac{\exp\left(\left< \tilde{c}_{s} ,v_{w}\right> \right)}{Z}
Pr[w emitted in sentence s∣cs]=αp(w)+(1−α)Zexp(⟨c~s,vw⟩)
4.基于随机游走模型求解句子向量
根据上述的随机游走篇章模型可知一句话的概率为:
p
[
s
∣
c
s
]
=
∏
w
∈
s
p
(
w
∣
c
s
)
=
∏
w
∈
s
[
α
p
(
w
)
+
(
1
−
α
)
exp
(
⟨
v
w
,
c
~
s
⟩
)
Z
]
p\left[s \mid c_{s}\right]=\prod_{w \in s} p\left(w \mid c_{s}\right)=\prod_{w \in s}\left[\alpha p(w)+(1-\alpha) \frac{\exp \left(\left\langle v_{w}, \tilde{c}_{s}\right\rangle\right)}{Z}\right]
p[s∣cs]=w∈s∏p(w∣cs)=w∈s∏[αp(w)+(1−α)Zexp(⟨vw,c~s⟩)]
通过最大似然来求得语篇向量 c s c_s cs使得上述句子概率 p ( s ) p(s) p(s) 概率最大。
先分析一下
p
(
w
∣
c
s
)
p(w|c_s)
p(w∣cs)。令
f
w
(
c
~
s
)
=
l
o
g
(
p
(
w
∣
c
s
)
)
f_{w}\left(\tilde{c}_{s}\right)=log(p(w|c_s))
fw(c~s)=log(p(w∣cs))。
f
w
(
c
~
s
)
=
log
[
α
p
(
w
)
+
(
1
−
α
)
exp
(
⟨
v
w
,
c
~
s
⟩
)
Z
]
f_{w}\left(\tilde{c}_{s}\right)=\log \left[\alpha p(w)+(1-\alpha) \frac{\exp \left(\left\langle v_{w}, \tilde{c}_{s}\right\rangle\right)}{Z}\right]
fw(c~s)=log[αp(w)+(1−α)Zexp(⟨vw,c~s⟩)]
对
f
w
(
c
~
s
)
f_{w}\left(\tilde{c}_{s}\right)
fw(c~s)进行求导:
∇
f
w
(
c
~
s
)
=
1
α
p
(
w
)
+
(
1
−
α
)
exp
(
⟨
v
w
,
c
~
s
⟩
)
/
Z
1
−
α
Z
exp
(
⟨
v
w
,
c
~
s
⟩
)
v
w
.
\nabla f_{w}\left(\tilde{c}_{s}\right)=\frac{1}{\alpha p(w)+(1-\alpha) \exp \left(\left\langle v_{w}, \tilde{c}_{s}\right\rangle\right) / Z} \frac{1-\alpha}{Z} \exp \left(\left\langle v_{w}, \tilde{c}_{s}\right\rangle\right) v_{w} .
∇fw(c~s)=αp(w)+(1−α)exp(⟨vw,c~s⟩)/Z1Z1−αexp(⟨vw,c~s⟩)vw.
然后通过泰勒展开式:
f
w
(
c
~
s
)
≈
f
w
(
0
)
+
∇
f
w
(
0
)
⊤
c
~
s
=
constant
+
(
1
−
α
)
/
(
α
Z
)
p
(
w
)
+
(
1
−
α
)
/
(
α
Z
)
⟨
v
w
,
c
~
s
⟩
.
\begin{aligned} f_{w}\left(\tilde{c}_{s}\right) & \approx f_{w}(0)+\nabla f_{w}(0)^{\top} \tilde{c}_{s} \\ &=\text { constant }+\frac{(1-\alpha) /(\alpha Z)}{p(w)+(1-\alpha) /(\alpha Z)}\left\langle v_{w}, \tilde{c}_{s}\right\rangle . \end{aligned}
fw(c~s)≈fw(0)+∇fw(0)⊤c~s= constant +p(w)+(1−α)/(αZ)(1−α)/(αZ)⟨vw,c~s⟩.
通过上述可知,假定 c ~ s \tilde{\boldsymbol{c}}_{s} c~s 模长固定的情况下,与 v w v_w vw同方向的时候 f w ( c ~ s ) f_{w}\left(\tilde{c}_{s}\right) fw(c~s)结果最大。
假定
c
~
s
\tilde{c}_{s}
c~s 服务单位球面上的均匀分布,因此当
c
~
s
\tilde{\boldsymbol{c}}_{s}
c~s与
∑
w
∈
s
a
p
(
w
)
+
a
v
w
\sum_{w \in s} \frac{a}{p(w)+a} v_{w}
∑w∈sp(w)+aavw 同方向时,
∑
w
∈
s
f
w
(
c
~
s
)
\sum_{w \in s} f_{w}\left(\tilde{c}_{s}\right)
∑w∈sfw(c~s) 结果最大。
arg
max
∑
w
∈
s
f
w
(
c
~
s
)
∝
∑
u
∈
s
a
p
(
w
)
+
a
v
w
,
where
a
=
1
−
α
α
Z
.
\arg \max \sum_{w \in s} f_{w}\left(\tilde{c}_{s}\right) \propto \sum_{u \in s} \frac{a}{p(w)+a} v_{w}, \text { where } a=\frac{1-\alpha}{\alpha Z} .
argmaxw∈s∑fw(c~s)∝u∈s∑p(w)+aavw, where a=αZ1−α.
所以一个句子的初始向量可以定义为:
c
~
s
←
1
∣
s
∣
∑
w
∈
s
a
a
+
p
(
w
)
v
w
\tilde{c}_{s}\leftarrow \frac{1}{|s|}\sum _{w\in s}\frac{a}{a+p(w)} v_{w} \ \
c~s←∣s∣1w∈s∑a+p(w)avw
目前为止回答了第一问题:为什么可以通过句子中的单词向量加权平均来获得句子初始的向量的表征。下面回答一下为什么得到句子的初始向量之后要做一个修正。
上面提到但句子间的差异需要有差异的那部分语义来体现的。所以在计算句子间的语义相似度的时候,需要先删除公共语义部分。
论文中使用的删除句子公共语义部分的方法是:
将前面求解都的句子集合S中所有的句子表征向量
c
~
s
\tilde{\boldsymbol{c}}_{s}
c~s以列向量 拼接成一个矩阵
X
X
X。假定
u
u
u是矩阵的第一奇异向量。
最终的句子表征向量可以通过如下公式求得:
c
s
←
c
~
s
−
u
u
⊤
c
~
s
c_{s}\leftarrow \tilde{\boldsymbol{c}}_{s}-uu^{\top } \tilde{\boldsymbol{c}}_{s}\
cs←c~s−uu⊤c~s
5.实验结果
从论文中的实验来看,论文提出的句子表征算法(图中的GloVe+WR) ,比基于词向量通过tfidf加权或者平均方式来获得句向量的方式要好。(图中的tfidf-GloVe,avg-Glove)