前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >重磅!!|“自然语言处理(NLP)系列教程06”之 Glove模型详解

重磅!!|“自然语言处理(NLP)系列教程06”之 Glove模型详解

作者头像
ShuYini
发布2019-08-08 15:47:55
1.5K0
发布2019-08-08 15:47:55
举报

引言

本次文章将主要介绍Glove模型,首先会从模型的公式开始,然后解析模型构建分析,最后与跳字模型(Skip-Gram)、连续词袋模型(CWOB)做对比。

本文概要

1

Golve模型的概述

2

Golve模型公式

3

Glove模型的由来

4

Glov和Skip-Gram、CWOB模型对比

5

下期预告

6

参考文献

正文开始

1

Golve模型的概述

模型目标:进行词的向量化表示,使得向量之间尽可能多地蕴含语义和语法的信息。

输入:语料库

输出:词向量

方法的主要概述:首先基于语料库构建词的共现矩阵,然后基于共现矩阵(不明白的小伙伴可以看上一篇文章)和GloVe模型学习词向量。** 开始 -> 统计共现矩阵 -> 训练词向量 -> 结束**

2

Golve模型公式

Golve模型代价函数:

vi,vj是单词i和单词j的词向量,bi,bj是两个标量(主要用于偏差项),f是权重函数,N是词汇表的大小(共现矩阵维度为N*N)。可以看出Glove模型并没有使用神经网络的方法。

3

Glove模型的由来

那么很多人就会好奇了,这个Glove模型是怎么构建出来的呢?在介绍之前,首先定义几个符号。

其中Xi,j表示在整个语料库中,单词i和单词j共同出现在一个窗口中的次数。Xi其实就是矩阵单词i那一行的和。

上面表示条件概率,表示单词k出现在单词i语境中的概率。

这个是两个条件概率的比值ratio(由于没有办法编辑公式,所以这里就用ratio代替)。

根据以上关系,作者的主要是思想就是,ratio这个指标是有规律的,规律统计表如下:

其实这是一个很简单的规律,但是实际却是很实用。

其主要的思想是:假设我们已经得到了词向量vi,vj,vk,如果我们用词向量通过某种函数计算ratio,能够同样得到这样的规律的话,就意味着我们词向量与共现矩阵具有很好的一致性,也就说明我们的词向量中蕴含了共现矩阵中所蕴含的信息。

那么假设用向量vi,vj,vk计算ration的函数为g(vi,vj,vk)(这里先不管具体的函数形式),那么应该有:

即:

上面两者应该尽可能的接近。

那么很容易得到用二者的差方作为代价函数:

可以看到,模型中包含3个单词,这就意味在N*N*N的复杂度上进行计算,但是这样太复杂了,能不能再简单点呢?

那么我们仔细思考了g(vi,vj,vk),它可能会帮上忙。这里作者的主要猜想是这样的:

  • 要考虑单词i和单词j之间的关系,那g(vi,vj,vk)中大概会有这么一项:vi-vj。(在线性空间中考察两个向量的近似性,不失线性地考察,那么vi-vj大概是个合理的选择)。
  • ratio是个标量,那么g(vi,vj,vk)最应该也是一个标量,虽然其输入都是向量,那么内积应该是个合理的选择,于是应该有这么一项:
  • 然后作者又在

的外面套上了一层指数运算exp(),得到最终的g(vi,vj,vk)=exp(

)

那么作者为什么要套上一层exp()呢?其实套上之后,我们的目标是以下公式尽可能的成立:

即:

即:

即:

然后就会发现简化的方法了:只需要让上式分子对应相等,分母对应相等,即:

然而分子分母形式相同,就可以把两者统一考虑了,即:

本来我们需要求:

现在只要求:

两边取个对数:

那么代价函数就可以简化为:

根据上面可以看出,现在只需要在N*N的复杂度上面进行计算,而不是在N*N*N的复杂度上进行计算了,现在关于为什么在外面套一层exp()就清楚了,正是因为套了一层exp(),才使得差形式变成商形式,进而等式两边分子分母对应相等,进而简化模型。

然而,出现了一些问题。仔细观察两个式子:

也就是说等式左侧不具有对称性,但是右侧具有对称性。这个该怎么办呢?

解决方法是将代价函数中的条件概率展开:

即:

将其变成为:

即添加了一个偏差项bj,并将log(Xi)吸收到偏差项bi中。于是代价函数就变成了:

然后基于出现频率越高的词对儿权重应该越大的原则,在代价函数中添加权重项,于是代价函数进一步完善:

具体权重函数应该是什么样的呢?首先它应该是非减的,其次当词频过高时,权重不应该过分大,作者通过实验确定权重函数为:

到这里就将整个模型介绍完毕了。你懂了吗??

4

Glov和Skip-Gram、CWOB模型对比

前面我们主要介绍了基于计数的词向量生成模型(共现矩阵(SVD优化))以及基于直接预测的模型(跳字模型Skip-Gram、连续词袋模型CWOB)。对于这两类模型,会发现:

基于计数的方法在中小规模语料训练很快,有效地利用了统计信息。但用途受限于捕捉词语相似度,也无法拓展到大规模语料。

Skip-gram/CBOW这类是一个local context window的方法,其进行模型预测必须遍历所有的窗口训练,负样本采用sample的方式会缺失词的关系信息,也无法有效利用单词的全局统计信息。但它们显著地提高了上级NLP任务,其捕捉的不仅限于词语相似度。

Glove模型结合了以上两类方法的优势。融合了矩阵分解Latent Semantic Analysis (LSA)的全局统计信息和local context window优势。融入全局的先验统计信息,可以加快模型的训练速度,又可以控制词的相对权重。

5

下期预告

下期将介绍:

1、fastText模型分析介绍

6

参考文献

[1]http://www.hankcs.com/nlp/word-vector-representations-word2vec.html

[2]http://zh.d2l.ai/chapter_natural-language-processing/index.html

[3]https://blog.csdn.net/u014665013/article/details/79642083【本文主要参考此篇文章】

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-03-29,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 AINLPer 微信公众号,前往查看

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

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档