前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >详解GloVe词向量模型[通俗易懂]

详解GloVe词向量模型[通俗易懂]

作者头像
全栈程序员站长
发布于 2022-06-27 03:30:29
发布于 2022-06-27 03:30:29
3.3K0
举报

大家好,又见面了,我是你们的朋友全栈君。

  词向量的表示可以分成两个大类1:基于统计方法例如共现矩阵、奇异值分解SVD;2:基于语言模型例如神经网络语言模型(NNLM)、word2vector(CBOW、skip-gram)、GloVe、ELMo。   word2vector中的skip-gram模型是利用类似于自动编码的器网络以中心词的one-hot表示作为输入来预测这个中心词环境中某一个词的one-hot表示,即先将中心词one-hot表示编码然后解码成环境中某个词的one-hot表示(多分类模型,损失函数用交叉熵)。CBOW是反过来的,分别用环境中的每一个词去预测中心词。尽管word2vector在学习词与词间的关系上有了大进步,但是它有很明显的缺点:只能利用一定窗长的上下文环境,即利用局部信息,没法利用整个语料库的全局信息。鉴于此,斯坦福的GloVe诞生了,它的全称是global vector,很明显它是要改进word2vector,成功利用语料库的全局信息。

1. 共现概率

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

什么是共现矩阵?   单词对共现次数的统计表。我们可以通过大量的语料文本来构建一个共现统计矩阵。   例如,有语料如下:   I like deep learning.   I like NLP.   I enjoy flying.   我以窗半径为1来指定上下文环境,则共现矩阵就应该是[2]:

  取 x 01 x_{01} x01​解释:它表示 l i k e like like出现在 I I I的环境( I l i k e I like Ilike区间)中的次数(在整个语料库中的总计次数),此处应当为2次,故第一行第二列应当填2。还应当发现,这个共现矩阵它是对称阵,因为 l i k e like like出现在 I I I的环境中,那么必然 I I I也会出现在 l i k e like like的环境中,所以 x 10 x_{10} x10​=2。   共现矩阵它有以下3个特点:   ·统计的是单词对在给定环境中的共现次数;所以它在一定程度上能表达词间的关系。   ·共现频次计数是针对整个语料库而不是一句或一段文档,具有全局统计特征。   ·共现矩阵它是对称的。

共现矩阵的生成步骤: · 首先构建一个空矩阵,大小为 V × V V ×V V×V,即词汇表×词汇表,值全为0。矩阵中的元素坐标记为 ( i , j ) (i,j) (i,j)。 · 确定一个滑动窗口的大小(例如取半径为m) · 从语料库的第一个单词开始,以1的步长滑动该窗口,因为是按照语料库的顺序开始的,所以中心词为到达的那个单词即 i i i。 · 上下文环境是指在滑动窗口中并在中心单词 i i i两边的单词(这里应有2m-1个 j j j)。 · 若窗口左右无单词,一般出现在语料库的首尾,则空着,不需要统计。 · 在窗口内,统计上下文环境中单词 j j j出现的次数,并将该值累计到 ( i , j ) (i,j) (i,j)位置上。 · 不断滑动窗口进行统计即可得到共现矩阵。

什么是叫共现概率?   我们定义 X X X为共现矩阵,共现矩阵的元素 x i j x_{ij} xij​为词 j j j出现在词 i i i环境的次数,令 x i = ∑ k x i k x_i=\sum_kx_{ik} xi​=∑k​xik​为任意词出现在 i i i的环境的次数(即共现矩阵行和),那么, P i j = P ( j ∣ i ) = x i j x i P_{ij}=P(j|i)={x_{ij}\over x_{i}} Pij​=P(j∣i)=xi​xij​​   为词 j j j出现在词 i i i环境中的概率(这里以频率表概率),这一概率被称为词 i i i和词 j j j的共现概率。共现概率是指在给定的环境下出现(共现)某一个词的概率。注意:在给定语料库的情况下,我们是可以事先计算出任意一对单词的共现概率的。

2. 共现概率比

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

  先看一下第一行数据,以 i c e ice ice为中心词的环境中出现 s o l i d solid solid固体的概率是大于 g a s 、 f a s h i o n gas、fashion gas、fashion的而且是小于 w a t e r water water的,这是很合理的,对吧!因为有 i c e ice ice的句子中出现 s o l i d 、 w a t e r solid、water solid、water的概率确实应当比 g a s 、 f a s h i o n gas、fashion gas、fashion大才对,实验数据也说明的确是如此。同理可以解释第二行数据。我们来重点考虑第三行数据:共现概率比。我们把共现概率进行一比,我们发现:   1.看第三行第一列:当 i c e ice ice的语境下共现 s o l i d solid solid的概率应该很大,当 s t r e a m stream stream的语境下共现 s o l i d solid solid的概率应当很小,那么比值就>1。   2.看第三行第二列:当 i c e ice ice的语境下共现 g a s gas gas的概率应该很小,当 s t r e a m stream stream的语境下共现 g a s gas gas的概率应当很大,那么比值就<1。   3.看第三行第三列:当 i c e ice ice的语境下共现 w a t e r water water的概率应该很大,当 s t r e a m stream stream的语境下共现 w a t e r water water的概率也应当很大,那么比值就近似=1。   4.看第三行第四列:当 i c e ice ice的语境下共现 f a s h i o n fashion fashion的概率应该很小,当 s t r e a m stream stream的语境下共现 f a s h i o n fashion fashion的概率也应当很小,那么比值也是近似=1。   因为作者发现用共现概率比也可以很好的体现3个单词间的关联(因为共现概率比符合常理),所以glove作者就大胆猜想,如果能将3个单词的词向量经过某种计算可以表达共现概率比就好了(glove思想)。如果可以的话,那么这样的词向量就与共现矩阵有着一致性,可以体现词间的关系。

3. 设计词向量函数

  想要表达共现概率比,这里涉及到的有三个词即 i , j , k i,j,k i,j,k,它们对应的词向量我用 v i 、 v j 、 v ~ k v_i、v_j、\widetilde{v}_k vi​、vj​、v k​表示,那么我们需要找到一个映射 f f f,使得 f ( v i , v j , v ~ k ) = P i k P j k f(v_i,v_j,\widetilde{v}_k)={P_{ik}\over P_{jk}} f(vi​,vj​,v k​)=Pjk​Pik​​ (1)。前面我说过,任意两个词的共现概率可以用语料库事先统计计算得到,那这里的给定三个词,是不是也可以确定共现概率比啊。这个比值可以作为标签,我们可以设计一个模型通过训练的方式让映射值逼近这个确定的共现概率比。很明显这是个回归问题,我们可以用均方误差作为 l o s s loss loss。明显地,设计这个函数或者这个模型当然有很多途径,我们来看看作者是怎么设计的。   我们可以发现公式(1)等号右侧结果是个标量,左边是个关于向量的函数,如何将函数变成标量。于是作者这么设计: f ( ( v i − v j ) T v ~ k ) = P i k P j k f((v_i-v_j)^T\widetilde{v}_k)={P_{ik}\over P_{jk}} f((vi​−vj​)Tv k​)=Pjk​Pik​​ (2)即向量做差再点积再映射到目标。再次强调,这只是一种设计,它可能不是那么严谨,合理就行。于是乎:

  于是,glove模型的学习策略就是通过将词对儿的词向量经过内积操作和平移变换去趋于词对儿共现次数的对数值,这是一个回归问题。于是作者这样设计损失函数: J = ∑ i = 1 N ∑ j = 1 N f ( x i j ) ( v i T v ~ j + b i + b j − l o g ( x i j ) ) 2 J=\sum_{i=1}^{N}\sum_{j=1}^{N}f(x_{ij})(v_i^T\widetilde{v}_j+b_i+b_j-log(x_{ij}))^2 J=i=1∑N​j=1∑N​f(xij​)(viT​v j​+bi​+bj​−log(xij​))2   这里用的是误差平方和作为损失值,其中N表示语料库词典单词数。它这里在误差平方前给了一个权重函数 f ( x i j ) f(x_{ij}) f(xij​),这个权重是用来控制不同大小的共现次数( x i j x_{ij} xij​)对结果的影响的。作者是这么设计这个权重函数的:

  也就是说词对儿共现次数越多的它有更大的权重将被惩罚得更厉害些,次数少的有更小的权重,这样就可以使得不常共现的词对儿对结果的贡献不会太小,而不会过分偏向于常共现的词对儿。此外,当 x i j x_{ij} xij​=0时,加入了这个权重函数此时该训练样本的损失直接为0,从而避免了 l o g ( x i j ) log(x_{ij}) log(xij​)为无穷小导致损失值无穷大的问题。

4. GloVe模型算法

  最后,关于glove模型算法,大致是这样的:从共现矩阵中随机采集一批非零词对作为一个mini-batch的训练数据;随机初始化这些训练数据的词向量以及随机初始化两个偏置;然后进行内积和平移操作并与 l o g ( x i j ) log(x_{ij}) log(xij​)计算损失值,计算梯度值;然后反向传播更新词向量和两个偏置;循环以上过程直到结束条件。论文中还提到一个词最终的glove词向量用的是训练后的两个词向量之和,关于这一点论文中有解释,如果感兴趣的话最好阅读一下原论文。

reference: [1] 来b站搞学习 [2] https://web.stanford.edu/class/archive/cs/cs224n/cs224n.1184/lectures/midterm-review.pdf [3] GloVe论文 [4] glove开源代码

发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/133216.html原文链接:https://javaforall.cn

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022年6月9,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
Glove和fastText
本文介绍两种更新一点的词向量,它们分别是2014年由Stanford团队发表的Glove和2017年由Facebook团队发表的fastText
mathor
2020/04/10
5520
斯坦福NLP课程 | 第2讲 - 词向量进阶
教程地址:http://www.showmeai.tech/tutorials/36
ShowMeAI
2022/05/01
6600
斯坦福NLP课程 | 第2讲 - 词向量进阶
浅谈词向量
将词语表示为向量的技术并不是最近几年的新思想。例如向量空间模型将词表示为词典维度的高维向量。这种表示带来的问题主要包括两个方面。一方面词与词之间相互独立,无法表达词语之间的关系。另一方面向量过于稀疏,计算和存储的效率都不高。
数据科学人工智能
2023/01/30
9220
GloVe模型_nerlove模型
设共现矩阵为X,其元素为 X i , j X_{i,j} Xi,j​。 X i , j X_{i,j} Xi,j​的意义为:在整个语料库中,单词i和单词j共同出现在一个窗口中的次数。 举个栗子: 设有语料库:
全栈程序员站长
2022/09/29
5570
GloVe模型_nerlove模型
NLP教程(2) | GloVe及词向量的训练与评估
教程地址:http://www.showmeai.tech/tutorials/36
ShowMeAI
2022/05/01
1.1K0
NLP教程(2) | GloVe及词向量的训练与评估
论文阅读笔记:GloVe: Global Vectors for Word Representation
摘要 1.引言 2.相关工作 3.The GloVe Model 4.实验 4.1评估方法 4.2语料库和训练细节
我爱自然语言处理
2018/08/12
3.4K0
论文阅读笔记:GloVe: Global Vectors for Word Representation
四步理解GloVe!(附代码实现)
版权声明:本文为博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。
mantch
2019/08/29
1.1K0
四步理解GloVe!(附代码实现)
一文总结词向量的计算、评估与优化
为了处理语言,需要将文本信息用向量的形式表达。词向量(Word Vector)或称为词嵌入(Word Embedding)就是将词语向量化。常见的生成词向量的神经网络模型有NNLM模型,C&W模型,CBOW模型和Skip-gram模型。
Datawhale
2020/07/09
2.5K0
一文总结词向量的计算、评估与优化
NLP教程(1)-词向量、SVD分解与Word2Vec
教程地址:http://www.showmeai.tech/tutorials/36
ShowMeAI
2022/04/29
1.2K0
NLP教程(1)-词向量、SVD分解与Word2Vec
词向量技术 | 从word2vec到ELMo
"词和句子的嵌入已成为所有基于深度学习的自然语言处理(NLP)系统的重要组成部分,它们在固定长度的稠密向量中编码单词和句子,以大幅度提高神经网络处理文本数据的能力。"
用户1332428
2018/08/17
2.6K0
词向量技术 | 从word2vec到ELMo
词向量(1)--从Word2Vec到ELMo
若你是做NLP的,一定对词向量很亲切,若你是做推荐的,对词向量也一定不会陌生,以词向量为代表的序列向量化方法已经成为机器学习中必不可少的实战利器。
流川枫
2020/04/24
9420
【NLP CS224N笔记】Lecture 3 GloVe: Global Vectors for Word Representation
可以很明显地看到该向量非常稀疏。常见的解决办法有两种:一是使用稀疏矩阵更新运算来更新矩阵\(U,V\)的特定的列向量。二是使用哈希来更新,即key为word string,value是对应的列向量。
marsggbo
2019/01/03
5150
深度学习教程 | 自然语言处理与词嵌入
本系列为吴恩达老师《深度学习专项课程(Deep Learning Specialization)》学习与总结整理所得,对应的课程视频可以在这里查看。
ShowMeAI
2022/04/15
8030
深度学习教程 | 自然语言处理与词嵌入
什么是词向量?(NPL入门)
在自然语言处理任务中,首先需要考虑词如何在计算机中表示。通常,有两种表示方式:one-hot representation和distribution representation。
全栈程序员站长
2022/07/01
2.5K0
什么是词向量?(NPL入门)
训练GloVe词向量模型
正如GloVe论文的标题而言,**GloVe的全称叫Global Vectors for Word Representation,它是一个基于全局词频统计(count-based & overall statistics)的词表征(word representation)工具,它可以把一个单词表达成一个由实数组成的向量,这些向量捕捉到了单词之间一些语义特性,比如相似性(similarity)、类比性(analogy)等。**我们通过对向量的运算,比如欧几里得距离或者cosine相似度,可以计算出两个单词之间的语义相似性。
大数据技术与机器学习
2019/12/05
1.7K0
【Hello NLP】CS224n学习笔记[3]:共现矩阵、SVD与GloVe词向量
SimpleAI 【HelloNLP】系列笔记,主要参考各知名网课(Stanford CS224n、DeepLearning.ai、李宏毅机器学习等等),并配合NLP的经典论文和研究成果、我的个人项目实践经验总结而成。希望能和各位NLP爱好者一起探索这颗AI皇冠的明珠!
beyondGuo
2020/03/11
2.4K0
重磅!!|“自然语言处理(NLP)系列教程06”之 Glove模型详解
本次文章将主要介绍Glove模型,首先会从模型的公式开始,然后解析模型构建分析,最后与跳字模型(Skip-Gram)、连续词袋模型(CWOB)做对比。
ShuYini
2019/08/08
1.8K0
重磅!!|“自然语言处理(NLP)系列教程06”之 Glove模型详解
【CS224N课程笔记】词向量II: GloVe, 评估和训练
课程主页: http://web.stanford.edu/class/cs224n/
NewBeeNLP
2021/01/12
7540
【CS224N课程笔记】词向量II: GloVe, 评估和训练
斯坦福大学深度学习与自然语言处理第二讲:词向量
本文来源:52nlp 斯坦福大学在三月份开设了一门“深度学习与自然语言处理”的课程:CS224d: Deep Learning for Natural Language Processing,授课老师是青年才俊Richard Socher,以下为相关的课程笔记。 第二讲:简单的词向量表示:word2vec,Glove(Simple Word Vector representations: word2vec, GloVe) 推荐阅读材料: Paper1:[Distributed Representations
用户1737318
2018/06/05
7650
【CS224N课程笔记】词向量I: 简介, SVD和Word2Vec
课程主页: http://web.stanford.edu/class/cs224n/
NewBeeNLP
2020/10/21
5860
推荐阅读
相关推荐
Glove和fastText
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档