乐趣区

关于自然语言处理:斯坦福NLP课程-第2讲-词向量进阶

作者:韩信子 @ShowMeAI,路遥 @ShowMeAI,奇异果 @ShowMeAI
教程地址:http://www.showmeai.tech/tutorials/36
本文地址:http://www.showmeai.tech/article-detail/233
申明:版权所有,转载请分割平台与作者并注明出处

珍藏 ShowMeAI 查看更多精彩内容


ShowMeAI 为 斯坦福 CS224n《自然语言解决与深度学习 (Natural Language Processing with Deep Learning)》课程的全副课件,做了 中文翻译和正文,并制作成了 GIF 动图!

本讲内容的 深度总结教程 能够在 这里 查看。视频和课件等材料的获取形式见 文末

引言

CS224n 是顶级院校斯坦福出品的深度学习与自然语言解决方向专业课程。核心内容笼罩 RNN、LSTM、CNN、transformer、bert、问答、摘要、文本生成、语言模型、浏览了解等前沿内容。

本篇是 ShowMeAI 对第 2 课的内容梳理,内容笼罩词嵌入 / 词向量,word vectors 和 word senses。

本篇内容笼罩

  • word2vec 与词向量回顾
  • 算法优化根底
  • 计数与共现矩阵
  • GloVe 模型
  • 词向量评估
  • word senses

1.word2vec 与词向量回顾

1.1 温习:word2vec 的次要思维

咱们来回顾一下 ShowMeAI 上一篇 1.NLP 介绍与词向量初步 提到的 word2vec 模型外围常识

  • 模型会遍历整个语料库中的每个单词
  • 应用核心单词向量预测四周的单词(Skip-Gram)

$$
P(o | c)=\frac{\exp \left(u_{o}^{T} v_{c}\right)}{\sum_{w \in V} \exp \left(u_{w}^{T} v_{c}\right)}
$$

  • 更新向量(参数)以便更好地预测上下文

1.2 Word2vec 参数和计算

咱们对 word2vec 的参数和训练细节等做一个补充解说:

  • \(U\)、\(V\) 矩阵,每行代表一个单词的词向量,点乘后失去的分数通过 softmax 映射为概率分布。失去的概率分布是对于该中心词而言的上下文中单词的概率分布,该散布与上下文所在的具体位置无关,所以在每个地位的预测都是一样的。
  • the、and、that、of 等停用词,是每个单词点乘后失去的较大概率的单词,去掉这一部分能够使词向量成果更好。

1.3 word2vec 训练失去的词向量散布体现语义类似度

通过 word2vec 最大化指标函数后,通过可视化能够发现,类似的词汇在词向量空间里是比拟靠近的。

1.4 优化算法:梯度降落

ShowMeAI 在上一篇 1.NLP 介绍与词向量初步 解说了须要最小化的代价函数 \(J(\theta)\),咱们应用梯度降落算法最小化 \(J(\theta)\)

遵循梯度降落的个别思路,咱们计算 \(J(\theta)\) 对于参数 \(\theta\) 的梯度,而后朝着负梯度的方向迈进一小步,并一直反复这个过程,如图所示。

留神:咱们理论的指标函数可能不是下图这样的凸函数

2. 算法优化根底

2.1 梯度降落算法

  • 更新参数的公式(矩阵化写法)

$$
\theta^{new}=\theta^{old}-\alpha \nabla_{\theta} J(\theta)
$$

  • \(\alpha\):步长,也叫学习率
  • 更新参数的公式(单个参数更新)

$$
\theta_{j}^{new}=\theta_{j}^{old}-\alpha \frac{\partial}{\partial \theta_{j}^{old}} J(\theta)
$$

2.2 词向量随机梯度降落法

梯度降落会一次性应用所有数据样本进行参数更新,对应到咱们以后的词向量建模问题,就是 \(J(\theta)\) 的计算须要基于语料库所有的样本(窗口),数据规模十分大

  • 计算十分耗资源
  • 计算工夫太长

解决形式是把优化算法调整为「随机梯度降落算法」,即在单个样本里计算和更新参数,并遍历所有样本。

但基于单个样本更新会体现为参数震荡很厉害,收敛过程并不安稳,所以很多时候咱们会改为应用 mini-batch gradient descent(具体能够参考 ShowMeAI 的深度学习教程中文章 神经网络优化算法

  • Mini-batch 具备以下长处:通过 batch 均匀,缩小梯度预计的乐音;在 GPU 上并行化运算,放慢运算速度。

2.3 词向量建模中的随机梯度降落

  • 利用随机梯度降落,在每个窗口计算和更新参数,遍历所有样本
  • 在每个窗口内,咱们最多只有 \(2m+1\) 个词,因而 \(\nabla_{\theta} J_t(\theta)\) 是十分稠密的

下面提到的稠密性问题,一种解决形式是咱们 只更新理论呈现的向量

  • 须要稠密矩阵更新操作来只更新矩阵 \(U\) 和 \(V\) 中的特定行
  • 须要保留单词向量的哈希 / 散列

如果有数百万个单词向量,并且进行分布式计算,咱们无需再传输微小的更新信息(数据传输有老本)

2.4 Word2vec 的更多细节

word2vec 有两个模型变体:

  • 1.Skip-grams (SG):输出中心词并预测上下文中的单词
  • 2.Continuous Bag of Words (CBOW):输出上下文中的单词并预测中心词

之前始终应用 naive 的 softmax(简略但代价很高的训练方法),其实能够应用负采样办法放慢训练速率

2.5 负例采样的 skip-gram 模型(作业 2)

这个局部大家也能够参考 ShowMeAI 的 深度学习教程 中文章 自然语言解决与词嵌入

softmax 中用于归一化的分母的计算代价太高

$$
P(o | c)=\frac{\exp \left(u_{o}^{T} v_{c}\right)}{\sum_{w \in V} \exp \left(u_{w}^{T} v_{c}\right)}
$$

  • 咱们将在作业 2 中实现应用 negative sampling/ 负例采样办法的 skip-gram 模型。
  • 应用一个 true pair (中心词及其上下文窗口中的词)与几个 noise pair (中心词与随机词搭配) 造成的样本,训练二元逻辑回归。

原文中的 (最大化) 指标函数是 \(J(\theta)=\frac{1}{T} \sum_{t=1}^{T} J_{t}(\theta)\)

$$
J_{t}(\theta)=\log \sigma\left(u_{o}^{T} v_{c}\right)+\sum_{i=1}^{k} \mathbb{E}_{j \sim P(w)}\left[\log \sigma\left(-u_{j}^{T} v_{c}\right)\right]
$$

  • 左侧为 sigmoid 函数(大家会在后续的内容里常常见到它)
  • 咱们要最大化 2 个词共现的概率

本课以及作业中的指标函数是

$$
J_{neg-sample}\left(\boldsymbol{o}, \boldsymbol{v}_{c}, \boldsymbol{U}\right)=-\log \left(\sigma\left(\boldsymbol{u}_{o}^{\top} \boldsymbol{v}_{c}\right)\right)-\sum_{k=1}^{K} \log \left(\sigma\left(-\boldsymbol{u}_{k}^{\top} \boldsymbol{v}_{c}\right)\right)
$$

  • 咱们取 \(k\) 个负例采样
  • 最大化窗口中突围「中心词」的这些词语呈现的概率,而最小化其余没有呈现的随机词的概率

    \(P(w)=U(w)^{3 / 4} / Z\)

  • 咱们用左侧的公式进行抽样,其中 \(U(w)\) 是 unigram 散布
  • 通过 3/4 次方,绝对缩小常见单词的频率,增大罕见词的概率
  • \(Z\) 用于生成概率分布

3. 计数与共现矩阵

3.1 共现矩阵与词向量构建

在自然语言解决里另外一个构建词向量的思路是借助于 共现矩阵(咱们设其为 \(X\)),咱们有两种形式,能够基于窗口(window)或者全文档(full document)统计:

  • Window:与 word2vec 相似,在每个单词四周都应用 Window,包含语法 (POS) 和语义信息
  • Word-document 共现矩阵的根本假如是在同一篇文章中呈现的单词更有可能互相关联。假如单词 \(i\) 呈现在文章 \(j\) 中,则矩阵元素 \(X_{ij}\) 加一,当咱们解决完数据库中的所有文章后,就失去了矩阵 \(X\),其大小为 \(|V|\times M\),其中 \(|V|\) 为词汇量,而 \(M\) 为文章数。这一构建单词文章 co-occurrence matrix 的办法也是经典的 Latent Semantic Analysis 所采纳的【语义剖析】。

3.2 基于窗口的共现矩阵示例

利用某个定长窗口 (通常取 5 -10) 中单词与单词同时呈现的次数,来产生基于窗口的共现矩阵。

上面以窗口长度为 1 来举例,假如咱们的数据蕴含以下几个句子:

  • I like deep learning.
  • I like NLP.
  • I enjoy flying.

咱们能够失去如下的词词共现矩阵(word-word co-occurrence matrix)

3.3 基于间接的共现矩阵构建词向量的问题

间接基于共现矩阵构建词向量,会有一些显著的问题,如下:

  • 应用共现次数掂量单词的相似性,然而会随着词汇量的减少而增大矩阵的大小。
  • 须要很多空间来存储这一高维矩阵。
  • 后续的分类模型也会因为矩阵的稠密性而存在稠密性问题,使得成果不佳。

3.4 解决方案:低维向量

针对上述问题,咱们的一个解决形式是降维,取得低维浓密向量。

  • 通常降维到 (25-1000) 维,和 word2vec 相似

如何降维呢?

3.5 办法 1:对 X 进行降维(作业 1)

能够应用 SVD 办法将共现矩阵 \(X\) 合成为 \(U \Sigma V^T\),其中:

  • \(\Sigma\) 是对角线矩阵,对角线上的值是矩阵的奇怪值
  • \(U\) , \(V\) 是对应于行和列的正交基

为了缩小尺度同时尽量保留无效信息,可保留对角矩阵的最大的 \(k\) 个值,并将矩阵 \(U\) , \(V\) 的相应的行列保留。

  • 这是经典的线性代数算法,对于大型矩阵而言,计算代价低廉。

3.6 词向量 SVD 合成的 python 代码示例

python 矩阵合成 示例如下

降维词向量可视化

3.7 #论文解说

Hacks to X (several used in Rohde et al. 2005)

按比例调整 counts 会很无效

  • 对高频词进行缩放(语法有太多的影响)

    • 应用 log 进行缩放
    • \(min(X, t), t \approx 100\)
    • 间接全副漠视
  • 在基于 window 的计数中,进步更加靠近的单词的计数
  • 应用 Person 相关系数

3.8 词向量散布探索

如果对词向量进行空间散布,会发现同一个词汇的左近散布着它不同时态语态的单词:

  • \(drive \to driver\)
  • \(swim \to swimmer\)
  • \(teach \to teacher\)

在向量中呈现的乏味的句法模式:语义向量基本上是线性组件,尽管有一些摆动,然而根本是存在动词和动词实施者的方向。

3.9 基于计数 VS. 基于预估

咱们来总结一下基于共现矩阵计数和基于预估模型两种失去词向量的形式

基于计数:应用整个矩阵的全局统计数据来间接预计

  • 长处:训练疾速;统计数据高效利用
  • 毛病:次要用于捕获单词相似性;对大量数据给予比例失调的器重

基于预估模型:定义概率分布并试图预测单词

  • 长处:进步其余工作的性能;能捕捉除了单词相似性以外的简单的模式
  • 毛病:随语料库增大会增大规模;统计数据的低效应用(采样是对统计数据的低效应用)

4.GloVe 模型

4.1 #论文解说

1)Encoding meaning in vector differences

将两个流派的想法联合起来,在神经网络中应用计数矩阵。对于 Glove 的实践剖析须要浏览原文,也能够浏览 NLP 教程(2) | GloVe 及词向量的训练与评估。

GloVe 模型要害思维:共现概率的比值能够对 meaning component 进行编码。将两个流派的想法联合起来,在神经网络中应用计数矩阵。

补充解说

重点不是繁多的概率大小,重点是他们之间的比值,其中蕴含着重要的信息成分。

  • 例如咱们想辨别热力学上两种不同状态 ice 冰与蒸汽 steam,它们之间的关系可通过与不同的单词 \(x\) 的共现概率的比值来形容
  • 例如对于 solid 固态,尽管 \(P(solid \mid ice)\) 与 \(P(solid \mid steam)\) 自身很小,不能走漏无效的信息,然而它们的比值 \(\frac{P(solid \mid ice)}{P(solid \mid steam)}\) 却较大,因为 solid 更罕用来形容 ice 的状态而不是 steam 的状态,所以在 ice 的上下文中呈现几率较大
  • 对于 gas 则恰恰相反,而对于 water 这种形容 ice 与 steam 均可或者 fashion 这种与两者都没什么分割的单词,则比值靠近于 \(1\)。所以相较于单纯的共现概率,实际上共现概率的绝对比值更有意义

问题

咱们如何在词向量空间中以线性含意成分的模式捕捉共现概率的比值?

解决方案

  • log-bilinear 模型:

$$
w_{i} \cdot w_{j}=\log P(i \mid j)
$$

  • 向量差别:

$$
w_{x} \cdot (w_a-w_b)=\log \frac{P(x \mid a)}{P(x \mid b)}
$$

2)Combining the best of both worlds GloVe [Pennington et al., EMNLP 2014]

$$
w_{i} \cdot w_{j}=\log P(i \mid j)
$$

$$
J=\sum_{i, j=1}^{V} f(X_{ij})(w_{i}^{T} \tilde{w}_{j}+b_{i}+\tilde{b}_{j}-\log X_{i j})^{2}
$$

![Combining the best of both worlds GloVe [Pennington et al., EMNLP 2014]](https://img-blog.csdnimg.cn/i…)

补充解说

  • 如果使向量点积等于共现概率的对数,那么向量差别变成了共现概率的比率
  • 应用平方误差促使点积尽可能得靠近共现概率的对数
  • 应用 \(f(x)\) 对常见单词进行限度

长处

  • 训练疾速
  • 能够扩大到大型语料库
  • 即便是小语料库和小向量,性能也很好

4.2 GloVe 的一些后果展现

上图是一个 GloVe 词向量示例,咱们通过 GloVe 失去的词向量,咱们能够找到 frog(青蛙)最靠近的一些词汇,能够看出它们自身是很相似的动物。

5. 词向量评估

5.1 如何评估词向量?

咱们如何评估词向量呢,有外在和外在两种形式:

  • 外在评估形式

    • 对特定 / 两头子工作进行评估
    • 计算速度快
    • 有助于了解这个零碎
    • 不分明是否真的有用,除非与理论工作建设了相关性
  • 内部工作形式

    • 对实在工作(如上游 NLP 工作)的评估
    • 计算精确度可能须要很长时间
    • 不分明子系统问题所在,是交互还是其余子系统问题
    • 如果用另一个子系统替换一个子系统能够进步精确度

5.2 外在词向量评估

一种外在词向量评估形式是「词向量类比」:对于具备某种关系的词对 a,b,在给定词 c 的状况下,找到具备相似关系的词 d

$$
a: b::c:? \to d=\arg \max _{i} \frac{(x_b-x_a+x_c)^{T} x_i}{\left \| x_b-x_a+x_c \right \|}
$$

  • 通过加法后的余弦间隔是否能很好地捕捉到直观的语义和句法类比问题来评估单词向量
  • 从搜寻中抛弃输出的单词
  • 问题: 如果有信息但不是线性的怎么办?

5.3 Glove 可视化成果

上述为 GloVe 失去的词向量空间散布,咱们对词向量进行减法计算,能够发现类比的词对有类似的间隔。

brother – sister, man – woman, king – queen

下图为“公司与 CEO 词汇”散布

下图为“词汇比较级与最高级”散布

5.4 外在词向量评估的细节

5.5 类比工作评估与超参数

下图是对于类比评估和超参数的一些试验和教训

  • 300 是一个很好的词向量维度
  • 不对称上下文 (只应用单侧的单词) 不是很好,不过这点在上游工作中不肯定完全正确
  • window size 设为 8 对 Glove 向量来说比拟好

补充剖析

  • window size 设为 2 的时候实际上无效的,并且对于句法分析是更好的,因为句法成果十分部分

5.6 #论文解说

1)On the Dimensionality of Word Embedding

利用矩阵摄动实践,揭示了词嵌入维数抉择的根本的偏差与办法的衡量

  • https://papers.nips.cc/paper/2018/file/b534ba68236ba543ae44b22bd110a1d6-Paper.pdf

补充阐明:当继续增大词向量维度的时候,词向量的成果不会始终变差并且会放弃安稳。

5.7 类比工作评估与超参数

  • 训练工夫长一些会对后果有帮忙

  • 数据集越大越好,并且维基百科数据集比新闻文本数据集要好

补充剖析

  • 因为维基百科就是在解释概念以及他们之间的互相关联,更多的说明性文本显示了事物之间的所有分割
  • 而新闻并不去解释,而只是去论述一些事件

5.8 另一个外在词向量评估

  • 应用 cosine similarity 掂量词向量之间的类似水平
  • 并与人类评估对比

5.9 最靠近 Sweden 的一些单词

5.10 相关性评估

  • 应用 cosine similarity 掂量词向量之间的类似水平
  • 并与人类评估对比

6.word senses

6.1 词义与词义歧义

大多数单词都是多义的

  • 特地是常见单词
  • 特地是存在已久的单词

例如:pike

那么,词向量是总体捕获了所有这些信息,还是芜杂在一起了呢?

6.2 pike 的不同含意示例

补充阐明:能够想一想“苹果”的例子,既能够是水果,也能够是电子设备品牌。

6.3 #论文解说

1)Improving Word Representations Via Global Context And Multiple Word Prototypes (Huang et al. 2012)

将常用词的所有上下文进行聚类,通过该词失去一些清晰的簇,从而将这个常用词合成为多个单词,例如 \(bank_1\)、\(bank_2\)、\(bank_3\)。

补充阐明:尽管这很毛糙,并且有时 sensors 之间的划分也不是很明确,甚至互相重叠。

2)Linear Algebraic Structure of Word Senses, with Applications to Polysemy

  • 单词在规范单词嵌入 (如 word2vec) 中的不同含意以线性叠加 (加权和) 的模式存在

$$
v_{{pike}}=\alpha_1 v_{{pike}_1}+\alpha_2 v_{{pike}_2}+\alpha_3 v_{{pike}_3}
$$

  • 其中,\(\alpha_1=\frac{f_1}{f_1+f_2+f_3}\)

令人诧异的后果:

  • 只是加权平均值就曾经能够取得很好的成果
  • 因为从稠密编码中失去的概念,你实际上能够将感官分离出来(前提是它们绝对比拟常见)

补充解说:能够了解为因为单词存在于高维的向量空间之中,不同的纬度所蕴含的含意是不同的,所以加权平均值并不会侵害单词在不同含意所属的纬度上存储的信息。

6.4 内向词向量评估

  • 单词向量的内部评估:词向量能够利用于 NLP 的很多上游工作
  • 一个例子是在命名实体辨认工作中,寻找人名、机构名、地理位置名,词向量十分有帮忙

7. 视频教程

能够点击 B 站 查看视频的【双语字幕】版本

<iframe
src=”http://player.bilibili.com/player.html?aid=376755412&bvid=BV1Yo4y1D7FW&cid=373191391&page=2″
width=”100%”
height=500
scrolling=”no”
frameborder=0>
</iframe>

8. 参考资料

  • 本讲带学的 在线阅翻页本
  • 《斯坦福 CS224n 深度学习与自然语言解决》课程学习指南
  • 《斯坦福 CS224n 深度学习与自然语言解决》课程大作业解析
  • 双语字幕视频】斯坦福 CS224n | 深度学习与自然语言解决(2019·全 20 讲)
  • Stanford 官网 | CS224n: Natural Language Processing with Deep Learning

ShowMeAI系列教程举荐

  • 大厂技术实现 | 举荐与广告计算解决方案
  • 大厂技术实现 | 计算机视觉解决方案
  • 大厂技术实现 | 自然语言解决行业解决方案
  • 图解 Python 编程:从入门到精通系列教程
  • 图解数据分析:从入门到精通系列教程
  • 图解 AI 数学根底:从入门到精通系列教程
  • 图解大数据技术:从入门到精通系列教程
  • 图解机器学习算法:从入门到精通系列教程
  • 机器学习实战:手把手教你玩转机器学习系列
  • 深度学习教程 | 吴恩达专项课程 · 全套笔记解读
  • 自然语言解决教程 | 斯坦福 CS224n 课程 · 课程带学与全套笔记解读

NLP 系列教程文章

  • NLP 教程(1)- 词向量、SVD 合成与 Word2vec
  • NLP 教程(2)- GloVe 及词向量的训练与评估
  • NLP 教程(3)- 神经网络与反向流传
  • NLP 教程(4)- 句法分析与依存解析
  • NLP 教程(5)- 语言模型、RNN、GRU 与 LSTM
  • NLP 教程(6)- 神经机器翻译、seq2seq 与注意力机制
  • NLP 教程(7)- 问答零碎
  • NLP 教程(8)- NLP 中的卷积神经网络
  • NLP 教程(9)- 句法分析与树形递归神经网络

斯坦福 CS224n 课程带学详解

  • 斯坦福 NLP 课程 | 第 1 讲 – NLP 介绍与词向量初步
  • 斯坦福 NLP 课程 | 第 2 讲 – 词向量进阶
  • 斯坦福 NLP 课程 | 第 3 讲 – 神经网络常识回顾
  • 斯坦福 NLP 课程 | 第 4 讲 – 神经网络反向流传与计算图
  • 斯坦福 NLP 课程 | 第 5 讲 – 句法分析与依存解析
  • 斯坦福 NLP 课程 | 第 6 讲 – 循环神经网络与语言模型
  • 斯坦福 NLP 课程 | 第 7 讲 – 梯度隐没问题与 RNN 变种
  • 斯坦福 NLP 课程 | 第 8 讲 – 机器翻译、seq2seq 与注意力机制
  • 斯坦福 NLP 课程 | 第 9 讲 – cs224n 课程大我的项目实用技巧与教训
  • 斯坦福 NLP 课程 | 第 10 讲 – NLP 中的问答零碎
  • 斯坦福 NLP 课程 | 第 11 讲 – NLP 中的卷积神经网络
  • 斯坦福 NLP 课程 | 第 12 讲 – 子词模型
  • 斯坦福 NLP 课程 | 第 13 讲 – 基于上下文的表征与 NLP 预训练模型
  • 斯坦福 NLP 课程 | 第 14 讲 – Transformers 自注意力与生成模型
  • 斯坦福 NLP 课程 | 第 15 讲 – NLP 文本生成工作
  • 斯坦福 NLP 课程 | 第 16 讲 – 指代消解问题与神经网络办法
  • 斯坦福 NLP 课程 | 第 17 讲 – 多任务学习(以问答零碎为例)
  • 斯坦福 NLP 课程 | 第 18 讲 – 句法分析与树形递归神经网络
  • 斯坦福 NLP 课程 | 第 19 讲 – AI 平安偏见与偏心
  • 斯坦福 NLP 课程 | 第 20 讲 – NLP 与深度学习的将来

退出移动版