word2vec Skip-Gram model的理解
参考文献
Efficient Estimation of Word Representations in Vector Space
Distributed Representations of Words and Phrases and their Compositionality
运用word2vec的目的
- 在此之前大家更多得使用one-hot向量去表示单词,这些单词就像坐落在字典中一样,彼此之间无任何联系。这种计数虽然简单,健壮(robust),并且在少数据得情况下能比许多复杂系统表现好,但是在许多任务中受限,比如自动语音识别中,数据是否高清影响很大(意即机器无法去有效推测语句),以及在机翻过程中,某些语言文本量太小,导致这种简单方法无法使机翻有显著进步。
- 希望能通过海量得单词文本中训练高质量的单词向量,是的相似的单词能互相接近,即有多方面相似性(multiple degrees of similarity)
- 建立一个简单的NNLM(Neural Network Language Model)模型,只有一层隐藏层,word vector就是用这个训练出来的。
- 有了这个word vectors可以提高和简化许多NLP的应用
模型结构
computational complexity:计算复杂度,一个模型需要access to 训练的参数量的次数,建立模型的好坏的评价标准使最大化accuracy的同时保证最小化computation complexity (CC).
C
C
∝
O
=
E
×
T
×
Q
CC \propto O = E \times T\times Q
CC∝O=E×T×Q
E
:
E:
E: Training epoch,
T
:
T:
T: number of words in the trainning set,
Q
:
Q:
Q: deficed further for each model architecture.
Common choice:
E
=
3
−
50
E =3-50
E=3−50,
T
>
1
T> 1
T>1 billion, 所有模型使用SGD和backpropagation.
在这文章之前提出的模型:
1. Feedforward Neural Net Language Model (NNLM)
包含input, projection, hidden, and output层
- input 层: 编码 N N N个单词,使用 1-of- V V V 编码(1-hot coding), V V V代表词汇量。
- projection 层: 维度 N × D N\times D N×D, 使用一个共享投影矩阵,只有当N足够小时,这一层的操作才会cheap。
- hidden 层:projection layer 与 hidden layer之间计算比较复杂,因为projection layer层的值致密 (dense,这里表示不像one-hot,每列只有一个1),这两层之间的运算复杂度(每个训练例子)为 Q = N × D × H Q = N\times D \times H Q=N×D×H
- output 层,因为是为了得到词汇中所有单词的概率分布,所以输出维度时 V V V。
因此每个训练例子的 C C = N × D + N × D × H + H × V CC = N\times D +N\times D \times H+H\times V CC=N×D+N×D×H+H×V, 最后一项一般最大。不过有许多实际的解决方法去规避这么大的计算: 用hierarchical softmax或者在训练中避免对数据进行normalized. 通过二叉树(binary tree)来表示词汇,输出单元的量能下降到 l o g 2 ( V ) log_2(V) log2(V), 因此,实际上,最大的复杂度来自于中间一项。
文章中,他们就是用了hierarchical softmax 并将词汇表征成Huffman binary tree. (Huffman trees assign short binary codes to frequent words, and this further reduces the number of output units that need to be evaluated: while balanced binary tree would require log2(V) outputs to be evaluated, the Huffman tree based hierarchical softmax requires only about log2(Unigram perplexity(V)),后面需要花点时间明白Huffman Tree).
为了进一步加快效率,文章后面还提出了不包含hidden layer的结构,这样的化训练速度严重依赖于softmax normalization.
2. Recurrent Neural Net Language Model (RNNLM)
这个模型主要也是为了克服feedforward NNLM的主要限制,比如需要特别说明context length,同时理论上RNN能比浅层NN有效代表更多复杂的图案。RNN模型没有projection layer,只有 input, hidden 和 output 层, 需要特别说明的是这个模型的Recurrent Matrix主要将hidden层通过time-delay connection连向自己,这样可以让模型拥有一定的短期记忆。
复杂度: Q = H × H + H × V Q = H\times H + H\times V Q=H×H+H×V
需要注意的是word representation D D D 和hidden layer H H H 维度一致(否则hidden layer与自己相连过程中必然会做一些降维或升维计算)。同样的, H × V H\times V H×V 能通过hierarchical softmax有效减小到 H × l o g 2 ( V ) H\times log_2(V) H×log2(V)。最高复杂度取决于前面一项。
3. Parallel Training of Neural Networks
使用并行计算的框架来减少时间
4. New Log-Linear Models
从前几个模型中,我们发现主要的Computation Complexity来源于模型中的非线性hidden层,一般来说这一层对于神经网络很重要,但为了让训练更加高效(当然会牺牲一点精确性),文章作者想要探索更简单的模型。 通常的神经网络语言模型能被成功得用两步来训练:
- 通过简单模型训练处word vector
- N-gram NNLM 在已经训练好得单词表达分布得基础上进行训练
这些新模型会专注于第一步
4.1 CBOW: Continuous Bag-of-Words Model
相似于Feedforward NNLM, 不过非线性hidden层被移除并且projection层对所有单词共享(而不只是projection matrix),因此,所有单词被投射到同一位置并平均,这种结构被称作bag-of-words model. Training Complexity is Q = N × D + D × l o g 2 ( V ) Q = N\times D + D\times log_2(V) Q=N×D+D×log2(V). 另外,continuous表示文章用了continuous distributed representation of the context。(不太明白这个)
4.2 Continuous Skip-gram Model
这个模型和上一个也很相似,但是它不是基于context去预测现在的单词,而是尝试最大化某个词的分类,而这个最大化时基于同一句话的另一个单词。或者说,文章每次使用当前单词输入进入一个log-linear classifier有着连续的projection层,并且预测一定范围内的单词(在输入单词前和后几位的)。显然,增加预测的范围会提高computational complexity,但同时也提高了得到的word vectors的质量。
Training Complexity is
Q
=
C
×
(
D
+
D
×
l
o
g
2
(
V
)
)
Q = C\times(D + D\times log_2(V))
Q=C×(D+D×log2(V)). 这里的解释感觉很模糊,看看下一篇论文。
4.3 The Skip-gram Model: mathematical description
给定一段连续的单词序列
w
1
,
w
2
,
w
3
,
.
.
.
,
w
T
w_1, w_2, w_3,...,w_T
w1,w2,w3,...,wT, Skip-gram 模型的目的时最大化平均log概率
1
T
Σ
t
=
1
T
Σ
−
c
≤
j
≤
c
,
j
≠
0
log
p
(
w
t
+
j
∣
w
t
)
\frac{1}{T}\Sigma^T_{t=1}\Sigma_{-c \leq j\leq c,j\neq 0}\log p(w_{t+j}|w_t)
T1Σt=1TΣ−c≤j≤c,j=0logp(wt+j∣wt)
其中
c
c
c是training context的size, 越大会导致更大的accuracy,但也会导师更长的training time. 在模型中
p
(
w
t
+
j
∣
w
t
)
p(w_{t+j}|w_t)
p(wt+j∣wt)可以用softmax function来表示:
p
(
w
O
∣
w
I
)
=
exp
(
v
′
w
O
T
v
′
w
I
)
Σ
w
=
1
W
exp
(
v
′
w
T
v
′
w
I
)
p(w_O|w_I) = \frac{\exp({v'}_{w_O}^{T}{v'}_{w_I})}{\Sigma_{w=1}^W \exp({v'}_{w}^{T}{v'}_{w_I})}
p(wO∣wI)=Σw=1Wexp(v′wTv′wI)exp(v′wOTv′wI)
W
W
W是词汇中单词的编号,这个公式不太实用,原因是当我们计算
∇
log
p
(
w
O
∣
w
I
)
\nabla\log p(w_O|w_I)
∇logp(wO∣wI)的cost正比于W,这个cost是非常大的。
4.3.1 Hierarchical Softmax
Hierarchical Softmax 使用二叉树表示的方法,将W个单词作为它的也来表示,并且对每一个节点,还会有与其子节点的相对条件概率。更准确得说,每个单词
w
w
w能通过合适路径从root到该单词对应节点,如果
n
(
w
,
j
)
n(w,j)
n(w,j)是从root到w的第j个节点,
L
(
w
)
L(w)
L(w)表示路径长度,从而可以知道
n
(
w
,
1
)
=
root
n(w,1) = \text{root}
n(w,1)=root, 而
n
(
w
,
L
(
w
)
)
=
w
n(w,L(w)) = w
n(w,L(w))=w. 除此以外,对于任意路径以内的节点n,假设
ch
(
n
)
\text{ch}(n)
ch(n) 是n的一个随机后代,并且
[
[
x
]
]
=
1
[[x]] = 1
[[x]]=1 如果x为真,反之为
−
1
-1
−1, 从而hierarchical softmax可以表示为
p
(
w
O
∣
w
I
)
=
∏
j
=
1
L
(
w
)
−
1
σ
(
[
[
n
(
w
,
j
+
1
)
=
ch
(
n
(
w
,
j
)
)
]
]
⋅
v
′
n
(
w
,
j
)
T
v
w
I
)
p(w_O|w_I) = \prod^{L(w)-1}_{j=1} \sigma([[n(w,j+1) = \text{ch}(n(w,j))]]\cdot {v'}_{n(w,j)}^Tv_{w_I})
p(wO∣wI)=j=1∏L(w)−1σ([[n(w,j+1)=ch(n(w,j))]]⋅v′n(w,j)TvwI)
其中,
σ
(
x
)
\sigma(x)
σ(x)是sigmoid函数,切可以证明
Σ
w
=
1
W
p
(
w
∣
w
I
)
=
1
\Sigma_{w=1}^W p(w|w_I) = 1
Σw=1Wp(w∣wI)=1,这个很重要,保证了不用normalization. 这也暗示了计算的cost正比于
L
(
w
O
)
<
log
(
W
)
L(w_O)<\log(W)
L(wO)<log(W)
4.3.2 Negative Sampling
一个替代hierachical softmax的方法是Noise Contrastive Estimation (NCE), NCE 方法说明一个好的模型序用能够通过Logistic Regression将数据从噪音中分离出来。
虽然NCE被认为可以最大化softmax的log probability,但是 Skip-Gram model只关心训练高质量的vector representation, 因此我们可以简化NCE只要它的vector representation能保留质量。
文中作者定义Negative sampling(NEG)
log
σ
(
v
′
w
O
T
v
w
I
)
+
Σ
i
=
1
k
E
w
i
∼
P
n
(
w
)
[
log
σ
(
−
v
′
w
i
T
v
w
I
)
]
\log\sigma({v'}_{w_O}^Tv_{w_I}) + \Sigma^k_{i=1}\mathcal{E}_{w_i\sim P_n(w)}[\log\sigma(-{v'}_{w_i}^Tv_{w_I})]
logσ(v′wOTvwI)+Σi=1kEwi∼Pn(w)[logσ(−v′wiTvwI)]
用上述表达去代替Skip-gram 模型中的每一个
log
p
(
w
O
∣
w
I
)
\log p(w_O|w_I)
logp(wO∣wI)。 因此,任务变成了用logistic regression将目标单词
w
O
w_O
wO从noise distribution
P
n
(
w
)
P_n(w)
Pn(w) 中分辩出来。 实验结果显示,当k值在5-20时对小训练集效果较好,而对大数据集,可以设置2-5. 对
P
n
(
w
)
P_n (w)
Pn(w),实验结果表明Unigram Distribution
U
(
w
)
3
/
4
/
Z
U(w)^{3/4}/Z
U(w)3/4/Z 比Unigram Distribution和Uniform Distribution效果要好
3.4.3 Subsampling of Frequent Word
许多频率很高的词经常无法给我们的模型提供很多信息,为了减少sample这些词的频率,我们选择用了一个简单的subsampling approach,每个训练集中的单词有如下概率被discard舍弃:
P
(
w
i
)
=
1
−
t
f
(
w
i
)
P(w_i) = 1-\sqrt{\frac{t}{f(w_i)}}
P(wi)=1−f(wi)t
t
t
t 是一个可选择的阈值,通常大约
1
0
−
5
10^{-5}
10−5, Subsampling 在实际中运用很好,它加速训练甚至提高了训练的稀有单词word vector的准确性。