作者:韩信子@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与深度学习的将来