本文目录
前言
最近在学习CS224N Deep Learning in NLP 2019 Winter课程,意在将之前所了解用到的NLP形成体系化知识,打算开一个专题持续记录学习过程中的笔记和感悟。由于博客内容主要是边看边记的笔记,有可能因为自身理解不完整存在一些错误,希望能够纠正并指出。最佳建议还是配合视频与PPT共同服用。
相关资料:
1.课程YouTube视频地址
2.课程主页地址
3.本人整理的GitHub地址,包含Slides&Assignments&Notes
本篇博客主题:Lecture1&2 Word Vector Representation:Word2Vec
Lecture2:Word Vector Representations:Word2Vec
1.Word Meaning
one-hot 向量表示:[0,0,0,…,1,0,0,…] 无法表示相似关系,点积为0
分布式相似性:通过查看上下文来表示单词的含义,使用向量进行分布式表示
如何去学习一个关于词嵌入的神经网络模型:
首先定义一个模型用于预测一个单词Wt和上下文的概率关系:
p
(
c
o
n
t
e
x
t
∣
w
t
)
=
.
.
.
p(context|w_t) = ...
p(context∣wt)=...
再定义一个损失函数:
J
=
1
−
p
(
w
−
t
∣
w
t
)
其
中
w
t
表
示
t
位
置
的
w
o
r
d
,
w
−
t
表
示
除
去
t
之
外
的
其
他
单
词
J = 1 - p(w_{-t}|w_t)\\其中w_t表示t位置的word,w_{-t}表示除去t之外的其他单词
J=1−p(w−t∣wt)其中wt表示t位置的word,w−t表示除去t之外的其他单词
通过在大量语料中计算不同位置t对应的概率和loss,通过改变单词的表示不断减小loss
2.Word2Vec introduction
基本思想:使用词义理论,来预测每个单词及其上下文单词
两种算法:
-
Skip-grams(SG):通过给定目标来预测上下文单词(与位置无关)
在每个估算步骤中,将一个单词作为中心词,在某种窗口大小下预测其上下文可能出现的单词,具体做法:对每个单词从1到T,预测在一个半径m范围内的附近单词出现的概率并使其最大化。
-
Continuous Bag of Words(CBOW):连续词袋模型,从上下文词袋中预测目标单词
两种中等效率的训练算法:
-
Hierarchical softmax
层次softmax,使用霍夫曼树加快训练速度
-
Negative sampling
Negative Sampling主要思想:
利用正例和一定量的负例训练一个二分类的LogisticRegressions模型.
论文中的目标函数公式: J ( θ ) = 1 T ∑ t = 1 T J t ( θ ) J(\theta)=\frac{1}{T}\sum^{T}_{t=1}J_t(\theta) J(θ)=T1∑t=1TJt(θ) 其中:
J t ( θ ) = l o g σ ( u o T v c ) + ∑ i = 1 k E j P ( w ) [ l o g σ ( − u j T v c ) ] 其 中 σ ( x ) = 1 1 + e − x J_t(\theta) = log\sigma(u_o^Tv_c) + \sum_{i=1}^{k}\Epsilon_{j~P(w)}[log\sigma(-u^T_jv_c)]\\ 其中 \sigma(x) = \frac{1}{1+e^{-x}} Jt(θ)=logσ(uoTvc)+i=1∑kEj P(w)[logσ(−ujTvc)]其中σ(x)=1+e−x1
3.Word2Vec objective function gradients
目标函数:最大化当前给定中心词的上下文单词的出现概率
L
i
k
e
l
i
h
o
o
d
=
L
(
θ
)
=
∏
t
=
1
T
∏
−
m
≦
j
≦
m
,
j
≠
0
p
(
w
t
+
j
∣
w
t
;
θ
)
(
1
)
Likelihood = L(θ) = \prod^T_{t=1}\prod_{-m≦j≦m,j≠0}p(w_{t+j}|w_t;θ) (1)
Likelihood=L(θ)=t=1∏T−m≦j≦m,j̸=0∏p(wt+j∣wt;θ)(1)
使用负对数似然估计,转化为最小化J(θ):
J
(
θ
)
=
−
1
T
l
o
g
(
L
(
θ
)
)
=
−
1
T
∑
t
=
1
T
∑
−
m
≦
j
≦
m
,
j
≠
0
l
o
g
P
(
w
t
+
j
∣
w
t
;
θ
)
(
2
)
其
中
θ
表
示
优
化
的
参
数
J(θ) =-\frac{1}{T}log(L(θ)) =-\frac{1}{T}\sum^T_{t=1}\sum_{-m≦j≦m,j≠0}logP(w_{t+j}|w_t;θ) (2)\\其中\theta表示优化的参数
J(θ)=−T1log(L(θ))=−T1t=1∑T−m≦j≦m,j̸=0∑logP(wt+j∣wt;θ)(2)其中θ表示优化的参数
相关细节:
p
(
o
∣
c
)
=
e
x
p
(
u
o
T
v
c
)
∑
w
=
1
v
e
x
p
(
u
w
T
v
c
)
(
3
)
其
中
c
和
o
是
词
汇
空
间
中
的
索
引
,
即
单
词
类
型
;
u
o
是
与
索
引
o
和
c
的
上
下
文
单
词
相
关
联
的
向
量
v
c
是
与
中
心
词
相
关
联
的
向
量
p(o|c) = \frac{exp(u_o^Tv_c)}{\sum^v_{w=1}exp(u_w^Tv_c)} (3)\\其中c和o是词汇空间中的索引,即单词类型;u_o是与索引o和c的上下文单词相关联的向量\\v_c是与中心词相关联的向量
p(o∣c)=∑w=1vexp(uwTvc)exp(uoTvc)(3)其中c和o是词汇空间中的索引,即单词类型;uo是与索引o和c的上下文单词相关联的向量vc是与中心词相关联的向量
(3)式中的分子使用指数函数保证点积非负,看做概率处理
其中 u o T v c u_o^Tv_c uoTvc表示 o o o与 c c c的向量点积, u T v = u . v = ∑ i = 1 n u i v i u^Tv=u.v=\sum^n_{i=1}u_iv_i uTv=u.v=∑i=1nuivi
(3)式中的分母对整个词汇表进行归一化以给出概率分布
(3)式其实就是一种softmax,将实数值
x
i
x_i
xi映射为一个概率分布
p
i
p_i
pi,即
s
o
f
t
m
a
x
(
x
i
)
=
e
x
p
(
x
i
)
∑
j
=
1
n
e
x
p
(
x
j
)
=
p
i
softmax(x_i) = \frac{exp(x_i)}{\sum^{n}_{j=1}exp(x_j)}=p_i
softmax(xi)=∑j=1nexp(xj)exp(xi)=pi
我们对(3)式进行对数求偏导:
∂
∂
v
c
(
l
o
g
e
x
p
(
u
o
T
v
c
)
∑
w
=
1
v
e
x
p
(
u
w
T
v
c
)
)
=
∂
∂
v
c
l
o
g
exp
(
u
o
T
v
c
)
−
∂
∂
v
c
l
o
g
∑
w
=
1
v
e
x
p
(
u
w
T
v
c
)
\frac{∂}{∂v_c}(log\frac{exp(u_o^Tv_c)}{\sum^v_{w=1}exp(u_w^Tv_c)})=\frac{∂}{∂v_c}log\exp(u_o^Tv_c) -\frac{∂}{∂v_c} log\sum^v_{w=1}exp(u_w^Tv_c)
∂vc∂(log∑w=1vexp(uwTvc)exp(uoTvc))=∂vc∂logexp(uoTvc)−∂vc∂logw=1∑vexp(uwTvc)
前一项对数与指数抵消,结果就是
∂
∂
v
c
u
o
T
v
c
\frac{∂}{∂v_c}u_o^Tv_c
∂vc∂uoTvc,求偏导结果为
u
o
u_o
uo
后一项使用链式求导规则进行求导得到。
推导过程:
当做复合函数求偏导,记
l
o
g
∑
w
=
1
v
e
x
p
(
u
o
T
v
c
)
=
f
(
g
(
v
c
)
)
log\sum_{w=1}^{v}exp(u_o^Tv_c)=f(g(v_c))
log∑w=1vexp(uoTvc)=f(g(vc))则有:
原
式
=
1
g
(
v
c
)
.
∂
∂
v
c
g
(
v
c
)
=
1
∑
w
=
1
v
e
x
p
(
u
o
T
v
c
)
.
∑
x
=
1
v
∂
∂
v
c
e
x
p
(
u
x
T
v
c
)
=
1
∑
w
=
1
v
e
x
p
(
u
o
T
v
c
)
.
∑
x
=
1
v
e
x
p
(
u
x
T
v
c
)
∂
∂
v
c
(
u
x
T
v
c
)
=
1
∑
w
=
1
v
e
x
p
(
u
o
T
v
c
)
.
∑
x
=
1
v
e
x
p
(
u
x
T
v
c
)
.
(
u
x
)
=
∑
x
=
1
v
e
x
p
(
u
x
T
v
c
)
∑
x
=
1
v
e
x
p
(
u
w
T
v
c
)
.
u
x
进
一
步
表
示
成
∑
x
=
1
v
p
(
x
∣
c
)
.
u
x
\begin{aligned} 原式=&\frac{1}{g(v_c)}.\frac{∂}{∂v_c}g(v_c)\\=&\frac{1}{\sum_{w=1}^vexp(u_o^Tv_c)}.\sum_{x=1}^{v}\frac{∂}{∂v_c}exp(u_x^Tv_c)\\=&\frac{1}{\sum_{w=1}^vexp(u_o^Tv_c)}.\sum_{x=1}^{v}exp(u_x^Tv_c)\frac{∂}{∂v_c}(u_x^Tv_c)\\=&\frac{1}{\sum_{w=1}^vexp(u_o^Tv_c)}.\sum_{x=1}^{v}exp(u_x^Tv_c).(u_x)\\ =&\sum_{x=1}^v\frac{exp(u_x^Tv_c)}{\sum_{x=1}^vexp(u_w^Tv_c)}.u_x \\ \\&进一步表示成\sum_{x=1}^vp(x|c).u_x \end{aligned}
原式=====g(vc)1.∂vc∂g(vc)∑w=1vexp(uoTvc)1.x=1∑v∂vc∂exp(uxTvc)∑w=1vexp(uoTvc)1.x=1∑vexp(uxTvc)∂vc∂(uxTvc)∑w=1vexp(uoTvc)1.x=1∑vexp(uxTvc).(ux)x=1∑v∑x=1vexp(uwTvc)exp(uxTvc).ux进一步表示成x=1∑vp(x∣c).ux
即最终的优化结果为
∂
∂
v
c
l
o
g
P
(
o
∣
c
)
=
u
o
−
∑
x
=
1
v
p
(
x
∣
c
)
.
u
x
\frac{∂}{∂v_c}logP(o|c)=u_o - \sum_{x=1}^vp(x|c).u_x \\
∂vc∂logP(o∣c)=uo−x=1∑vp(x∣c).ux
其中
u
o
u_o
uo表示实际观察到的输出上下文单词的向量,
p
(
x
∣
c
)
p(x|c)
p(x∣c)表示对应每个单词x对应于在出现上下文c的情况下的概率值,作为期望值,乘以
u
x
u_x
ux,进行求和
4.Optimization: Gradient Descent
我们有了一个loss函数 J ( θ ) J(\theta) J(θ),我们的目标就是最小化loss函数,而使用的方法就是梯度下降算法。
核心思想:对当前的 θ \theta θ的值,计算 J ( θ ) J(\theta) J(θ)的梯度,然后在沿着负梯度的方向走一小步,重复此过程,即为梯度下降算法
Gradient Descent
从矩阵角度更新等式:
θ
n
e
w
=
θ
o
l
d
−
α
▽
θ
J
t
(
θ
)
其
中
α
表
示
学
习
率
θ^{new} = θ^{old} - α▽_θJ_t(θ)\\ 其中\alpha表示学习率
θnew=θold−α▽θJt(θ)其中α表示学习率
从单个参数角度更新等式:
θ
n
e
w
=
θ
o
l
d
−
α
∂
∂
θ
j
o
l
d
J
(
θ
)
\theta^{new} = \theta^{old} - \alpha\frac{\partial}{\partial\theta^{old}_{j}}J(θ)
θnew=θold−α∂θjold∂J(θ)
Q:使用上式会存在什么问题呢?
A: J ( θ ) J(\theta) J(θ)是对整个语料的所有窗口的loss函数,对其求梯度计算量太大
Solution:使用随机梯度下降(Stochastic Gradient Descent):
每次随机采样部分窗口,使用梯度下降算法
while True:
window = sample_window(corpus)
theta_grad = evaluate_gradient(J,window,theta)
theta = theta - alpha * theta_grad
5.Usefulness of Word2Vec
Word2Vec最大的问题在于无法解决多义词问题,同一个单词具有多个意思时,在不同的语境中的含义其实是不同的,但是Word2Vec并不能较好地解决这一点。
6. Glove
核心思想:使用一个共现矩阵X
两种方式:窗口和整个文档
窗口:类似于w2v,对每个单词使用一个滑动窗口,同时获取语法信息和语义信息
单词-文档共现矩阵:
但存在很多问题:词汇越来越多,维度越来越高,后续的分类模型存在稀疏性问题,模型不够鲁棒
如何解决呢:存储包含了尽可能多的重要信息的低维向量,通常为25-1000维,那么如何降维呢:奇异值分解
对任意一个矩阵X,都可以分解为 U E V T U\Epsilon V^T UEVT,其中 E \Epsilon E表示对角矩阵
目标函数:
w i ⋅ w j = l o g P ( i ∣ j ) w_i\cdot{w_j}=logP(i|j) wi⋅wj=logP(i∣j)
J = ∑ i , j = 1 V f ( X i j ) ( w i T w j ~ + b i + b j ~ − l o g X i , j ) 2 J=\sum^{V}_{i,j=1}f(X_{ij})(w^T_i\tilde{w_j}+b_i+\tilde{b_j}-logX_{i,j})^2 J=∑i,j=1Vf(Xij)(wiTwj~+bi+bj~−logXi,j)2