在文字的使用上,存在着大量的Synonyms(同义词),比如good、great、marvelous。把这些Synonyms归位同一类,会导致细节的损失。人们从一大堆words中选择word是一个很主观的行为,对词汇的相似性作出准确的定义是非常难的。
通常在NLP中,会将每一个word作为独立的个体,使用one-hot编码对word进行编码,有多少words就有多少长度的编码(对英语来说,speech有20k的words,翻译系统有50k的words),one-hot编码的缺点中在于不能体现出word与word的关联性,因为两个word之间one-hot编码的乘积为0。
要找到一种方法,可以通过点乘两个向量的方法来体现两个word的关联性。Word2Vec使用了Distributional Similarity(分布相似性),通过观察一个句子中某个word上下文的word来得到这个word的值,并且编码为Distributed Representation。
Distributional Similarity是一个关于词汇语义的理论。
Distributed Representation是一种编码方式与one-hot相反。
Word2Vec
有两种常见的算法:
- Skip-Grams:通过中心词(center word)预测周围的词(context word)。
- Continuous Bag of Words(CBOW):通过周围的词预测中心词。
这里介绍没有经过优化的Skip-Grams。
Skip-Gram
定义一个模型,根据一个word
W
t
W_t
Wt来预测上下文context:
P
(
c
o
n
t
e
x
t
∣
W
t
)
=
.
.
.
P(context|W_t)= ...
P(context∣Wt)=...
这个模型的损失函数为:
J
=
1
−
P
(
W
−
t
∣
W
t
)
J=1-P(W_{-t}|Wt)
J=1−P(W−t∣Wt)
这里的
W
−
t
W_{-t}
W−t是
W
t
W_t
Wt周围的words。
注意这里实际上并没有上文和下文的区别, W t W_t Wt前面的word和后面的word对于 W t W_t Wt的意义是相同的。
模型架构
目标函数
θ
\theta
θ是训练参数,目标就是Maximum Likelihood:
(equation1)
max
J
′
(
θ
)
=
∏
t
=
1
T
∏
−
m
≤
j
≤
m
,
j
≠
0
P
(
W
t
+
j
∣
W
t
;
θ
)
\max J'(\theta)=\prod_{t=1}^T\prod_{-m\leq j \leq m,j\neq0}P(W_{t+j}|W_{t};\theta) \tag{equation1}
maxJ′(θ)=t=1∏T−m≤j≤m,j̸=0∏P(Wt+j∣Wt;θ)(equation1)
这里可以对1式通过添加log对连乘进行优化,使之在计算机上计算更加方便(连乘会导致精度不够):
e
q
u
a
t
i
o
n
1
≃
max
log
∏
t
=
1
T
∏
−
m
≤
j
≤
m
,
j
≠
0
P
(
W
t
+
j
∣
W
t
;
θ
)
=
max
∑
t
=
1
T
∑
−
m
≤
j
≤
m
,
j
≠
0
log
P
(
W
t
+
j
∣
W
t
;
θ
)
≃
max
1
T
∑
t
=
1
T
∑
−
m
≤
j
≤
m
,
j
≠
0
log
P
(
W
t
+
j
∣
W
t
;
θ
)
=
min
−
1
T
∑
t
=
1
T
∑
−
m
≤
j
≤
m
,
j
≠
0
log
P
(
W
t
+
j
∣
W
t
;
θ
)
\begin{aligned} equation1 \simeq & \max \log_{} \prod_{t=1}^T\prod_{-m\leq j \leq m,j\neq0}P(W_{t+j}|W_{t};\theta)\\ =& \max \sum_{t=1}^T\sum_{-m\leq j \leq m,j\neq0}\log_{}P(W_{t+j}|W_{t};\theta)\\ \simeq & \max \frac{1}{T} \sum_{t=1}^T\sum_{-m\leq j \leq m,j\neq0}\log_{}P(W_{t+j}|W_{t};\theta)\\ =& \min - \frac{1}{T} \sum_{t=1}^T\sum_{-m\leq j \leq m,j\neq0}\log_{}P(W_{t+j}|W_{t};\theta) \end{aligned}
equation1≃=≃=maxlogt=1∏T−m≤j≤m,j̸=0∏P(Wt+j∣Wt;θ)maxt=1∑T−m≤j≤m,j̸=0∑logP(Wt+j∣Wt;θ)maxT1t=1∑T−m≤j≤m,j̸=0∑logP(Wt+j∣Wt;θ)min−T1t=1∑T−m≤j≤m,j̸=0∑logP(Wt+j∣Wt;θ)
所以目标转化为Minimum Average Negative Log Likelihood:
(euqation2)
min
J
(
θ
)
=
min
−
1
T
∑
t
=
1
T
∑
−
m
≤
j
≤
m
,
j
≠
0
log
P
(
W
t
+
j
∣
W
t
;
θ
)
\min J(\theta) = \min - \frac{1}{T} \sum_{t=1}^T\sum_{-m\leq j \leq m,j\neq0}\log_{}P(W_{t+j}|W_{t};\theta) \tag{euqation2}
minJ(θ)=min−T1t=1∑T−m≤j≤m,j̸=0∑logP(Wt+j∣Wt;θ)(euqation2)
定义P为:
P
(
o
∣
c
)
=
exp
(
u
o
T
v
c
)
∑
i
=
1
V
exp
(
u
i
T
v
c
)
P(o|c)= \frac{\exp(u_o^T v_c)}{\sum_{i=1}^{V}\exp(u_i^T v_c)}
P(o∣c)=∑i=1Vexp(uiTvc)exp(uoTvc)
这里的
θ
\theta
θ是由
u
u
u、
v
v
v这些向量组成的。
这里的
o
o
o和
c
c
c是word在对应one-hot编码的index,
u
o
u_o
uo表示上下文向量,
v
c
v_c
vc表示中心词向量。
u
o
T
v
c
u_o^T v_c
uoTvc的乘积越大,表示这两个字的相关性越高。
优化目标函数
重新表示2式中的
P
P
P:
J
(
θ
)
=
−
1
T
∑
t
=
1
T
∑
−
m
≤
j
≤
m
,
j
≠
0
log
exp
(
u
o
T
v
c
)
∑
i
=
1
V
exp
(
u
i
T
v
c
)
J(\theta) = -\frac{1}{T} \sum_{t=1}^T\sum_{-m\leq j \leq m,j\neq0}\log_{}\frac{\exp(u_o^T v_c)}{\sum_{i=1}^{V}\exp(u_i^T v_c)}
J(θ)=−T1t=1∑T−m≤j≤m,j̸=0∑log∑i=1Vexp(uiTvc)exp(uoTvc)
计算 ∂ ∂ v c \frac{\partial}{\partial v_c} ∂vc∂
把log那一部分提取出来,对
v
c
v_c
vc做偏微分:
(equation3)
∂
∂
v
c
log
exp
(
u
o
T
v
c
)
∑
i
=
1
V
exp
(
u
i
T
v
c
)
=
∂
∂
v
c
log
exp
(
u
o
T
v
c
)
−
∂
∂
v
c
log
∑
i
=
1
V
exp
(
u
i
T
v
c
)
\begin{aligned} \frac{\partial}{\partial v_c} \log_{} \frac{\exp(u_o^T v_c)}{\sum_{i=1}^{V} \exp(u_i^T v_c)} = \frac{\partial}{\partial v_c}\log_{}\exp(u_o^Tv_c) - \frac{\partial}{\partial v_c}\log_{}\sum_{i=1}^{V}\exp(u_i^T v_c) \end{aligned}\tag{equation3}
∂vc∂log∑i=1Vexp(uiTvc)exp(uoTvc)=∂vc∂logexp(uoTvc)−∂vc∂logi=1∑Vexp(uiTvc)(equation3)
把3式分成两个部分处理:
e
q
u
a
t
i
o
n
3
=
e
q
u
a
t
i
o
n
4
−
e
q
u
i
a
t
i
o
n
5
e
q
u
a
t
i
o
n
4
=
∂
∂
v
c
log
exp
(
u
o
T
c
c
)
=
∂
∂
v
c
u
o
T
v
c
=
u
o
e
q
u
a
t
i
o
n
5
=
∂
∂
v
c
log
∑
i
=
1
V
exp
(
u
i
T
v
c
)
=
1
∑
i
=
1
V
exp
(
u
i
T
v
c
)
∂
∂
v
c
∑
x
=
1
V
exp
(
u
x
T
v
c
)
=
1
∑
i
=
1
V
exp
(
u
i
T
v
c
)
∑
x
=
1
V
exp
(
u
x
T
v
c
)
∂
∂
v
c
u
x
T
v
c
=
1
∑
i
=
1
V
exp
(
u
i
T
v
c
)
∑
x
=
1
V
exp
(
u
x
T
v
c
)
u
x
=
∑
x
=
1
V
exp
(
u
x
T
v
c
)
∑
i
=
1
V
exp
(
u
i
T
v
c
)
u
x
=
∑
x
=
1
V
P
(
x
∣
c
)
u
x
\begin{aligned} equation3 =& equation4 - equiation5\\ equation 4 =& \frac{\partial}{\partial v_c} \log_{}\exp(u_o^Tc_c)\\ =& \frac{\partial}{\partial v_c} u_o^T v_c\\ =& u_o\\ equation 5 =& \frac{\partial}{\partial v_c} \log_{} \sum_{i=1}^{V} \exp(u_i^T v_c)\\ =& \frac{1}{\sum_{i=1}^{V} \exp(u_i^T v_c)} \frac{\partial}{\partial v_c} \sum_{x=1}^{V} \exp(u_x^T v_c)\\ =& \frac{1}{\sum_{i=1}^{V} \exp(u_i^T v_c)} \sum_{x=1}^{V} \exp(u_x^T v_c) \frac{\partial}{\partial v_c} u_x^T v_c\\ =& \frac{1}{\sum_{i=1}^{V} \exp(u_i^T v_c)} \sum_{x=1}^{V} \exp(u_x^T v_c) u_x\\ =& \sum_{x=1}^{V} \frac{\exp(u_x^T v_c)}{\sum_{i=1}^{V} \exp(u_i^T v_c)} u_x\\ =& \sum_{x=1}^{V} P(x|c) u_x \end{aligned}
equation3=equation4===equation5======equation4−equiation5∂vc∂logexp(uoTcc)∂vc∂uoTvcuo∂vc∂logi=1∑Vexp(uiTvc)∑i=1Vexp(uiTvc)1∂vc∂x=1∑Vexp(uxTvc)∑i=1Vexp(uiTvc)1x=1∑Vexp(uxTvc)∂vc∂uxTvc∑i=1Vexp(uiTvc)1x=1∑Vexp(uxTvc)uxx=1∑V∑i=1Vexp(uiTvc)exp(uxTvc)uxx=1∑VP(x∣c)ux
综合4、5式,
e
q
u
a
t
i
o
n
3
=
u
o
−
∑
x
=
1
V
P
(
x
∣
c
)
u
x
equation3 = u_o - \sum_{x=1}^{V} P(x|c) u_x
equation3=uo−x=1∑VP(x∣c)ux
前面一项代表的是输出的context vector,后面一项代表的是对于center word来说的每一个可能出现的context vector的加权期望。
计算 ∂ ∂ u o \frac{\partial}{\partial u_o} ∂uo∂
和上面一样:
∂
∂
u
o
log
exp
(
u
o
T
v
c
)
∑
i
=
1
V
exp
(
u
i
T
v
c
)
=
∂
∂
u
o
log
exp
(
u
o
T
v
c
)
−
∂
∂
u
o
∑
i
=
1
V
log
exp
(
u
i
T
v
c
)
=
∂
∂
u
o
u
o
T
v
c
−
∂
∂
u
o
∑
i
=
1
V
log
exp
(
u
i
T
v
c
)
=
v
c
−
1
∑
i
=
1
V
exp
(
u
i
T
v
c
)
∑
x
=
1
V
∂
∂
u
o
exp
(
u
x
T
v
c
)
=
v
c
−
exp
(
u
o
T
v
c
)
v
c
∑
i
=
1
V
exp
(
u
i
T
v
c
)
\begin{aligned} \frac{\partial}{\partial u_o} \log{} \frac{\exp(u_o^T v_c)} {\sum_{i=1}^{V} \exp(u_i^T v_c)} =& \frac{\partial}{\partial u_o} \log{}\exp(u_o^T v_c) - \frac{\partial}{\partial u_o}\sum_{i=1}^{V} \log{}\exp(u_i^T v_c) \\ =& \frac{\partial}{\partial u_o} u_o^T v_c - \frac{\partial}{\partial u_o}\sum_{i=1}^{V}\log{} \exp(u_i^T v_c) \\ =& v_c - \frac{1}{\sum_{i=1}^{V}\exp(u_i^T v_c)}\sum_{x=1}^{V}\frac{\partial}{\partial u_o}\exp(u_x^T v_c)\\ =& v_c - \frac{\exp(u_o^T v_c)v_c}{\sum_{i=1}^{V}\exp(u_i^Tv_c)} \end{aligned}
∂uo∂log∑i=1Vexp(uiTvc)exp(uoTvc)====∂uo∂logexp(uoTvc)−∂uo∂i=1∑Vlogexp(uiTvc)∂uo∂uoTvc−∂uo∂i=1∑Vlogexp(uiTvc)vc−∑i=1Vexp(uiTvc)1x=1∑V∂uo∂exp(uxTvc)vc−∑i=1Vexp(uiTvc)exp(uoTvc)vc