glove原理详细解读

author author     2023-03-27     726

关键词:

参考技术A 本文主要对《GloVe: Global Vectors for Word Representation》进行解读。

尽管word2vector在学习词与词间的关系上有了大进步,但是它有很明显的缺点:只能利用一定窗长的上下文环境,即利用局部信息,没法利用整个语料库的全局信息。鉴于此,GloVe诞生了,它的全称是global vector,很明显它是要改进word2vector,利用语料库的全局信息。

什么是 共现 ?

单词 出现在单词 的环境中(论文给的环境是以为中心的左右10个单词区间)叫共现。

什么是 共现矩阵 ?

共现矩阵是单词对共现次数的统计表。我们可以通过大量的语料文本来构建一个共现统计矩阵。

例如,有语料如下:

I like deep learning.

I like NLP.

I enjoy flying.

以窗半径为1来指定上下文环境,则共现矩阵就应该是:

X01:它表示like出现在I的环境(I like区间)中的次数(在整个语料库中的总计次数),此处应当为2次,故第一行第二列应当填2。还应当发现,这个共现矩阵它是对称阵,因为like出现在I的环境中,那么必然I也会出现在like的环境中,所以X10= 2。

共现矩阵有以下3个特点:

·统计的是单词对在给定环境中的共现次数;所以它在一定程度上能表达词间的关系。

·共现频次计数是针对整个语料库而不是一句或一段文档,具有全局统计特征。

·共现矩阵它是对称的。

共现矩阵的生成步骤:

·首先构建一个空矩阵,大小为V×V,即词汇表×词汇表,值全为0。矩阵中的元素坐标记为 。

·确定一个滑动窗口的大小(例如取半径为 m )

·从语料库的第一个单词开始,以1的步长滑动该窗口,因为是按照语料库的顺序开始的,所以中心词为到达的那个单词即 。

·上下文环境是指在滑动窗口中并在中心单词 两边的单词。

·若窗口左右无单词,一般出现在语料库的首尾,则空着,不需要统计。

·在窗口内,统计上下文环境中单词出现的次数,并将该值累计到 位置上。

·不断滑动窗口进行统计即可得到共现矩阵。

什么是叫 共现概率 ?

定义X为共现矩阵,共现矩阵的元素 为词 出现在词 环境的次数,令 ,为任意词出现在 的环境的次数(即共现矩阵第 行的和),那么:

为词 出现在词环境中的概率(这里以频率计算概率),这一概率被称为词 和词 的共现概率。共现概率是指在给定的环境下出现(共现)某一个词的概率。 注意 :在给定语料库的情况下,我们是可以事先计算出任意一对单词的共现概率的。

     接下来阐述为啥作者要提共现概率和共现概率比这一概念。下面是论文中给的一组数据:

先看一下第一行数据,以 ice 为中心词的环境中出现 solid 固体的概率是大于 gas、fashion 而且小于 water 的,这是很合理的,对吧,因为现实语言使用习惯就是这样的。同理可以解释第二行数据。我们来重点考虑第三行数据: 共现概率比 。我们把共现概率相比,我们发现:

1.看第三行第一列:当 ice 的语境下共现 solid 的概率应该很大,当 stream 的语境下共现 solid 的概率应当很小,那么比值就>1。

2.看第三行第二列:当 ice 的语境下共现 gas 的概率应该很小,当 stream 的语境下共现 gas 的概率应当很大,那么比值就<1。

3.看第三行第三列:当 ice 的语境下共现 water 的概率应该很大,当 stream 的语境下共现 water 的概率也应当很大,那么比值就近似=1。

4.看第三行第四列:当 ice 的语境下共现 fashion 的概率应该很小,当 stream 的语境下共现 fashion 的概率也应当很小,那么比值也是近似=1。

因为作者发现用共现概率比也可以很好的体现3个单词间的关联(因为共现概率比符合常理),所以glove作者就大胆猜想, 如果能将3个单词的词向量经过某种计算可以表达共现概率比就好了(glove思想) 。如果可以的话,那么这样的 词向量就与共现矩阵有着一致性 ,可以体现词间的关系。

想要表达共现概率比,这里涉及到的有三个词即 ,它们对应的词向量用 表示,那么我们需要找到一个映射 ,使得: ,等式的右边的比值可以通过统计得到。这个比值可以作为标签,我们需要设计一个模型通过训练的方式让映射值逼近这个确定的共现概率比。很明显这是个回归问题,我们可以用均方误差作为loss。当然,设计这个函数或者这个模型当然有很多途径,我们来看看作者是怎么设计的。

下面将从如何构造 展开讨论,首先声明以下的内容 更多的是体现作者构造模型的思路, 而 不是严格的数学证明。

为了让 左右两边相等,很容易想到用两者的均方差做代价函数:

但是里面含有3个单词,这意味这要在V*V*V的复杂度上计算,太复杂了。

为了简化计算 ,作者是这样思考的:

1. 为了考虑单词 和单词 之间的关系,那么 是一个合理的选择

2. 是标量,而 均为向量,为了将向量转为标量,可以将两个向量做内积,于是有了

3. 接着,作者在 外面加了指数运算exp(),得到:

即:

即:

即:

这样,便可以 发现简化方法 了:只需要上式分子对应相等,分母对应相等即可。

即: 并且

考虑到 和 形式是相同的,于是进行统一考虑,即:

本来我们追求的是:

现在只需要追求:

两边取对数:

那么代价函数可简化为:

现在只需要在V*V的复杂度上进行计算。

4.仔细观察 和 可以发现: 不等于 但是 和 是相等的。即等式左侧不具有对称性而右侧有对称性。这在数学上出现问题,有可能会导致模型无法训练优化。

为了解决这个问题将 中的 按照条件概率展开,即为: 

将其变为:

即添加一个偏置项 ,将 吸收到偏置项 中。

于是代价函数变成了: 

5.在代价函数中添加权重项,于是代价函数进一步进化为:

是怎样的呢?有什么作用呢?为什么要添加权重函数?

我们知道在一个语料库中,肯定存在很多单词他们在一起出现的次数是很多的,那么我们希望:

1.这些单词的权重须大于那些很少在一起出现的单词,所以这个函数要是非递减函数;

2.但我们也不希望这个权重过大,当到达一定程度之后应该不再增加;

3.如果两个单词没有在一起出现,也就是 ,那么他们应该不参与到loss function的计算当中去,也就是 要满足

满足以上条件的函数有很多,作者采用了如下形式的分段函数:

函数图像:

这篇glove论文中的所有实验,的取值都是 为0.75,而 为100

也就是说词对共现次数越多的,有更大的权重将被惩罚得更厉害些;次数少,有更小的惩罚权重,这样就可以使得不常共现的词对对结果的贡献不会太小,而不会过分偏向于常共现的词对。

那么总结下,glove的优化目标为:

Q uestion&Answer

Question1: GloVe是如何训练的?

Answer1: 虽然很多人声称GloVe是一种无监督的学习方式(因为它确实不需要人工标注label),但其实它还是有label的,这个label就是优化目标中的 。而优化目标中的 就是要不断更新/学习的参数,所以本质上它的训练方式跟监督学习的训练方法没什么不一样,都是基于梯度下降的。具体地,这篇论文里的实验是这么做的:采用了AdaGrad的梯度下降算法,对矩阵中的所有非零元素进行随机采样,学习率(learning rate)设为0.05,在vector size小于300的情况下迭代了50次,其他大小的vectors上迭代了100次,直至收敛。最终学习得到的是两个vector是 ,因为X是对称的,所以从原理上讲 也是对称的,他们唯一的区别是初始化的值不一样,而导致最终的值不一样。所以这两者其实是等价的,都可以当成最终的结果来使用。但是为了提高鲁棒性,最终会选择两者之和作为最终的vector(两者的初始化不同相当于加了不同的随机噪声,所以能提高鲁棒性)。

三千多字,码字不易,如果大家发现我有地方写得不对或者有疑问的,麻烦评论, 我会回复并改正 。对于重要问题,我会持续更新至 Question&Answer。

参考

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

CS224N Winter 2019

Glove模型---词向量模型

GloVe详解

详解GloVe词向量模型

ping过程详细解读

...并报告是否收到所希望的ICMPecho(ICMP回声应答)。??工作原理:利用网络上机器IP 查看详情

ehcache详细解读

...非常清楚,请参见官网;但是很少见到特性说明和对实现原理的分析,因此在这篇文章里面,我会详细介绍和分析EhCache的特性,加上一些自己的 查看详情

ehcache详细解读

...,请自行看官网api文档,但是很少见到特性说明和对实现原理的分析,因此在这这篇文章里面,我会详细介绍和分析ehcache的特性,加上一些自己的理解和思考,希望对缓存感兴趣的朋友有所收获。1.快速轻量 查看详情

ddim代码详细解读:核心采样代码超分辨率重建

...码、如何用diffusionmodels做超分辨重建。目录核心DDIM采样原理代 查看详情

ddim代码详细解读:分类器classifier的网络设计训练推理

...类器,如何在推理过程中使用分类器。目录分类器引导的原理代码设计训练方法推理方法 之前写过的三篇DDPM代码解读: 查看详情

ts原理详细解读绑定1-符号(代码片段)

...个非常的复杂的过程,接下来将有连续几节内容介绍实现原理,本节则主要提前介绍一些相关的概念。 符号在代码里面,可以定义一个变量、一个函数、或者一个类,这些定义都有一个名字,然后在其它地方可以通过名字引... 查看详情

glove理解

先贴个看起来讲的不错的文章链接,后续详细看了再补充https://blog.csdn.net/leyounger/article/details/78206832 2018.10.28大概了解了下glove思想:先构造文档中出现的共现矩阵,Xij的意义为:在整个语料库中,单词i和单词j共同出现在一个... 查看详情

typescript源码详细解读总览(代码片段)

...着TypeScript带来的各项便利。 很多人对TypeScript背后的原理很感兴趣,你可能想要:更好地理解TypeScript;学习编译原理相关的知识来丰富自己(编译器和操作系统是很多程序员的梦想);设计一门类似的语言;定制自己的打包... 查看详情

自动化运维管理工具ansible的详细解读(代码片段)

...读一、Ansible介绍2.1Ansible能做什么?2.2Ansible的特性和原理二、Ansible部署①管理端安装ansible服务②配置主机清单③配置密钥对验证④设置免密登录⑤查询被控制端的当前日期测试三、Ansible命令模块3.1command模块3.2shell模块3.3cron... 查看详情

ddpm代码详细解读:图解模型各部分结构用convnextblock代替resnet

...两篇文章讲了pytorch版本的代码,并一一介绍重要方法的原理。官方给的代码是tensorflowTPU版本,没有跑通。但是有很多人用pytorch复现了tensorflowTPU版本的代码,暂时没看见tensorflowGPU版本的代码。这篇文章解读一下对应的pytorch版本... 查看详情

详细解读:远程线程注入dll到pc版微信(代码片段)

一、远程线程注入的原理  1、其基础是在Windows系统中,每个.exe文件在双击打开时都会加载 kernel32.dll这个系统模块,该模块中有一个LoadLibrary()函数,可以将DLL文件加载到自身进程中。  2、这样,就可以用CreateRemoteThread(... 查看详情

2019最新苹果手游充值退款流程详细解读

...玩家就开始利用苹果的Bug和漏洞进行苹果手游充值退款。原理是:以不想要,误操作,小孩子,未成年等原因,与苹果官方联系,成功后,就可以退款。以这样的目的,达到低成本玩游戏的目标。除去给代退款方的手续费后,还... 查看详情

如何使用jdbc操作数据库?jdbcapi的使用详细解读(代码片段)

文章目录1.DriverManager1.1注册驱动1.2获取连接2.Connection2.1获取执行sql的对象2.2事务管理3.Statement4.ResultSet5.PreparedStatement5.1sql注入问题5.2preparedStatement原理6.总结Java编程基础教程系列1.DriverManagerDriverManager,驱动管理类。在JDB 查看详情

第十二届蓝桥杯eda设计与开发项目省赛(设计详细解读)

...就是封装、电路设计、PCB生成考的都是围绕stm32的你把32原理图的封装都画一遍基本没什么难度,电路设计也是对着原理图去看,去看看哪些细微的差别,在这套试卷的蜂鸣器设计是pnp型的与npn型的不一样,考察你... 查看详情

yolov7详细解读网络架构解读(代码片段)

YOLOV7详细解读网络架构解读YOLOV7详细解读前言一、YOLOV7是什么?二、网络架构1、架构图总览2、CBS模块解读3、CBW模块解读4、REP模块解读5、MP模块解读6、ELAN模块解读7、ELAN-W模块解读8、UPSample模块解读9、SPPCSPC模块解读前言继... 查看详情

论文|sentence2vec&glove算法原理推导与实​现

万物皆可Embedding系列会结合论文和实践经验进行介绍,前期主要集中在论文中,后期会加入实践经验和案例,目前已更新:万物皆可Vector之语言模型:从N-Gram到NNLM、RNNLM万物皆可Vector之Word2vec:2个模型、2... 查看详情

论文|sentence2vec&glove算法原理推导与实​现

万物皆可Embedding系列会结合论文和实践经验进行介绍,前期主要集中在论文中,后期会加入实践经验和案例,目前已更新:万物皆可Vector之语言模型:从N-Gram到NNLM、RNNLM万物皆可Vector之Word2vec:2个模型、2... 查看详情

源码解读抽丝剥茧的分析viewmodel的核心原理(代码片段)

ViewModel背景ViewModel类旨在以注重生命周期的方式存储和管理界面相关的数据。ViewModel类让数据可在发生屏幕旋转等配置更改后继续留存。摘自ViewModel概览详细讲,ViewModel有如下几个特点:对于简单数据,Activity被销毁... 查看详情