Glove 词向量 (GloVe Word Vectors)

你已经了解了几个计算词嵌入的算法,另一个在NLP社区有着一定势头的算法是GloVe算法,这个算法并不如Word2Vec或是Skip-Gram模型用的多,但是也有人热衷于它,我认为可能是因为它简便吧,我们来看看这个算法。

Glove算法是由Jeffrey PenningtonRichard SocherChris Manning发明的。

(Pennington J, Socher R, Manning C. Glove: Global Vectors for Word Representation[C]// Conference on Empirical Methods in Natural Language Processing. 2014:1532-1543.)

GloVe代表用词表示的全局变量(global vectors for word representation)。在此之前,我们曾通过挑选语料库中位置相近的两个词,列举出词对,即上下文和目标词,GloVe算法做的就是使其关系开始明确化。假定 XijX_{ij}Xij​ 是单词 iii 在单词 jjj 上下文中出现的次数,那么这里 iii 和 jjj 就和 ttt 和 ccc 的功能一样,所以你可以认为 XijX_{ij}Xij​ 等同于 XtcX_{tc}Xtc​ 。你也可以遍历你的训练集,然后数出单词 iii 在不同单词 jjj 上下文中出现的个数,单词 ttt 在不同单词 ccc 的上下文中共出现多少次。根据上下文和目标词的定义,你大概会得出 XijX_{ij}Xij​ 等于 XjiX_{ji}Xji​ 这个结论。事实上,如果你将上下文和目标词的范围定义为出现于左右各10词以内的话,那么就会有一种对称关系。如果你对上下文的选择是,上下文总是目标词前一个单词的话,那么 XijX_{ij}Xij​ 和 XjiX_{ji}Xji​ 就不会像这样对称了。不过对于GloVe算法,我们可以定义上下文和目标词为任意两个位置相近的单词,假设是左右各10词的距离,那么 XijX_{ij}Xij​ 就是一个能够获取单词 iii 和单词 jjj 出现位置相近时或是彼此接近的频率的计数器。

GloVe模型做的就是进行优化,我们将他们之间的差距进行最小化处理:

minimize∑i=110,000∑j=110,000f(Xij)(θiTej+bi+bj′−log⁡Xij)2minimize\sum_{i=1}^{10,000}\sum_{j=1}^{10,000}f(X_{ij})(\theta_i^Te_j+b_i+b_j\prime-\log X_{ij})^2minimizei=1∑10,000​j=1∑10,000​f(Xij​)(θiT​ej​+bi​+bj​′−logXij​)2

其中 θiTej\theta_i^Te_jθiT​ej​ ,想一下 iii 和 jjj 与 ttt 和 ccc 的功能一样,因此这就和你之前看的有些类似了,即 θtTec\theta_t^Te_cθtT​ec​ 。同时对于这个( θtTec\theta_t^Te_cθtT​ec​ ,下图编号1所示)来说,你想要知道的是告诉你这两个单词之间有多少联系, ttt 和 ccc 之间有多紧密, iii 和 jjj 之间联系程度如何,换句话说就是他们同时出现的频率是多少,这是由这个 XijX_{ij}Xij​ 影响的。然后,我们要做的是解决参数 θ\thetaθ 和 eee 的问题,然后准备用梯度下降来最小化上面的公式,你只想要学习一些向量,这样他们的输出能够对这两个单词同时出现的频率进行良好的预测。

现在一些附加的细节是如果 XijX_{ij}Xij​ 是等于0的话,那么 log⁡0\log0log0 就是未定义的,是负无穷大的,所以我们想要对 XijX_{ij}Xij​ 为0时进行求和,因此要做的就是添加一个额外的加权项 f(Xij)f(X_{ij})f(Xij​) (上图编号2所示)。如果 XijX_{ij}Xij​ 等于0的话,同时我们会用一个约定,即 0log⁡0=00\log0=00log0=0 ,这个的意思是如果 Xij=0X_{ij}=0Xij​=0,先不要进行求和,所以这个 log⁡0\log0log0 项就是不相关项。上面的求和公式表明,这个和仅是一个上下文和目标词关系里连续出现至少一次的词对的和。 f(Xij)f(X_{ij})f(Xij​) 的另一个作用是,有些词在英语里出现十分频繁,比如说this,is,of,a等等,有些情况,这叫做停止词,但是在频繁词和不常用词之间也会有一个连续统(continuum)。不过也有一些不常用的词,比如durion,你还是想将其考虑在内,但又不像那些常用词这样频繁。因此,这个加权因子 f(Xij)f(X_{ij})f(Xij​) 就可以是一个函数,即使是像durion这样不常用的词,它也能给予大量有意义的运算,同时也能够给像this,is,of,a这样在英语里出现更频繁的词更大但不至于过分的权重。因此有一些对加权函数f的选择有着启发性的原则,就是既不给这些词(this,is,of,a)过分的权重,也不给这些不常用词(durion)太小的权值。如果你想要知道 fff 是怎么能够启发性地完成这个功能的话,你可以看一下我之前的幻灯片里引用的GloVe算法论文。

最后,一件有关这个算法有趣的事是 θ\thetaθ 和 eee 现在是完全对称的,所以那里的 θi\theta_iθi​ 和 eje_jej​ 就是对称的。如果你只看数学式的话,他们( θi\theta_iθi​ 和 eje_jej​ )的功能其实很相近,你可以将它们颠倒或者将它们进行排序,实际上他们都输出了最佳结果。因此一种训练算法的方法是一致地初始化 θ\thetaθ 和 eee ,然后使用梯度下降来最小化输出,当每个词都处理完之后取平均值,所以,给定一个词 www ,你就会有 ew(final)=ew+θw2e_w^{(final)}=\frac{e_w+\theta_w}{2}ew(final)​=2ew​+θw​​ 。因为 θ\thetaθ 和 eee 在这个特定的公式里是对称的,而不像之前视频里我们了解的模型, θ\thetaθ 和 eee 功能不一样,因此也不能像那样取平均。

这就是GloVe算法的内容,我认为这个算法的一个疑惑之处是如果你看着这个等式,它实在是太简单了,对吧?仅仅是最小化,像这样的一个二次代价函数(上图编号3所示)是怎么能够让你学习有意义的词嵌入的呢?但是结果证明它确实有效,发明者们发明这个算法的过程是他们以历史上更为复杂的算法,像是newer language模型,以及之后的Word2Vec、Skip-Gram模型等等为基础,同时希望能够简化所有之前的算法才发明的。

在我们总结词嵌入学习算法之前,有一件更优先的事,我们会简单讨论一下。就是说,我们以这个特制的表格作为例子来开始学习词向量,我们说,第一行的嵌入向量是来表示Gender的,第二行是来表示Royal的,然后是是Age,在之后是Food等等。但是当你在使用我们了解过的算法的一种来学习一个词嵌入时,例如我们之前的幻灯片里提到的GloVe算法,会发生一件事就是你不能保证嵌入向量的独立组成部分是能够理解的,为什么呢?

假设说有个空间,里面的第一个轴(上图编号1所示)是Gender,第二个轴(上图编号2所示)是Royal,你能够保证的是第一个嵌入向量对应的轴(上图编号3所示)是和这个轴(上面提到的第一和第二基轴,编号1,2所示)有联系的,它的意思可能是Gender、Royal、AgeFood。具体而言,这个学习算法会选择这个(上图编号3所示)作为第一维的轴,所以给定一些上下文词,第一维可能是这个轴(上图编号3所示),第二维也许是这个(上图编号4所示),或者它可能不是正交的,它也可能是第二个非正交轴(上图编号5所示),它可以是你学习到的词嵌入中的第二部分。当我们看到这个(上图编号6所示)的时候,如果有某个可逆矩阵 AAA ,那么这项(上图编号6所示)就可以简单地替换成 (Aθi)T(A−Tej)(A\theta_i)^T(A^{-T}e_j)(Aθi​)T(A−Tej​) ,因为我们将其展开:

(Aθi)T(A−Tej)=θiTATA−Tej=θiTej(A\theta_i)^T(A^{-T}e_j)=\theta^T_iA^TA^{-T}e_j=\theta_i^Te_j(Aθi​)T(A−Tej​)=θiT​ATA−Tej​=θiT​ej​

不必担心,如果你没有学过线性代数的话会,和这个算法一样有一个简单证明过程。你不能保证这些用来表示特征的轴能够等同于人类可能简单理解的轴,具体而言,第一个特征可能是个Gender、Roya、Age、Food CostSize的组合,它也许是名词或是一个行为动词和其他所有特征的组合,所以很难看出独立组成部分,即这个嵌入矩阵的单行部分,然后解释出它的意思。尽管有这种类型的线性变换,这个平行四边形映射也说明了我们解决了这个问题,当你在类比其他问题时,这个方法也是行得通的。因此尽管存在特征量潜在的任意线性变换,你最终还是能学习出解决类似问题的平行四边形映射。

这就是词嵌入学习的内容,你现在已经了解了一些学习词嵌入的算法了,你可以在本周的编程练习里更多地运用它们。下节课讲解怎样使用这些算法来解决情感分类问题。

2.8 GloVe词向量-深度学习第五课《序列模型》-Stanford吴恩达教授相关推荐

  1. 深度学习教程(6) | 神经网络优化算法(吴恩达·完整版)

    作者:韩信子@ShowMeAI 教程地址:https://www.showmeai.tech/tutorials/35 本文地址:https://www.showmeai.tech/article-d ...

  2. 深度学习教程(10) | 卷积神经网络解读(吴恩达·完整版)

    作者:韩信子@ShowMeAI 教程地址:http://www.showmeai.tech/tutorials/35 本文地址:http://www.showmeai.tech/article-det ...

  3. 2.19 总结-深度学习-Stanford吴恩达教授

    ←上一篇 ↓↑ 下一篇→ 2.18 Logistic 损失函数的解释 回到目录 3.1 神经网络概览 文章目录 总结 习题 第 11 题 第 12 题 第 13 题 第 14 题 第 15 题 第 1 ...

  4. 0.0 目录-深度学习第五课《序列模型》-Stanford吴恩达教授

    文章目录 目录 第五课 第四课 第三课 第二课 第一课 目录 第五课 <序列模型> 笔记列表 Week 1 循环序列模型 Week 1 传送门 -> 1.1 为什么选择序列模型 1. ...

  5. 0.0 目录-深度学习第四课《卷积神经网络》-Stanford吴恩达教授

    文章目录 第五课 第四课 第三课 第二课 第一课 第五课 <序列模型> 笔记列表 Week 1 循环序列模型 Week 1 传送门 -> 1.1 为什么选择序列模型 1.2 数学符号 ...

  6. 0.0 目录-深度学习第三课《结构化机器学习项目》-Stanford吴恩达教授

    文章目录 第五课 第四课 第三课 第二课 第一课 第五课 <序列模型> 笔记列表 Week 1 循环序列模型 Week 1 传送门 -> 1.1 为什么选择序列模型 1.2 数学符号 ...

  7. 0.0 目录-深度学习第二课《改善神经网络》-Stanford吴恩达教授

    文章目录 第五课 第四课 第三课 第二课 第一课 第五课 <序列模型> 笔记列表 Week 1 循环序列模型 Week 1 传送门 -> 1.1 为什么选择序列模型 1.2 数学符号 ...

  8. 0.0 目录-深度学习第一课《神经网络与深度学习》-Stanford吴恩达教授

    文章目录 第五课 第四课 第三课 第二课 第一课 第五课 <序列模型> 笔记列表 Week 1 循环序列模型 Week 1 传送门 -> 1.1 为什么选择序列模型 1.2 数学符号 ...

  9. 3.12 总结-深度学习-Stanford吴恩达教授

    ←上一篇 ↓↑ 下一篇→ 3.11 随机初始化 回到目录 4.1 深层神经网络 文章目录 总结 习题 第 21 题 第 22 题 第 23 题 第 24 题 第 25 题 第 26 题 第 27 题 ...

最新文章

  1. fusioncompute中cpu可以设置的qos参数有哪些?_kubernetes 中 Qos 的设计与实现
  2. ImportError: dynamic module does not define module export function
  3. ALV 层级分组显示报表
  4. MySQL(十一)之触发器
  5. 【翻译自mos中文文章】重建控制文件的方法
  6. linux 笔记本键盘灯驱动程序,安装和使用CKB Next在Linux上更改Corsair键盘背光设置...
  7. vba循环通过键盘某个按键按下退出循环_默纳克3000+最新系统小键盘的使用方法...
  8. asp.net在发送邮件时出现服务器响应为: You are not authorized to send mail, authentication is required 解决方案...
  9. js系列教程2-对象、对象属性全解
  10. ACM/ICPC World Finals 2012 B Curvy Little Bottles
  11. opencv python 灰度化,opencv-python 图像灰度化
  12. 金融领域的数字化转型和科技创新有哪些应用?
  13. centos7脚本部署云盘(seafile)
  14. (搞笑)经典!一些很彪悍的句子 !!
  15. 如何画出一张优秀的架构图?(老鸟必备)
  16. HTML5网页设计期末大作业 ~金福普洱茶叶网页设计成品6页面带视频留言验证(HTML+CSS+JS)~ 学生hbuilder网页设计作业成品源码
  17. 自定义java对象转换工具类
  18. 第三章 隐藏通信隧道技术
  19. [架构之路-50]:目标系统 - 系统软件 - Linux下的网络通信-8-PON、EPON、GPON
  20. c语言测试软件的编写,用c语言编写智商测试软件

热门文章

  1. python-面向对象
  2. Java排序算法总结
  3. 二维数组中的查找问题
  4. 斐波那契数列取模(大数)分治算法
  5. UA OPTI501 电磁波 LIH介质中的平面波1 平面波的性质
  6. UA SIE545 优化理论基础9 优先与分治策略1 文件的最优存储顺序
  7. IIS发布网页的基本操作
  8. 进一步学习WDK驱动程序的SOURCES文件、WMI驱动程序的mof文件和wmidata.h头文件
  9. Java虚拟机字节码指令概述
  10. 【学习总结】GirlsInAI ML-diary day-3-数据类型