理解GloVe模型

概述

模型目标:进行词的向量化表示,使得向量之间尽可能多地蕴含语义和语法的信息。
输入:语料库
输出:词向量
方法概述:首先基于语料库构建词的共现矩阵,然后基于共现矩阵和GloVe模型学习词向量。
开始
统计共现矩阵
训练词向量
结束
统计共现矩阵

设共现矩阵为XX,其元素为Xi,jXi,j。
Xi,jXi,j的意义为:在整个语料库中,单词ii和单词jj共同出现在一个窗口中的次数。
举个栗子:
设有语料库:

i love you but you love him i am sad
这个小小的语料库只有1个句子,涉及到7个单词:i、love、you、but、him、am、sad。
如果我们采用一个窗口宽度为5(左右长度都为2)的统计窗口,那么就有以下窗口内容:

窗口标号 中心词 窗口内容
0 i i love you
1 love i love you but
2 you i love you but you
3 but love you but you love
4 you you but you love him
5 love but you love him i
6 him you love him i am
7 i love him i am sad
8 am him i am sad
9 sad i am sad
窗口0、1长度小于5是因为中心词左侧内容少于2个,同理窗口8、9长度也小于5。
以窗口5为例说明如何构造共现矩阵:
中心词为love,语境词为but、you、him、i;则执行:
Xlove,but+=1
Xlove,but+=1

Xlove,you+=1
Xlove,you+=1

Xlove,him+=1
Xlove,him+=1

Xlove,i+=1
Xlove,i+=1

使用窗口将整个语料库遍历一遍,即可得到共现矩阵XX。
使用GloVe模型训练词向量

模型公式

先看模型,代价函数长这个样子:
J=∑i,jNf(Xi,j)(vTivj+bi+bj−log(Xi,j))2
J=∑i,jNf(Xi,j)(viTvj+bi+bj−log(Xi,j))2

vivi,vjvj是单词ii和单词jj的词向量,bibi,bjbj是两个标量(作者定义的偏差项),ff是权重函数(具体函数公式及功能下一节介绍),NN是词汇表的大小(共现矩阵维度为N∗NN∗N)。
可以看到,GloVe模型没有使用神经网络的方法。
模型怎么来的

那么作者为什么这么构造模型呢?首先定义几个符号:
Xi=∑j=1NXi,j
Xi=∑j=1NXi,j

其实就是矩阵单词ii那一行的和;
Pi,k=Xi,kXi
Pi,k=Xi,kXi

条件概率,表示单词kk出现在单词ii语境中的概率;
ratioi,j,k=Pi,kPj,k
ratioi,j,k=Pi,kPj,k

两个条件概率的比率。
作者的灵感是这样的:
作者发现,ratioi,j,kratioi,j,k这个指标是有规律的,规律统计在下表:
ratioi,j,kratioi,j,k的值 单词j,k单词j,k相关 单词j,k单词j,k不相关
单词i,k单词i,k相关 趋近1 很大
单词i,k单词i,k不相关 很小 趋近1
很简单的规律,但是有用。
思想:假设我们已经得到了词向量,如果我们用词向量vivi、vjvj、vkvk通过某种函数计算ratioi,j,kratioi,j,k,能够同样得到这样的规律的话,就意味着我们词向量与共现矩阵具有很好的一致性,也就说明我们的词向量中蕴含了共现矩阵中所蕴含的信息。
设用词向量vivi、vjvj、vkvk计算ratioi,j,kratioi,j,k的函数为g(vi,vj,vk)g(vi,vj,vk)(我们先不去管具体的函数形式),那么应该有:
Pi,kPj,k=ratioi,j,k=g(vi,vj,vk)
Pi,kPj,k=ratioi,j,k=g(vi,vj,vk)

即:
Pi,kPj,k=g(vi,vj,vk)
Pi,kPj,k=g(vi,vj,vk)

即二者应该尽可能地接近;
很容易想到用二者的差方来作为代价函数:
J=∑i,j,kN(Pi,kPj,k−g(vi,vj,vk))2
J=∑i,j,kN(Pi,kPj,k−g(vi,vj,vk))2

但是仔细一看,模型中包含3个单词,这就意味着要在N∗N∗NN∗N∗N的复杂度上进行计算,太复杂了,最好能再简单点。
现在我们来仔细思考g(vi,vj,vk)g(vi,vj,vk),或许它能帮上忙;
作者的脑洞是这样的:
1. 要考虑单词ii和单词jj之间的关系,那g(vi,vj,vk)g(vi,vj,vk)中大概要有这么一项吧:vi−vjvi−vj;嗯,合理,在线性空间中考察两个向量的相似性,不失线性地考察,那么vi−vjvi−vj大概是个合理的选择;
2. ratioi,j,kratioi,j,k是个标量,那么g(vi,vj,vk)g(vi,vj,vk)最后应该是个标量啊,虽然其输入都是向量,那內积应该是合理的选择,于是应该有这么一项吧:(vi−vj)Tvk(vi−vj)Tvk。
3. 然后作者又往(vi−vj)Tvk(vi−vj)Tvk的外面套了一层指数运算exp()exp(),得到最终的g(vi,vj,vk)=exp((vi−vj)Tvk)g(vi,vj,vk)=exp((vi−vj)Tvk);
最关键的第3步,为什么套了一层exp()exp()?
套上之后,我们的目标是让以下公式尽可能地成立:
Pi,kPj,k=g(vi,vj,vk)
Pi,kPj,k=g(vi,vj,vk)

即:
Pi,kPj,k=exp((vi−vj)Tvk)
Pi,kPj,k=exp((vi−vj)Tvk)

即:
Pi,kPj,k=exp(vTivk−vTjvk)
Pi,kPj,k=exp(viTvk−vjTvk)

即:
Pi,kPj,k=exp(vTivk)exp(vTjvk)
Pi,kPj,k=exp(viTvk)exp(vjTvk)

然后就发现找到简化方法了:只需要让上式分子对应相等,分母对应相等,即:
Pi,k=exp(vTivk)并且Pj,k=exp(vTjvk)
Pi,k=exp(viTvk)并且Pj,k=exp(vjTvk)

然而分子分母形式相同,就可以把两者统一考虑了,即:
Pi,j=exp(vTivj)
Pi,j=exp(viTvj)

本来我们追求:
Pi,kPj,k=g(vi,vj,vk)
Pi,kPj,k=g(vi,vj,vk)

现在只需要追求:
Pi,j=exp(vTivj)
Pi,j=exp(viTvj)

两边取个对数:
log(Pi,j)=vTivj
log(Pi,j)=viTvj

那么代价函数就可以简化为:
J=∑i,jN(log(Pi,j)−vTivj)2
J=∑i,jN(log(Pi,j)−viTvj)2

现在只需要在N∗NN∗N的复杂度上进行计算,而不是N∗N∗NN∗N∗N,现在关于为什么第3步中,外面套一层exp()exp()就清楚了,正是因为套了一层exp()exp(),才使得差形式变成商形式,进而等式两边分子分母对应相等,进而简化模型。
然而,出了点问题。
仔细看这两个式子:
log(Pi,j)=vTivj和log(Pj,i)=vTjvi
log(Pi,j)=viTvj和log(Pj,i)=vjTvi

log(Pi,j)log(Pi,j)不等于log(Pj,i)log(Pj,i)但是vTivjviTvj等于vTjvivjTvi;即等式左侧不具有对称性,但是右侧具有对称性。
数学上出了问题。
补救一下好了。
现将代价函数中的条件概率展开:
log(Pi,j)=vTivj
log(Pi,j)=viTvj

即为:
log(Xi,j)−log(Xi)=vTivj
log(Xi,j)−log(Xi)=viTvj

将其变为:
log(Xi,j)=vTivj+bi+bj
log(Xi,j)=viTvj+bi+bj

即添了一个偏差项bjbj,并将log(Xi)log(Xi)吸收到偏差项bibi中。
于是代价函数就变成了:
J=∑i,jN(vTivj+bi+bj−log(Xi,j))2
J=∑i,jN(viTvj+bi+bj−log(Xi,j))2

然后基于出现频率越高的词对儿权重应该越大的原则,在代价函数中添加权重项,于是代价函数进一步完善:
J=∑i,jNf(Xi,j)(vTivj+bi+bj−log(Xi,j))2
J=∑i,jNf(Xi,j)(viTvj+bi+bj−log(Xi,j))2

具体权重函数应该是怎么样的呢?
首先应该是非减的,其次当词频过高时,权重不应过分增大,作者通过实验确定权重函数为:
f(x)={(x/xmax)0.75,1,if x<xmaxif x>=xmax
f(x)={(x/xmax)0.75,if x<xmax1,if x>=xmax

到此,整个模型就介绍完了。
说明

如果错误,敬请指正。
---------------------
作者:饺子醋
来源:CSDN
原文:https://blog.csdn.net/coderTC/article/details/73864097
版权声明:本文为博主原创文章,转载请附上博文链接!

理解GloVe模型(Global vectors for word representation)的更多相关文章

  1. 【NLP CS224N笔记】Lecture 3 GloVe: Global Vectors for Word Representation

    I. 复习word2vec的核心思路 1. Skip-gram 模型示意图: 2.word vectors的随机梯度 假设语料库中有这样一行句子: I love deep learning and N ...

  2. ELMO模型(Deep contextualized word representation)

    1 概述 word embedding 是现在自然语言处理中最常用的 word representation 的方法,常用的word embedding 是word2vec的方法,然而word2vec ...

  3. deeplearning.ai 序列模型 Week 2 NLP & Word Embeddings

    1. Word representation One-hot representation的缺点:把每个单词独立对待,导致对相关词的泛化能力不强.比如训练出“I want a glass of ora ...

  4. 四步理解GloVe!(附代码实现)

    1. 说说GloVe 正如GloVe论文的标题而言,GloVe的全称叫Global Vectors for Word Representation,它是一个基于全局词频统计(count-based & ...

  5. word2vec 和 glove 模型的区别

    2019-09-09 15:36:13 问题描述:word2vec 和 glove 这两个生成 word embedding 的算法有什么区别. 问题求解: GloVe (global vectors ...

  6. Global Vectors forWord Representation

    参考论文: GloVe: Global Vectors forWord Representation 参考博客:https://blog.csdn.net/coderTC/article/detail ...

  7. NLP.TM | GloVe模型及其Python实现

    在进行自然语言处理中,需要对文章的中的语义进行分析,于是迫切需要一些模型去描述词汇的含义,很多人可能都知道word2vector算法,诚然,word2vector是一个非常优秀的算法,并且被广泛运用, ...

  8. NLP学习(1)---Glove模型---词向量模型

    一.简介: 1.概念:glove是一种无监督的Word representation方法. Count-based模型,如GloVe,本质上是对共现矩阵进行降维.首先,构建一个词汇的共现矩阵,每一行是 ...

  9. 翻译 Improved Word Representation Learning with Sememes

    翻译 Improved Word Representation Learning with Sememes 题目 Improved Word Representation Learning with ...

随机推荐

  1. hyperledger fabric 1.0.5 分布式部署 (六)

    如何在相同的peer 节点上创建多个 channel 作者在hyperledger fabric 1.0.5 分布式部署 (五)已经向读者们介绍了一个简单的fabric 的部署流程,那么根据上一篇博客 ...

  2. Libre OJ P2332「JOI 2017 Final」焚风现象【差分思想】By cellur925

    题目传送门 这道题开始看起来会很晕...\(qwq\).首先我们要明确题目中的海拔&&温度.温度是受海拔影响的,每次改变的是海拔,我们求的是温度. 我们开始读入的时候便可以处理出开始\ ...

  3. C 语言实例 - 计算平均值

    C 语言实例 - 计算平均值 C 语言实例 C 语言实例 使用数组来计算几个数的平均值. 实例 #include <stdio.h> int main() { int n, i; ], s ...

  4. 开源Html5+Websocket+Mqtt实时聊天室

    本应用示例使用Coolpy7作为Mqtt服务器并启用Websocket代理完美支持高并发大流量即时通过能力,本示以即时通信聊天为为例.还可以应用到其他软件应用如:网页客服系统.网站信息通知.网页即时通 ...

  5. 黑马tomact学习二 tomcat的启动

  6. 63. 不同路径 II

    一个机器人位于一个 m x n 网格的左上角 (起始点在下图中标记为“Start” ). 机器人每次只能向下或者向右移动一步.机器人试图达到网格的右下角(在下图中标记为“Finish”). 现在考虑网 ...

  7. PostgreSQL-9-别名与动态表复制

    1.列别名 SELECT column_name AS alias_name FROM table_name conditions...  ; alias_name: 它指定分配给列的临时名称 SEL ...

  8. python 对mongdb的简单操作

    准备工作:1.选择安装合适的mongodb到本地电脑,2.创建mongodb实例,3,开启mongodb实例,4,下载pymongo第三方库,5.下载pycharm对mongodb可视化支持的插件mo ...

  9. Info.plist权限设置

    <!-- 相册 --> <key>NSPhotoLibraryUsageDescription</key> <string>App需要您的同意,才能访问 ...

  10. vue echarts 大小自适应

    窗口大小时候 ,echarts图自适应 在创建图表的方法中直接,用resize方法 let myChart=this.$refs.myChart; let mainChart = echarts.in ...