寒假时间花了十多天看完了CS22N 2019的19节课程,边看视频边做笔记写了20多页的A4纸,纸质稿写完了就容易记完就丢弃了,所以把它写成电子版一并再写写个人心得整理一下。
1. Word Vector
one-hot向量
v
w
1
=
[
1
,
0
,
0
,
0
,
0
,
0
,
.
.
.
]
∈
R
v
o
c
a
b
s
i
z
e
v_{w1} = [1,0,0,0,0,0,...]\in R^{vocabsize}
vw1=[1,0,0,0,0,0,...]∈Rvocabsize
v
w
2
=
[
0
,
1
,
0
,
0
,
0
,
0
,
.
.
.
]
∈
R
v
o
c
a
b
s
i
z
e
v_{w2} = [0,1,0,0,0,0,...]\in R^{vocabsize}
vw2=[0,1,0,0,0,0,...]∈Rvocabsize
该单词对应所在元素为1,向量中其他元素均为0
one-hot十分稀疏 ,维度较大。sparse vector,人们希望构建dense vector,大多数元素不为零且维度较小的向量,并且希望在相似的context下的word vector也较为相似。
于是有了Word2Vec(2013)
核心思想就是已知我们有了很大的文本库(corpus),当我们用固定窗口不断的扫过文本库的句子时,我们有位于中间的center word c及其周边的单词们context words o, 而它们的相似度可用给定c的情况下o的条件概率来表示,我们不断的调整word vector使得这个概率最大化。
P ( O = o ∣ C = c ) = e x p ( u o T v c ) ∑ w ∈ V o c a b e x p ( u w T v c ) P(O=o| C=c) = \frac {exp(u_{o}^{T}v_{c})}{\sum_{w\in Vocab}exp(u_{w}^{T}v_{c})} P(O=o∣C=c)=∑w∈Vocabexp(uwTvc)exp(uoTvc)
条件概率就可写作center word和context word的dot product再对其做softmax运算
分母可以看作是center word对每个词都做点积在求其exp再把所有加和
为了运用到neutral network中,机器学习领域通用招数都是对问题考虑后建模构造出目标函数,从而求得一组最优的参数,利用这个参数用模型进行预测。(这里模型是Skip-Gram model)
利用最大似然可把目标函数写成
L
(
θ
)
=
∏
w
∈
C
p
(
C
o
n
t
e
x
t
(
w
)
∣
w
)
L(θ)=\prod_{w \in C} p(Context(w)|w)
L(θ)=w∈C∏p(Context(w)∣w)
C代表Corpus,Context(w)代表w的上下文
这里整体的似然率表示成了
L
(
θ
)
=
∏
t
=
1
T
∏
−
m
≤
j
≤
m
p
(
w
t
+
j
∣
w
t
;
θ
)
L(θ)=\prod_{t=1}^T\prod_{-m≤j≤m} p(w_{t+j}|w_{t};θ)
L(θ)=t=1∏T−m≤j≤m∏p(wt+j∣wt;θ)
为了方便计算将目标函数添加了log和负号,变成累加和和转化为求极小值
J ( θ ) = − 1 T log L ( θ ) = − 1 T ∑ t = 1 T ∑ − m ≤ j ≤ m log p ( w t + j ∣ w t ; θ ) J(θ)=-\frac {1}{T}\log L(θ) = -\frac {1}{T} \sum_{t=1}^T\sum_{-m≤j≤m} \log p(w_{t+j}|w_{t};θ) J(θ)=−T1logL(θ)=−T1t=1∑T−m≤j≤m∑logp(wt+j∣wt;θ)
有了目标函数以及每个条件概率的表现形式,我们就可以利用梯度下降算法来逐步求得使目标函数最小的word vector的形式了。
图示理解word2vec (shik-gram模型)
word2vec其实是很简单的只有三层结构的神经网络
skip-gram网络结构,V是vocabSize,x是one-hot编码,y是这个V个词上输出的概率
x
,
y
∈
R
V
x,y \in R^{V}
x,y∈RV
在skip-gram中y再经过softmax后其实就是预测的每个环境词的概率,我们希望和真实的y的one-hot编码一致,其实这一步就对应着极大化目标函数argmax L(θ)或者是极小化损失函数argmin J(θ),其中
L
(
θ
)
=
∏
t
=
1
T
∏
−
m
≤
j
≤
m
p
(
w
t
+
j
∣
w
t
;
θ
)
L(θ)=\prod_{t=1}^T\prod_{-m≤j≤m} p(w_{t+j}|w_{t};θ)
L(θ)=t=1∏T−m≤j≤m∏p(wt+j∣wt;θ)
J ( θ ) = − 1 T log L ( θ ) = − 1 T ∑ t = 1 T ∑ − m ≤ j ≤ m log p ( w t + j ∣ w t ; θ ) J(θ)=-\frac {1}{T}\log L(θ) = -\frac {1}{T} \sum_{t=1}^T\sum_{-m≤j≤m} \log p(w_{t+j}|w_{t};θ) J(θ)=−T1logL(θ)=−T1t=1∑T−m≤j≤m∑logp(wt+j∣wt;θ)
p ( O = o ∣ C = c ) = e x p ( u o T v c ) ∑ w ∈ V o c a b e x p ( u w T v c ) p(O=o| C=c) = \frac {exp(u_{o}^{T}v_{c})}{\sum_{w\in Vocab}exp(u_{w}^{T}v_{c})} p(O=o∣C=c)=∑w∈Vocabexp(uwTvc)exp(uoTvc)
当模型训练完后,最后得到的其实是神经网络的权重(lookup table),每一行就对应着一个word embedding vector。
边角料:每次计算出的隐藏层其实就是公式中的vc,公式中的uw,uo其实是输出向量,这也是为什么中心词向量和环境词向量用不同字母表示的原因,它们不在同一个矩阵中,其实隐含层到输出层的权重也可以作为lookup Table,也是一种词向量的表示方式,不过我们一般使用的是输入层到隐藏层的权重(Mikolov, Distributed Representations of Sentences and Documents),手绘理解图如下:
当y由多个词时,网络结构如下
可以看成是 单个x->单个y 模型的并联,cost function 是单个 cost function 的累加(取log之后)(Xin Rong,『word2vec Parameter Learning Explained』)