论文|Sentence2Vec & GloVe 算法原理推导与实现
Posted 搜索与推荐Wiki
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了论文|Sentence2Vec & GloVe 算法原理推导与实现相关的知识,希望对你有一定的参考价值。
万物皆可Embedding系列会结合论文和实践经验进行介绍,前期主要集中在论文中,后期会加入实践经验和案例,目前已更新:
- 万物皆可Vector之语言模型:从N-Gram到NNLM、RNNLM
- 万物皆可Vector之Word2vec:2个模型、2个优化及实战使用
- Item2vec中值得细细品味的8个经典tricks和thinks
- Doc2vec的算法原理、代码实现及应用启发
- Sentence2Vec & GloVe 算法原理、推导实与现
后续会持续更新Embedding相关的文章,欢迎持续关注「搜索与推荐Wiki」
Sentence2vec
Sentence2vec 是2017年发表于ICLR(国际学习展示回忆)的一篇论文,其全称为:A Simple but tough-to-beat baseline for sentence embeddings
下面来看一下论文所介绍的内容(论文的内容比较晦涩难懂,小编水平也不高,如果不当之处,评论区留言,感谢!)。
1、概述
论文主要提出了一种无监督的,基于单词词向量计算句子embedding的方法,称之为Smooth Inverse Frequecy(SIF),使用加权平均的方法从word embedding到sentence embedding,然后再基于句子的embedding进行相似度计算,下面使用Sentence2vec来代替模型的思想。
论文中提出的计算方法比直接平均求句子embedding的方法效果要好一些,在一些任务中甚至比RNN、LSTM模型表现还要好一些。
与该论文中思路比较相近的做法有:
- 直接使用词语的平均embedding来表示句子,即不带权平均
- 使用TF-IDF值作为权重,进行带权计算(前提是句子中没有大量重复的词语,且使用tfidf值作为权重没有理论依据)
通过引入SIF,结合词语embedding加权计算句子embedding,不仅表现较好,而且有较好的鲁棒性,论文中提到了三点:
- 使用不同领域的语料训练得到的不同词语embedding,均取得了不错的效果,说明算法对各种语料都比较友好
- 使用不同语料计算得到的词频,作为词语的权重,对最终的结果影响很小
- 对于方法中的超参数, 在很大范围内, 获得的结果都是区域一致的, 即超参数的选择没有太大的影响
2、理论
a)潜在变量生成模型
在介绍Sentence2vec之前,先看一下潜在变量生成模型(latent variable generative model),其将语料的生成过程看作是一个动态的过程,第 t t t个单词是在第 t t t步生成的,每个单词 w w w 对应一个实值向量 R d R^d Rd。这个动态过程是通过 discourse vector c t ∈ R d c_t \\in R^d ct∈Rd 随机游走驱动的。discourse vector表达的是 what is being talked about。
discourse vector
c
t
c_t
ct 和 单词的向量
v
w
v_w
vw 的内积表达的是 discourse和word之间的相关性,并且假设
t
t
t时间观测到的
w
w
w 的概率为这个内积的对数线性关系(log linear),表达式为:
P
r
[
w
e
m
i
t
t
e
d
a
t
t
i
m
e
t
∣
c
t
]
∝
e
x
p
(
<
c
t
,
v
w
>
)
Pr[w \\, emitted at time t | c_t] \\propto exp(<c_t, v_w>)
Pr[wemittedattimet∣ct]∝exp(<ct,vw>)
由于 c t c_t ct 是较小幅度的随机游走生成的, c t c_t ct 和 c t + 1 c_t+1 ct+1 之间只是相差一个很小的随机差向量,因此相邻的单词由相似的discourses vector 生成,另外计算表明这种模型的随机游走允许偶尔 c t c_t ct 有较大的 jump,通过这种方法生成的词向量,与word2vec(CBOW)和Glove是相似的。
b)Sentence2vec 在随机游走上的改进
在给定句子 s s s的情况下,对控制该句子的向量 discourse vector 进行最大似然估计, 我们观察到在句子生成单词的时候,discourse vector c t c_t ct 变化特别小,为了简单起见,认为其是固定不变的,为 c s c_s cs,可以证明 对 c s c_s cs 的最大似然估计就是该句中所有单词向量的平均。
Sentence2vec对模型的改进为增加了两项平滑(smoothing term),原因是:有些单词在上下文之外出现,可能会对discourse vector产生影响;有些常见的停用词和discourse vector几乎没有关系。
两项平滑技术为:
- 1、在对数线性模型中引入 了累加项 $ \\alpha p(w) , , ,p(w)$ 表示的是单词 w w w在整个语料中出现的概率, α \\alpha α 是一个超参数,这样即使和 c s c_s cs的向量内积很小,这个单词也有概率出现
- 2、引入纠错项 c 0 ∈ R d c_0 \\in R^d c0∈Rd (a common discourse vector),其意义是句子的最频繁的意义可以认为是句子的最重要组成部分。常常可以与语法联系起来. 文章中认为对于某个单词, 其沿着 c 0 c_0 c0方向的成分较大(即向量投影更长), 这个纠正项就会提升这个单词出现的概率.
纠正后的单词
w
w
w在句子
s
s
s中出现的概率为:
P
r
[
w
e
m
i
t
t
e
d
i
n
s
e
n
t
e
n
c
e
s
∣
c
s
]
=
α
p
(
w
)
+
(
1
−
α
)
e
x
p
(
<
c
s
~
,
v
w
>
)
Z
c
s
~
Pr[w \\, emitted in sentence s | c_s] = \\alpha p(w) + (1-\\alpha) \\fracexp(<\\tildec_s, v_w>)Z_\\tildec_s
Pr[wemittedinsentences∣cs]=αp(w)+(1−α)Zcs~exp(<cs~,vw>)
其中:
- c s ~ = β c 0 + ( 1 − β ) c s , c 0 ⊥ c s \\tildec_s = \\beta c_0 + (1- \\beta) c_s, c_0 \\perp c_s cs~=βc0+(1−β)cs,c0⊥cs
- $ \\alpha, \\beta$为超参数
- Z c s ~ = ∑ w ∈ V e x p ( < c s ~ , v w > ) Z_\\tildec_s = \\sum_w \\in V exp(<\\tildec_s, v_w>) Zcs~=∑w∈Vexp(<cs~,vw>) 是归一化常数
从上面的公式中也可以看出,一个与 c s c_s cs 没有关系的词语 w w w 也可以在句子中出现,因为:
- α p ( w ) \\alpha p(w) αp(w) 常数项
- 与 common discourse vector c 0 c_0 c0的相关性
c)计算句子相关性
句子的向量,即上文提到的
c
s
c_s
cs 可以通过最大似然函数去生成,这里假设组成句子的词语
v
w
v_w
vw是统一分散的,因此这里归一化
Z
c
Z_c
Zc 对于不同句子的值都是大致相同的,即对于任意的
c
s
~
\\tildec_s
cs~,
Z
Z
Z值都是相同的,,在这个前提下,得到的似然函数为:
p
[
s
∣
c
s
]
=
∏
w
∈
s
p
(
w
∣
c
s
)
=
∏
w
∈
s
[
α
p
(
w
)
+
(
1
−
α
)
e
x
p
(
<
v
w
,
c
s
~
>
)
Z
]
p[s | c_s] = \\prod_w\\in s p(w|c_s)= \\prod_w \\in s [\\alpha p(w) + (1-\\alpha) \\frac exp(<v_w, \\tildec_s>) Z]
p[s∣cs]=w∈s∏p(以上是关于论文|Sentence2Vec & GloVe 算法原理推导与实现的主要内容,如果未能解决你的问题,请参考以下文章
Sentence2vec和Word2vec涉及停用词和命名实体