word2vec and glove优缺点
目录
传统方法
word2vec
GloVe
word2vec和GloVe区别
传统方法
假设我们有一个足够大的语料库(其中包含各种各样的句子,比如维基百科词库就是很好的语料来源)
那么最笨(但很管用)的办法莫过于将语料库里的所有句子扫描一遍,挨个数出每个单词周围出现其它单词的次数,做成下面这样的表格就可以了。
假设矩阵是5W*5W维,矩阵运算量巨大。假设矩阵的每个数字都用标准32位Int表示,需要10,000,000,000个byte,也就是10GB的内存(且随着词汇量增加程平方倍增长,汉语常用词汇大约有20万个)。
传统方法对于大规模语料,时空上的开销的难以接受。
可以通过SVD化简,SVD的几何意义实际上是通过线性变换来找到最能表达矩阵信息的一组正交基。
- 优点
- 训练速度很快
- 能够实现word embedding
- 缺点
- 因为仅关注cooccurence,word vector包含的词向量语义信息有限,仅仅能进行词语相似度计算等有限的任务。
- 优点
word2vec
所需要的基础知识
- Hierarchical Softmax是用输出值的霍夫曼编码代替原本的One-Hot向量,用霍夫曼树替代Softmax的计算过程。
- Negative Sampling(简称NEG)使用随机采用替代Softmax计算概率,它是另一种更严谨的抽样模型NCE的简化版本。
顾名思义,Word2Vec就是把单词转换成向量。它本质上是一种单词聚类的方法,是实现单词语义推测、句子情感分析等目的一种手段。
Word2Vec 的基本思想是把自然语言中的每一个词,表示成一个统一意义统一维度的短向量。
word2vec适合的情况就是对于一个序列的数据,在序列局部数据间存在着很强的关联。典型的就是文本的序列了,邻近的词之间关联很强,甚至可以通过一个词的上下文大概预测出中间那个词是什么。
选取训练后的单词向量的其中任意3个维度,放到坐标系中展示,会发现语义相似的词汇在空间坐标中的位置会十分接近,而语义无关的词之间则相距较远。这种性质可以用来对单词和句子进行更加泛化的分析。
一些研究还发现,计算有相似关系的单词之间的位移向量也会十分相似,例如从“Man”到“Wonman”的向量,与从“King”到“Queen”之间的向量几乎相同。
至于向量中的每个维度具体是什么意义,没人知道,也无需知道,也许对应于世界上的一些最基本的概念。
训练 Word2Vec 的思想,是利用一个词和它在文本中的上下文的词,这样就省去了人工去标注。
CBOW用环境词预测中心词,得到逻辑回归网络可以用来预测类似“一句话中缺少了一个单词,这个单词最可能是什么”这样的问题。
- 首先预处理数据,把所有需要进行训练的词汇编上序号,比如1-50000
- 随机初始化一个维度为50000x50的矩阵,作为待训练的嵌入矩阵
- 每次取出一个中心词和它的其中一个环境词(环境词市中心词前后的若干n个词,n越大效果越好,但速度越慢)
- 以环境词编号作行数,从词向量矩阵里取出这一行数据(50维向量)
- 将这个50维向量作为逻辑回归网络的输入,训练目标是中心词编号相应的One-Hot向量
在训练的反向传播时计算,不但更新逻辑回归网络的权重矩阵,还要往前多传递一级,把取出的50维向量的值也根据目标梯度进行更新 - 将更新过的50维向量重新更新到嵌入矩阵相应的行
- 重复以上过程,直到所有的中心词都已经被遍历一遍,此时嵌入矩阵值的计算就完成了
Skip-gram 训练方法,它的做法是,将一个词所在的上下文中的词作为输出,而那个词本身作为输入,也就是说,给出一个词,希望预测可能出现的上下文的词。
skip-gram 方法应用更广泛(训练数据较大时候效果比CBOW更好一点)
一个人读书时,如果遇到了生僻的词,一般能根据上下文大概猜出生僻词的意思,而 Word2Vec 正是很好的捕捉了这种人类的行为。
缺点:context 很小,没有使用全局的cooccur,所以实际上对cooccur的利用很少
优化方法
为了提高速度,Word2vec 经常采用 2 种加速方式:
Negative Sample(负采样)
Hierarchical Softmax
具体加速方法就不详细讲解了,感兴趣的可以自己查找资料。
Word2vec 的优缺点
需要说明的是:Word2vec 是上一代的产物(18 年之前), 18 年之后想要得到最好的效果,已经不使用 Word Embedding 的方法了,所以也不会用到 Word2vec。
word2vec优缺点:
优点:
由于 Word2vec 会考虑上下文,跟之前的 Embedding 方法相比,效果要更好(但不如 18 年之后的方法)
比之前的 Embedding方 法维度更少,所以速度更快
通用性很强,可以用在各种 NLP 任务中
缺点:
- 由于词和向量是一对一的关系,所以多义词的问题无法解决。
- Word2vec 是一种静态的方式,虽然通用性强,但是无法针对特定任务做动态优化
GloVe
问题:词义相近的词对贡献次数多,词义差得比较远的词对共现次数比较少,但其实他们的区分度并不明显。能否用共现之间的比值来增大区分度?
Motivation:对word-pair cooccur进行建模,拟合不同word-pair的cooccur之间的差异。
word2vec和GloVe区别
两者最直观的区别在于,word2vec是“predictive”的模型,而GloVe是“count-based”的模型。具体是什么意思呢?
不采用 negative sampling 的word2vec 速度非常快,但是准确率仅有57.4%。
- 只告诉模型什么是有关的,却不告诉它什么是无关的,模型很难对无关的词进行惩罚从而提高自己的准确率
- 在python的gensim这个包里,gensim.models.word2vec.Word2Vec默认是不开启negative sampling的,需要开启的话请设置negative参数,如何设置文档中有明确说明gensim: models.word2vec
- 当使用了negative sampling之后,为了将准确率提高到68.3%,word2vec就需要花较长的时间了(8h38m)
相比于word2vec,因为golve更容易并行化,所以速度更快,达到67.1%的准确率,只需要花4h12m。
由于GloVe算法本身使用了全局信息,自然内存费的也就多一些,相比之下,word2vec在这方面节省了很多资源
参考文献
白话Word2Vec——简书
CBOW训练过程例子
Word Embeddings
GloVe
- 点赞 3
word2vec and glove优缺点相关推荐
- 什么是词向量?word2vec、Glove、FastText分别是什么?
什么是词向量?word2vec.Glove.FastText分别是什么? 在任何一种基于深度学习的自然语言处理系统中,词嵌入和句子嵌入已成为重要组成部分.它们使用固定长度的稠密向量对词和句子进行编码, ...
- word2vec应用场景_介绍Word2Vec和Glove这两种最流行的词嵌入方法背后的直觉
NLP 的首要问题就是寻求恰当的文本表示方法. 因为, 良好的文本表示形式, 是后续进一步处理的基础.近年来,词嵌入方法越来越流行,在各种各样的 NLP 任务中 得到了广泛的应用.简单而言,词嵌入是通 ...
- 词向量算法—Word2Vec和GloVe
最近学习nlp,从CS224n视频课2019winter的课程入手,听完了前几个lecture,以及做完斯坦福课程官网上对应的编程作业之后对词向量的算法有了大致的了解. 但网上对于词向量算法好多都是一 ...
- 词向量经典模型:从word2vec、glove、ELMo到BERT
前言 词向量技术将自然语言中的词转化为稠密的向量,相似的词会有相似的向量表示,这样的转化方便挖掘文字中词语和句子之间的特征.生成词向量的方法从一开始基于统计学的方法(共现矩阵.SVD分解)到基于不同结 ...
- NLP必学:Word2Vec、Glove和ELMO
文章目录 前言 一.one-hot表示 二.词嵌入表示法 三.word embedding的作用 1. 迁移学习 2.类比推理 四.Word2Vec Skip-gram CBOW WordVec的优化 ...
- 【NLP】词向量:从word2vec、glove、ELMo到BERT详解!
目前,词向量(又叫词嵌入word embedding)已经成为NLP领域各种任务的必备一步,而且随着bert elmo,gpt等预训练模型的发展,词向量演变为知识表示方法,但其本质思想不变.学习各种词 ...
- bert获得词向量_词向量详解:从word2vec、glove、ELMo到BERT
目前,词向量(又叫词嵌入)已经成为NLP领域各种任务的必备一步,而且随着bert elmo,gpt等预训练模型的发展,词向量演变为知识表示方法,但其本质思想不变.学习各种词向量训练原理可以很好地掌握N ...
- NLP-词向量-发展:词袋模型【onehot、tf-idf】 -> 主题模型【LSA、LDA】 -> 词向量静态表征【Word2vec、GloVe、FastText】 -> 词向量动态表征【Bert】
NLP-词向量-发展: 词袋模型[onehot.tf-idf] 主题模型[LSA.LDA] 基于词向量的静态表征[Word2vec.GloVe.FastText] 基于词向量的动态表征[Bert] 一 ...
- word2vec以及GloVe总结
词向量 词向量,顾名思义,就是把一个单词或词语表示成一个向量的形式,这是因为在计算机中无法直接处理自然语言,需要把它转化为机器能够理解的语言,比如数值等.最简单的方式是把一个个单词表示成one-hot ...
最新文章
- 迪杰斯特拉算法c++_《算法图解》学习记录7--迪杰斯特拉算法
- dll文件是什么语言编写的_Win7系统当中libeay32.dll文件丢失的解决方法是什么?...
- cmd中如何切换指定目录
- VBA学习_5:流程控制
- 哈佛大学计算机生物科学,生命科学专业
- 中国联通最快明年实现2G全面退网;苹果发布iOS 14.3后火速撤回:原因未知;Angular 11.0.0 正式发布|极客头条
- nginx并发性能测试
- ORB-SLAM2 窗口显示Viewer线程
- 分时操作系统与分布式操作系统
- echarts横向柱形图显示不同类别所占整体百分比
- 在腾讯云主机上搭建pytorch深度学习环境
- 英语作文框架(四级)
- 生成对抗网络(GAN)详细介绍及数字手写体生成应用仿真(附代码)
- Windows 11 22H2 (KB5017321) 更新失败并显示下载错误 0x800F0806
- 计算机术语CAE是指,计算机应用基础 1
- ssh常用命令50条
- WindRiver.Tornado.v2.2.for.Mips-ISO 2CD
- vue中滚动文字公告(2)-transition-slide
- 服务器维护中 verycd,强大的VeryCD服务器终于挂了...
- 1024程序员节,北大成立计算机学院!杨芙清任名誉院长【文末送5本书】
热门文章
- ggplot2-散点图的边框与填充色问题
- 计算机专业简历教育背景怎么写,简历中教育背景怎么写?填写教育背景注意事项...
- 几款主流浏览器的简单比对实验,360极速最适合我
- java web技术文档编写_Portal-Basic Java Web 应用开发框架 v3.0.1 即将发布(开发工作已完成,正在编写开发文档)...
- VS C++学习笔记
- 数据结构之971: 统计利用先序遍历创建的二叉树的深度
- 网站长尾关键词的挖掘与优化
- 微信小程序淘宝首页双排图片布局排版代码
- 查看linux服务器的内存和CPU信息
- 关于技术人员创业的几点建议