一、Glove模型简介

语义文本向量表示可以应用在信息抽取,文档分类,问答系统,NER(Named Entity Recognition)和语义解析等领域中,大都需要计算单词或者文本之间的距离或者相似度,因此,能够表达语义的文本的向量表示非常重要。

单词的语义向量生成主要有两种方式:(1)LSA(term-document)、HAL(term-term)等矩阵分解方法利用全局统计信息生成词向量;(2)skip-gram、CBOW等词向量利用语言模型的局部信息生成词向量,在词类比( king -queen = man-woman)方面具有独特优势。

作者的想法是将以上两种方式的优点结合,提出了全局对数双线性回归模型。该模型采用LSA类似想法利用单词与单词的共现矩阵获取全局统计信息,但只使用非零数据;另一方面采用和skip和cbow一样的词向量方式进行训练

二、相关工作

1、矩阵分解方法(全局信息)

LSA(term-document)、HAL(term-term)。

HAL方法的主要缺点是最常出现的单词在相似性度量中占据了不合理的分量,比如与the、and协同出现的单词,其相似性通常会比较高。论文中提到的解决方法有 positive pointwise mu-tual information (PPMI)和 Hellinger PCA (HPCA) 。

2、词向量方法(局部信息)

Mikolov在2013年提出的skip-gram、CBOW方法采用语言模型,依据一个局部窗口中的单词都是相关的这个思想来训练词向量,在词类比任务上具有非常优秀的表现。这种方法没有使用全局统计信息,比如单词A和单词B经常在一起出现,那么就应该给予更大的权重,而该模型则是对所有的训练语料都给予相同的权重。

三、Glove建模过程

1、公式的推理过程。

定义好相关符号:

代表单词间协同出现次数(word-word co-occurrence counts )的矩阵。
表示单词
在单词
上下文环境中出现的次数。
表示所有在单词
上下文环境中出现单词的次数之和。
表示单词
在单词
上下文中出现的概率。

对于冰(ice)与水蒸汽(steam),作者希望训练得到的词向量具有如下特性:

(1)与冰具有相似属性单词,如固体(solid),要求

值很大

(2)与水蒸气具有相似属性单词,如固体(solid),要求

值很小;

(3)与冰、水蒸气不相关单词,如时尚(fashion),要求

值接近1;

给定单词

的词向量,
,有如下等式:

现在需要解决的问题是函数

怎么构造,作者做了一些合理的假设选择函数

首先要考虑单词

之间的关系,作者希望在线性空间中考察两个向量的相似性,不失线性地考察,因此选择

其次等式右边是个标量,那么式子左边也应该是个标量,现在输入为向量

,那內积应该是合理的选择,于是变量应该为

然后作者又往公式的外面套了一层指数运算exp,最终得到

,为什么是指数运算呢?套上之后,我们的目标是让以下公式尽可能地成立:

本来我们需要求

,现在通过分子分母相对应,我们只需要让
。只需要N∗N的复杂度上进行计算,而不是N∗N∗N,大大减少了复杂度。然后两边取log后,得到

在这里我们发现等式左边是可以交换位置的,可是右边的

并不等于
。为此,将等式6改写为:

添了一个偏差项b,并将log(Xi)吸收到偏差项bi中。到这里我们就可以写出损失函数,

作者进行了进一步的优化,考虑到语料库中经常协同出现的单词具有更为密切的联系,作者提出来加权损失函数。

权重函数要满足如下特性:

(1) 考虑连续性,

时,
趋近于0;

(2)

非递减,这样
很小时就不会有过大的权重;

(3) 当

很大时,f(x)不会过大,这样高频词不会占有过重的权值;

作者选择的满足以上要求的函数,如下:

是经验值,是从Mikolov(2013年)的论文中直接拿来用的。

2、与skip以及cbow的关系

我们知道这两个模型的损失函数如下,

是一个softmax函数:

全局的目标函数可以写成:

对于大量的预料计算求和非常消耗资源,为了提高计算效率,可以把提前把那些有相同值的词分组,目标函数改写为按照词典来统计。

由于之前定义

,代入方程(12)中得到:
是交叉熵,
是之前定义的
。然而交叉熵对于长尾分布表现不好,并且分布
需要做归一化操作,求和操作会成为计算的瓶颈。因此,文章又提出了一种不需要归一化的衡量距离的方式,也就是最小二乘法。

其中

都不需要归一化操作。但是还存在一个问题,就是
往往取值较大,会加重优化过程的计算复杂性,解决方式是,使用log来代替。同时引入权重函数,得到:

这里的公式与我们最开始推导出来的公式非常相似。从这里可以看出,skip-gram模型与这篇论文提出模型差异,本质上是度量概率分布采用的方法不一致。前者使用的是交叉熵损失,后者使用的是加权平方误差损失。

3、复杂度估算

模型的复杂度 为

,在词典V很大时,复杂度远远高于skip-gram的复杂度
, C 是语料库的大小。所以需要对矩阵X做一些限制,比如只取共现次数非0的词等。具体的实现方式是假设词i和词j共现的次数
用词频排名
的幂律函数来表示,

语料库词的总数正比于次数共现次数矩阵元素的加和,

用调和级数来表示幂律求和部分,接下来就是如何确定k了,

是词频排序最大值,同时与非0词频矩阵X的个数相等,也就是等于方程(17)中r的最大值。因为矩阵X中的元素都是词频大于或等于1的,即
,根据方程(17)

因此,总是能够找到一个k使得

,所以
,代入方程(18)得到

根据调和基数展开式

把方程(19)展开得到

是黎曼
函数,在X非常大时,可以看出
的关系取决与
是否 > 1,来决定是
谁占比更大,O(1)常数项不用考虑。

因此,Glove模型的复杂度小于等于skip-gram模型的复杂度。如果

的复杂度=
,远远好于
的复杂度。

四、实验结果

4.1 word analogy任务

在词语类比任务中,我们看到Glove算法在大多数情况下取得了更好的指标。在semantic subset/语义子集、syntactic subset/句法子集上均表现更佳,具体如下(此任务可以测试向量空间的子结构):

4.2 word similarity任务

本文用多个模型在一系列word similarity任务上进行测试,结论是:Glove优于其他模型。详细数据如下:

4.3 NER任务

在此任务中基于CoNLL-03数据集训练模型,并在多个数据集(CoNLL-03、ACE、MUC7)上进行测试,结果显示Glove表现最佳。

五、参考文献

1、官方代码:https://nlp.stanford.edu/projects/glove/。

2、paper原文:https://www.aclweb.org/anthology/D14-1162.pdf。

3、好文参考:理解GloVe模型(Global vectors for word representation)

glove中文词向量_Summary系列glove模型解读相关推荐

  1. glove中文词向量_《GloVe:Global Vectors for Word Representation》学习

    1.概述 自从2013年Mikolov提出了word2vec之后,无监督预训练的word embedding越来越火,很多学者都在研究如何获得更好的语义表达.于是,出现了同样是静态表示的Glove,动 ...

  2. Ubuntu下GloVe中文词向量模型训练

    开启美好的九月 最近在学习textCNN进行文本分类,然后随机生成向量构建embedding网络的分类效果不是很佳,便考虑训练Glove词向量来进行训练,整个过程还是有遇到一些问题,希望懂的旁友能来指 ...

  3. glove中文词向量_NLP中文文本分类任务的笔记(一)

    词向量的使用. 通用的词向量包含word2vec,glove,fasttext三种方式,通过n-gram以及COBW或者skip-gram的方式获取得到, 这边分享一个词向量的GitHub资 Embe ...

  4. 训练GloVe中文词向量

    准备语料 准备好自己的语料,保存为txt,每行一个句子或一段话,注意要分好词. 准备源码 从GitHub下载代码,https://github.com/stanfordnlp/GloVe 将语料cor ...

  5. 深度学习与自然语言处理教程(2) - GloVe及词向量的训练与评估(NLP通关指南·完结)

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

  6. textcnn文本词向量_基于Text-CNN模型的中文文本分类实战

    1 文本分类 文本分类是自然语言处理领域最活跃的研究方向之一,目前文本分类在工业界的应用场景非常普遍,从新闻的分类.商品评论信息的情感分类到微博信息打标签辅助推荐系统,了解文本分类技术是NLP初学者比 ...

  7. 简易英文问答系统(glove.6B词向量)

    1.读入json文件转换成dict形式` # doc = open('train-v2.0.json').readlines()此时格式为list,需要转换格式成dict import json f ...

  8. 使用transformers框架导入bert模型提取中文词向量

    导言 在笔者的上一篇文章大白话讲懂word2vec原理和如何使用中提到了如何将词语转变成计算机能够识别的语言,即将文本数据转换成计算机能够运算的数字或者向量这个概念,并详细阐述了word2vec这个模 ...

  9. 腾讯AI Lab开源大规模高质量中文词向量数据,800万中文词随你用

    今日,腾讯AI Lab 宣布开源大规模.高质量的中文词向量数据.该数据包含800多万中文词汇,相比现有的公开数据,在覆盖率.新鲜度及准确性上大幅提高,为对话回复质量预测和医疗实体识别等自然语言处理方向 ...

最新文章

  1. ASP.NET MVC CODE FIRST 图书管理系统 数据库
  2. webpack.config.js配置遇到Error: Cannot find module '@babel/core'问题
  3. 试用了一下sourceMonitor有点不知所云..
  4. 36.迷宫(广度优先搜索)
  5. jvm性能调优实战 - 27亿级数据量的实时分析引擎,为啥频繁发生Full GC
  6. STM32 CAN过滤器
  7. celery无密码连接redis与带密码连接redis
  8. 走向统一的 .NET 旅程
  9. lgg6 android 9,LG G6的18:9屏幕用起来到底是什么样
  10. Hibernate 添加数据 一 (一对多)
  11. hadoopsdk使用_Hadoop的一些基本操作
  12. golang中base64编码_Golang实现的Base64加密
  13. PHP后端美化,基于Thinkphp5.5表白墙源码,已美化后端
  14. Ubuntu16.04安装微软字体库
  15. Android uses-sdk tools:overrideLibrary
  16. 再见丑陋的 SwaggerUI,这款开源的API文档生成神器界面更炫酷,逼格更高
  17. 【每周一个小技能】WSA 安装
  18. 拿到offer后,我死死的抓着他们不放
  19. “大数据应用场景”之隔壁老王(连载四)
  20. (精确度,召回率,真阳性,假阳性)ACC、敏感性、特异性等 ROC指标

热门文章

  1. ListString 和 ArrayListString的区别
  2. Cocos2D将v1.0的tileMap游戏转换到v3.4中一例(八)
  3. 网络工程师第五站-有线、无线同网段混合组网(多FAT案例)
  4. [转载]使用命名管道实现进程间通信
  5. 熊猫数据集_用熊猫掌握数据聚合
  6. leetcode 896. 单调数列
  7. leetcode 771. 宝石与石头(set)
  8. leetcode1471. 数组中的 k 个最强值(排序)
  9. sql注入语句示例大全_SQL Order By语句:示例语法
  10. xcode扩展_如何将Xcode插件转换为Xcode扩展名