Word Embedding理解
一直以来感觉好多地方都吧Word Embedding和word2vec混起来一起说,所以导致对这俩的区别不是很清楚。
其实简单说来就是word embedding包含了word2vec,word2vec是word embedding的一种,将词用向量表示。
1.最简单的word embedding是把词进行基于词袋(BOW)的One-Hot表示。这种方法,没有语义上的理解。把词汇表中的词排成一列,对于某个单词 A,如果它出现在上述词汇序列中的位置为 k,那么它的向量表示就是“第 k 位为1,其他位置都为0 ”的一个向量。但是这种表示方法学习不到单词之间的关系(位置、语义),并且如果文档中有很多词,词向量可能会很长。对于这两个问题,第一个问题的解决方式是ngram,但是计算量很大,第二个问题可以通过共现矩阵(Cocurrence matrix)解决,但还是面临维度灾难,所以还需降维。
2.现在较常用的方法就是通过word2vec训练词汇,将词汇用向量表示。该模型涉及两种算法:CBOW和Skip-Gram。
这种方法我们可以发现在语义理解上效果比较好,可以将我们语义上相似的词用相似的向量表示,但是有个缺点,同一个词只有一种语义,如:我喜欢吃苹果 很多人觉得苹果手机很好用 这两个句子中的苹果是不同的语义,表示不同的对象,但是word2vec没有办法表示出来。和传统的词向量相比,使用语言模型预训练(如ELMo[1],OpenAI GPT [2] 和 BERT [3]对该定义的理解及相关论文解释可以参考 https://mp.weixin.qq.com/s/A-PKyZcXwOz-2lL-hBmjsA)其实可以看成是一个句子级别的上下文的词表示,它可以充分利用大规模的单语语料,并且可以对一词多义进行建模。
cbow是给定上下文来预测中心词,skip-gram是通过中心词预测上下文,两者所用的神经网络都只需要一层hidden layer.
他们的做法是:
cbow:
将一个词所在的上下文中的词作为输入,而那个词本身作为输出,也就是说,看到一个上下文,希望大概能猜出这个词和它的意思。通过在一个大的语料库训练,得到一个从输入层到隐含层的权重模型。如下图所示,第l个词的上下文词是i,j,k,那么i,j,k作为输入,它们所在的词汇表中的位置的值置为1。然后,输出是l,把它所在的词汇表中的位置的值置为1。训练完成后,就得到了每个词到隐含层的每个维度的权重,就是每个词的向量。
skip-gram
将一个词所在的上下文中的词作为输出,而那个词本身作为输入,也就是说,给出一个词,希望预测可能出现的上下文的词。通过在一个大的语料库训练,得到一个从输入层到隐含层的权重模型。如下图所示,第l个词的上下文词是i,j,k,那么i,j,k作为输出,它们所在的词汇表中的位置的值置为1。然后,输入是l,把它所在的词汇表中的位置的值置为1。训练完成后,就得到了每个词到隐含层的每个维度的权重,就是每个词的向量。
cbow与skip-gram的区别:
cbow在学习过程中,类似k个学生(周围词)同时由一位老师(中心词)授课,如果下次学习的时候还在该老师的课上(窗口内)则可以继续学习,否则不会继续。
而skip-gram类似一个学生(中心词)多个老师(周围词),学生通过向多位老师学习学到最终的知识能力,所以比cbow学习的时间长,即时间复杂度高,数据量少或有生僻字时适用,另外,直接训练Skip-Gram类型的算法,很容易使得高曝光词汇得到过多的权重。同样地,cbow效率较高,速度快,数据量大时适用。(https://www.cnblogs.com/june0507/p/9412989.html解释得不错)另外,cbow与skip-gram在最后的softmax层一般适用层次softmax,即层次softmax是先根据语料计算出词典中每个词的词频,然后根据词频构建霍夫曼树,得到霍夫曼树之后就可以得到根节点到每一个叶节点的路径(叶节点代表的就是词典中的每个词,一颗霍夫曼树中有词典大小个叶节点),得到路径之后再根据路径计算词典中每个词的概率,计算这个概率的时间复杂度是O(logD),比直接计算打分的O(D)的时间复杂度低很多。 后来一般会用负采样代替霍夫曼树。.
fasttext的模型结构与cbow类似,但是两者区别很大:
fastText的模型和CBOW的模型结构一样,虽然结构一样,但是仍有不同
一、目的不一样,fastText是用来做文本分类的,虽然中间也会产生词向量,但词向量是一个副产物,而CBOW就是专门用来训练词向量的工具。
fastText的输出层是预测句子的类别标签,而CBOW的输出层是预测中间词;
fastText的输入层是一个句子的每个词以及句子的ngram特征,而CBOW的输入层只是中间词的上下文,与完整句子没有关系;
fastText是一个文本分类算法,是一个有监督模型,有额外标注的标签
CBOW是一个训练词向量的算法,是一个无监督模型,没有额外的标签,其标准是语料本身,无需额外标注。
用fastText做文本分类的关键点是极大地提高了训练速度(在要分类的文本类别很多的情况下,比如500类),原因是在输出层采用了层级softmax,层级softmax如何提高训练速度在上面CBOW的层级softmax中已经介绍了,在这里就是将叶节点有词频变成文本分类数据集中每种类别的样本数量,霍夫曼树的结构也可以处理类别不均衡的问题(每种类别的样本数目不同),频繁出现类别的树形结构的深度要比不频繁出现类别的树形结构的深度要小,这也使得进一步的计算效率更高(意思是数目多的样本深度小,那很多样本都只需乘一次就把概率计算出来了(构建树的过程中记录了大多数路径的值),自然就快)。这段话的原文:https://blog.csdn.net/sun_brother/article/details/80327070
具体的细节在学习过程中感觉这位用户的博客https://www.cnblogs.com/pinard/p/7243513.html 写的挺好的。
对于我上面的理解如果觉得有帮助,点个赞咯~~~~~~
[1] Peters, M. E. et al. Deep contextualized word representations. naacl (2018).
[2] Radford, A. & Salimans, T. Improving Language Understanding by Generative Pre-Training. (2018).
[3] Devlin, J., Chang, M.-W., Lee, K. & Toutanova, K. BERT: Pre-training of Deep Bidirectional Transformers for Language Understanding. (2018).
Word Embedding理解的更多相关文章
- 建模角度理解word embedding及tensorflow实现
http://www.jianshu.com/p/d44ce1e3ec2f 1. 前言 本篇主要介绍关键词的向量表示,也就是大家熟悉的word embedding.自Google 2013 年开源wo ...
- 从Word Embedding到Bert模型—自然语言处理中的预训练技术发展史(转载)
转载 https://zhuanlan.zhihu.com/p/49271699 首发于深度学习前沿笔记 写文章 从Word Embedding到Bert模型—自然语言处理中的预训练技术发展史 张 ...
- Word Embedding/RNN/LSTM
Word Embedding Word Embedding是一种词的向量表示,比如,对于这样的"A B A C B F G"的一个序列,也许我们最后能得到:A对应的向量为[0.1 ...
- 深度学习word embedding猜测性别初探
根据用户的一些特征数据,如果能推测出用户的性别借此提高产品的服务质量.广告的精准性等都是极好的. 机器学习方法有很多,而且一般都可以达到不错的效果,比如svm或神经网络等. 本文使用的代码参考——&l ...
- DeepNLP的核心关键/NLP词的表示方法类型/NLP语言模型 /词的分布式表示/word embedding/word2vec
DeepNLP的核心关键/NLP语言模型 /word embedding/word2vec Indexing: 〇.序 一.DeepNLP的核心关键:语言表示(Representation) 二.NL ...
- GloVe:另一种Word Embedding方法
若想深层地理解GloVe和本文,最好了解SVD, word2vec(skip-gram为主)的相关知识.若仅寻求一种新的word embedding方法,可以不必了解以上前置知识. 一言以蔽之,Glo ...
- word2vec和word embedding有什么区别?
word2vec和word embedding有什么区别? 我知道这两个都能将词向量化,但有什么区别?这两个术语的中文是什么? from: https://www.zhihu.com/question ...
- zz从Word Embedding到Bert模型—自然语言处理中的预训练技术发展史
从Word Embedding到Bert模型—自然语言处理中的预训练技术发展史 Bert最近很火,应该是最近最火爆的AI进展,网上的评价很高,那么Bert值得这么高的评价吗?我个人判断是值得.那为什么 ...
- 词向量 词嵌入 word embedding
词嵌入 word embedding embedding 嵌入 embedding: 嵌入, 在数学上表示一个映射f:x->y, 是将x所在的空间映射到y所在空间上去,并且在x空间中每一个x有y ...
随机推荐
- MUI 打包android app
自有证书生成方法 manifest配置 (2).图标配置:所有图片格式必须是png,且严格符合分辨率要求.使用其他图片格式重命名为png会导致打包失败.配置图标时选择自动生成所有适用图标,选择一个大图 ...
- callback 回调函数
把函数a当做一个参数传入函数b <script> Array.prototype.mysort = function(callback){ let s = this; //准备向回调函数里 ...
- Microsoft.Identity的IPasswordHasher加密的默认实现与运用
本文版权归博客园和作者吴双本人共同所有,转载和爬虫请注明原文地址 www.cnblogs.com/tdws 相信了解了MS Identity认证体系的一定知道UserManager的作用,他是整个体 ...
- lua系列之 lua-cjson模块安装报错问题解决
lua-cjson下载 下载地址 报错信息 [root@LeoDevops lua-cjson]# make cc -c -O3 -Wall -pedantic -DNDEBUG -I/usr/loc ...
- gradle教程 [原创](eclipse/ADT下 非插件 非Android Studio/AS)纯手打 第二篇:gradle简单实战
一个bug 一个脚印的叫你们用gradle. 1介于网络上的很多资料都是老的 不适用与现在的新版本gradle 尤其是有些gradle方法改名了老的用不了 2介于网上都是粘贴复制并且零碎我很蛋疼啊,走 ...
- SQL创建索引
http://www.w3school.com.cn/sql/sql_create.asp 注释:更新一个包含索引的表需要比更新一个没有索引的表更多的时间,这是由于索引本身也需要更新.因此,理想的做法 ...
- 使用sts(SpringToolSuite4)无法将项目部署到tomcat容器
一般情况下maven项目不能添加到tomcat容器中 ,需要在项目上进行设置 但是sts没有安装此插件,可以改用eclipse进行开发.
- JVM优化之 -Xss -Xms -Xmx -Xmn 参数设置
XmnXmsXmxXss有什么区别Xmn.Xms.Xmx.Xss都是JVM对内存的配置参数,我们可以根据不同需要区修改这些参数,以达到运行程序的最好效果. -Xms 堆内存的最小大小,默认为物理内存的 ...
- easyui datagrid 取消删除的方法
下面为取消方法 ... { field: 'Guid', title: '操作', width: 80, align: 'center', formatter: function (value, ro ...
- {03--CSS布局设置} 盒模型 二 padding bode margin 标准文档流 块级元素和行内元素 浮动 margin的用法 文本属性和字体属性 超链接导航栏 background 定位 z-index
03--CSS布局设置 本节目录 一 盒模型 二 padding(内边距) 三 boder(边框) 四 简单认识一下margin(外边距) 五 标准文档流 六 块级元素和行内元素 七 浮动 八 mar ...