1.概述

自从2013年Mikolov提出了word2vec之后,无监督预训练的word embedding越来越火,很多学者都在研究如何获得更好的语义表达。于是,出现了同样是静态表示的Glove,动态表示的Elmo,Bert,Xlnet等。特别是bert,xlnet在NLP多项任务上大杀四方。同时,word embedding的研究倾向于复杂的模型,需要强大的计算能力,所以,Word embedding以后的发展可能基本上只属于巨头们。另一条路来说,随着知识图谱的发展,有学者开始研究如何利用知识图谱来进行语义表示,可能这个方向上,利用简单的Word embedding算法可以获得更好的性能。

2.word embedding发展

在word2vec之前,NLP领域的embedding主要是one-hot、n-gram、co-occurrence matrix,以及在这基础上的矩阵分解。他们的问题是,维数过多,太稀疏。

随着深度神经网络的发展,学者提出了神经语言模型,开始研究分布式表征。这个阶段word embedding只是个附属产物。其图示如下:

2013年Mikolov进行了改进,专注于获得word embedding,于是有了CBOW,Skip-grams两种word2vec,并且在计算时进行了优化,提出了negative sampling和Hierarchical Softmax。

word2vec是基于滑动窗口进行计算的,只考虑了局部信息,那么为了利用全局的信息,本文提出了GloVe.

word2vec,Glove都是静态的,每个词的embedding训练后就是固定的,但是真正的语义是基于context上下文的,于是有了后来的动态embedding,比如,Elmo(基于bi-lstm),Bert,Xlnet(基于transformer).

在利用知识图谱方面,ERNIE也表现出了不俗的性能。

3.论文细节

3.1 共现矩阵

在训练语料中,可以统计每个词i与其上下文窗口内的词j的出现次数,表示为

,在实际实现中,由于距离i的远近不一样,这些上下文的权重应该不一样,所以要根据距离i的位置给一个加权系数。中心词i的上下文中所有词出现次数表示为
,令

3.2 目标函数

共现矩阵可以直接统计出来,那么如何利用它设计一个好的目标函数?

给定两个中心词,i,j,对于上下文词k,如果k与i更相关,那么,

应该更大。为什么要考虑这个比值,而不是直接利用
呢?我觉得比值可以表达与中心词的相关度,单独一个绝对的P无法表达。绝对的P值大,可能是分子大,也可能是分母小,他们的作用并不一样。
与两个中心词i,j,和一个上下文词k有关,表示为:
,其中
,分别是中心词d维向量和上下文词d维向量。接下来要确定F的形式。

向量空间一般是线性的,所以这里考虑F是两个向量的差值的函数,即

,而
是一个标量,而向量差值依然是向量。要将向量转为标量,可以用一些复杂函数,比如NN,但是非线性函数会影响到向量空间的线性结构,所以,本文利用了简单的向量点积,即
.

中心词和上下文词的分布是任意的,为了能让他们互换,F设计为

,所以
,

令F = exp,那么,

,于是有:
,为了保证对称,在左侧对i,k各加入一个bias,即
,其中
包含了

这里有两个问题,一是,在统计中

会有很多为零的情况,为了解决这一问题,可以加一,即
,但是这样差距会变小.二是,其对所有共现词权重都一样,忽略了出现的绝对次数,要解决这个问题,本文提出了加权最小平方回归模型,最终的目标函数为:
,

其中,V是vocabulary的大小。

加权函数f需要满足一些条件:

1.f(0) = 0

2.f(x)单调不减,保证出现次数少的不会加权过大。

3.x很大时,f(x)不能太大,保证出现次数太大的也不会加权过大。

本文选择的是

.其中
是超参数,本文给的是经验值,100和3/4.其图示如下;
x_max=100,alpha = 3/4时加权函数

3.3 模型复杂度

从目标函数出可以看到,计算复杂度最多为

,当V较大时,这个会很大。所以要谨慎选择Vocabulary.

4.实验结果

4.1 任务

(1)词类比word analogy:完成“a is to b as c is to ?”

(2)词相似度word similarity:找到相似度高的词

(3)NER tagging:标记人名,组织名,地点名,时间等,如CoNLL评测集

4.2 结果

(1)word analogy

sem语义,Syn语法

(2)word similarity

(3)NER tagging

从以上三个任务对比结果看,glove都优于其他的embedding。

5.总结

word2vec基于local 窗口来计算,忽略了全局的信息,Glove利用了共现矩阵来弥补了这一缺点。Glove的模型包含中心词embedding,和共现词embedding。在使用的时候可以灵活的利用这两个embedding,比如拼接,加和平均。

pretrain embedding在NLP任务中占据了越来越多的重要性,比如Bert,XlNet等频频刷榜。但是Bert,XLnet模型太复杂,训练很困难。这也会把embedding的发展引入歧途,毕竟对于大多数NLP任务可能不需要这么复杂的模型。

参考资料:

GloVe:Global Vectors for Word Representation,Jeffrey Pennington etc.

https://blog.csdn.net/L_R_H000/article/details/81320286

glove中文词向量_《GloVe:Global Vectors for Word Representation》学习相关推荐

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

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

  2. glove中文词向量_Summary系列glove模型解读

    一.Glove模型简介 语义文本向量表示可以应用在信息抽取,文档分类,问答系统,NER(Named Entity Recognition)和语义解析等领域中,大都需要计算单词或者文本之间的距离或者相似 ...

  3. GloVe:Global Vectors for Word Representation

    论文总体结构: 一.摘要 主要提出新的词向量学习方法glove,利用全局统计信息和局部上下文信息学习 1.当前词向量学习模型能够通过向量的算数计算捕捉之间语法和语意规律,但是背后的规律依旧不可解释 2 ...

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

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

  5. 训练GloVe中文词向量

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

  6. 理解GloVe模型(Global vectors for word representation)

    理解GloVe模型 概述 模型目标:进行词的向量化表示,使得向量之间尽可能多地蕴含语义和语法的信息. 输入:语料库 输出:词向量 方法概述:首先基于语料库构建词的共现矩阵,然后基于共现矩阵和GloVe ...

  7. bert获得词向量_词向量详解:从word2vec、glove、ELMo到BERT

    目前,词向量(又叫词嵌入)已经成为NLP领域各种任务的必备一步,而且随着bert elmo,gpt等预训练模型的发展,词向量演变为知识表示方法,但其本质思想不变.学习各种词向量训练原理可以很好地掌握N ...

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

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

  9. GloVe: Global Vectors for Word Representation-学习笔记

    GloVe: Global Vectors for Word Representation GloVe是一种用于获取单词向量表示的无监督学习算法. 用于最近邻居评估的相似性度量产生一个量化两个词的相关 ...

最新文章

  1. 交叉编译qt-everywhere-opensource-src-4.6.2需要的几个包
  2. Linux iptables防火墙设置与NAT服务配置
  3. python入门练习题-Python简单新手入门练习题
  4. duilib基本布局学习(模仿百度网盘)及绑定按钮事件
  5. Android中ListView的使用以及使用适配器设置数据源
  6. bootstrap mysql分页_bootstrap分页
  7. react性能优化方案_React灵敏且性能卓越的Spray + Akka解决方案,以“在Java和Node.js中发挥并发性和性能”...
  8. linux 4.14.2编译,vmware中linux内核2.6.14.4编译全过程_linux教程
  9. C# WPF 显示图片和视频显示 EmuguCv、AForge.Net测试
  10. J2EE WEBWORK FRAMEWORK安全隐患
  11. mysql物理删除索引_Oracle与MySQL删除字段时对索引和约束的处理
  12. java 获取类的注解_Java 自定义注解通过反射获取类、方法、属性上的注解
  13. Delphi中TEdgeBrowser控件初探
  14. 数字电子技术基础 目录
  15. 【华为hcia基本了解(核心、汇聚、接入交换机)(网络设备-交换机、路由器、防火墙)(AP无线接入点、AC无线控制器)】-20211122
  16. kali PHP网站渗透,小白日记35:kali渗透测试之Web渗透
  17. python的画图工具,Python画图工具matplotlib的安装
  18. 163邮箱怎么注册,怎么给邮箱起一个好用的用户名?
  19. 电脑出现不良代码查找
  20. button loading indicators

热门文章

  1. OpenShift 4 之通过Dockerfile部署容器应用
  2. (二)预处理时间序列数据用于AI预测和异常检测
  3. Python 3 - 如何下载视图和保存证书
  4. list去除重复值的方法(面试高频)
  5. 关于bootstrap和webinf下访问其它文件的方法 2021-04-17
  6. vue webapp滑动事件_js_监听移动端web触屏事件_滑动响应
  7. python时间比较好_花了半个月时间,终于找到了一款最适合的python教程
  8. rmmod无法卸载驱动_AMD芯片组驱动更新:优化了RYZEN CPU供电调节
  9. vue + element-ui 聊天_Vue管理后台框架选择推荐
  10. uni-app条件编译:#ifdef #ifndef #endif