首先,词向量是近年来nlp领域的重量级突破,个人认为跟transformer(bert)分量相当,或者更牛
其次,我觉得这两篇paper应该放在一起,看完第一篇我表示,这说了个啥?训练方法和公式去哪里了,然后看了第二篇就豁然开朗了
摘要
本文的主要目标是介绍一些技术,这些技术可用于从包含数十亿个单词的庞大数据集中学习高质量的单词向量,并在词汇表中包含数百万个单词。
提出了Word2Vec(word embedding)词向量技术,算是让nlp进入了新纪元,相当于AlexNet之于CV
跟一些以前的模型做了对比,NNLM(神经网络语言模型),LSA(潜在语义分析),LDA(潜在狄利克雷分配)然后提出一种分布式的词表示
模型
介绍了两种模型,CBOW和Skip-gram,一个是用周围的词来预测中心词,一个是用中心词来预测周围的词
然后对比了几种训练模型的复杂度
O
=
E
×
T
×
Q
O = E \times T \times Q
O=E×T×Q
where E is number of the training epochs, T is the number of the words in the training set and Q is defined further for each model architecture.
NNLM:
Q
=
N
×
D
+
N
×
D
×
H
+
H
×
V
Q = N \times D + N \times D \times H + H \times V
Q=N×D+N×D×H+H×V
RNNLM:
Q
=
H
×
H
+
H
×
V
Q = H \times H + H \times V
Q=H×H+H×V
CBOW:
Q
=
N
×
D
+
D
×
l
o
g
2
(
V
)
Q = N \times D + D \times log_2(V)
Q=N×D+D×log2(V)
Skip-gram:
Q
=
C
×
(
D
+
D
×
l
o
g
2
(
V
)
)
Q = C \times (D + D \times log_2(V))
Q=C×(D+D×log2(V))
然后做了一些对比实验,这里不多说,开始讲怎么训练,并以Skip-gram为例子
The Skip-gram Model
Skip-gram模型的目标是优化下面这个平均对数概率
c是上下文范围
概率
p
(
w
t
+
j
∣
w
t
)
p(w_{t+j}|w_t)
p(wt+j∣wt) 是由以下softmax公式定义
W是总共的单词数
这里有一个问题,由于W特别大,会导致这个softmax函数的训练非常缓慢,所以需要一些方法来改进
Hierarchical Softmax
用二叉树把softmax的本来
W
W
W个输出节点降到
l
o
g
2
(
W
)
log_2(W)
log2(W)个
Negative Sampling
接下来介绍真正的大哥:负采样
首先,负采样是脱胎于Noise Contrastive Estimation (NCE)噪声对比估计,虽然NCE可以显示为近似最大化softmax的对数概率,但Skip-gram模型只关注学习高质量的向量表示,因此只要向量表示保持其质量,我们就可以自由简化NCE
定义负采样为如下公式:
用于替换目标中的每个对数
p
(
w
t
+
j
∣
w
t
)
p(w_{t+j}|w_t)
p(wt+j∣wt) 项。
负采样的方法具体来就是:把target word从噪声分布 P n ( w ) P_n(w) Pn(w)中区分开来,使用logistic regression,给每一个target word样例选k个noise word。
跟NCE的区别在于,NCE需要样本和噪声分布的数值概率,而负采样只需要样本。
经过实验发现 P n ( w ) P_n(w) Pn(w)选取unigram distribution的 U ( w ) 3 / 4 U(w)^{3/4} U(w)3/4 的时候效果最好
但是为什么呢?举个例子
它让高频词被选取的概率只提高了一点点,但是低频词的概率大幅提升,产生了更好的效果
Subsampling of Frequent Words
在大的语料库里面,一些词汇出现非常多的次数,比如is,the,但是这些词对于我们的模型并没有多大的意义,为了消除罕见词和频繁词之间的不平衡,我们使用了一种简单的子抽样方法:训练集中的每个词以 w i w_i wi 的概率被丢弃
由 P ( w i ) = 1 − t f ( w i ) P(w_i) = 1 - \sqrt{\frac{t}{f(w_i)}} P(wi)=1−f(wi)t定义
P ( w i ) P(w_i) P(wi)是词 w i w_i wi的频率, t t t是一个门槛,一般大小为 1 0 − 5 10^{-5} 10−5左右
虽然一些参数的选取有一点玄学,但是很work
评价
本文用简单的语言描述了word2vec的架构,并提出了Negative Sampling,Subsampling这两个非常novel并且非常work的训练方法,可惜的是没有太多的公式推导过程,后续有时间我会再补上一些细节