CS224N-2019-Winter Lecture1&2 学习记录

本文目录

  • 前言
  • Lecture2:Word Vector Representations:Word2Vec
    • 1.Word Meaning
    • 2.*Word2Vec introduction*
    • 3.*Word2Vec objective function gradients*
    • 4.*Optimization: Gradient Descent*
    • *5.Usefulness of Word2Vec*
    • *6. Glove*

前言

最近在学习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(contextwt)=...
再定义一个损失函数:
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=1p(wtwt)wttwordwtt
通过在大量语料中计算不同位置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(θ)=T1t=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=1kEj P(w)[logσ(ujTvc)]σ(x)=1+ex1

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=1Tmjm,j̸=0p(wt+jwt;θ)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=1Tmjm,j̸=0logP(wt+jwt;θ)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(oc)=w=1vexp(uwTvc)exp(uoTvc)3couoocvc
(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(logw=1vexp(uwTvc)exp(uoTvc))=vclogexp(uoTvc)vclogw=1vexp(uwTvc)
前一项对数与指数抵消,结果就是 ∂ ∂ v c u o T v c \frac{∂}{∂v_c}u_o^Tv_c vcuoTvc,求偏导结果为 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)) logw=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.vcg(vc)w=1vexp(uoTvc)1.x=1vvcexp(uxTvc)w=1vexp(uoTvc)1.x=1vexp(uxTvc)vc(uxTvc)w=1vexp(uoTvc)1.x=1vexp(uxTvc).(ux)x=1vx=1vexp(uwTvc)exp(uxTvc).uxx=1vp(xc).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 \\ vclogP(oc)=uox=1vp(xc).ux
其中 u o u_o uo表示实际观察到的输出上下文单词的向量, p ( x ∣ c ) p(x|c) p(xc)表示对应每个单词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αθjoldJ(θ)
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) wiwj=logP(ij)

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

你可能感兴趣的