一直以来感觉好多地方都吧Word Embeddingword2vec混起来一起说,所以导致对这俩的区别不是很清楚。

其实简单说来就是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理解的更多相关文章

  1. 建模角度理解word embedding及tensorflow实现

    http://www.jianshu.com/p/d44ce1e3ec2f 1. 前言 本篇主要介绍关键词的向量表示,也就是大家熟悉的word embedding.自Google 2013 年开源wo ...

  2. 从Word Embedding到Bert模型—自然语言处理中的预训练技术发展史(转载)

    转载 https://zhuanlan.zhihu.com/p/49271699 首发于深度学习前沿笔记 写文章   从Word Embedding到Bert模型—自然语言处理中的预训练技术发展史 张 ...

  3. Word Embedding/RNN/LSTM

    Word Embedding Word Embedding是一种词的向量表示,比如,对于这样的"A B A C B F G"的一个序列,也许我们最后能得到:A对应的向量为[0.1 ...

  4. 深度学习word embedding猜测性别初探

    根据用户的一些特征数据,如果能推测出用户的性别借此提高产品的服务质量.广告的精准性等都是极好的. 机器学习方法有很多,而且一般都可以达到不错的效果,比如svm或神经网络等. 本文使用的代码参考——&l ...

  5. DeepNLP的核心关键/NLP词的表示方法类型/NLP语言模型 /词的分布式表示/word embedding/word2vec

    DeepNLP的核心关键/NLP语言模型 /word embedding/word2vec Indexing: 〇.序 一.DeepNLP的核心关键:语言表示(Representation) 二.NL ...

  6. GloVe:另一种Word Embedding方法

    若想深层地理解GloVe和本文,最好了解SVD, word2vec(skip-gram为主)的相关知识.若仅寻求一种新的word embedding方法,可以不必了解以上前置知识. 一言以蔽之,Glo ...

  7. word2vec和word embedding有什么区别?

    word2vec和word embedding有什么区别? 我知道这两个都能将词向量化,但有什么区别?这两个术语的中文是什么? from: https://www.zhihu.com/question ...

  8. zz从Word Embedding到Bert模型—自然语言处理中的预训练技术发展史

    从Word Embedding到Bert模型—自然语言处理中的预训练技术发展史 Bert最近很火,应该是最近最火爆的AI进展,网上的评价很高,那么Bert值得这么高的评价吗?我个人判断是值得.那为什么 ...

  9. 词向量 词嵌入 word embedding

    词嵌入 word embedding embedding 嵌入 embedding: 嵌入, 在数学上表示一个映射f:x->y, 是将x所在的空间映射到y所在空间上去,并且在x空间中每一个x有y ...

随机推荐

  1. NLog使用

    NLog的配置文件,文件上面有详细的备注,注意这个配置文件一定要放在NLog.dll的文件夹里 <?xml version="1.0" encoding="utf- ...

  2. 【转】彻底搞清C#中cookie的内容

    http://blog.163.com/sea_haitao/blog/static/77562162012027111212610/ 花了2天时间,彻底搞清C#中cookie的内容,搞清以下内容将让 ...

  3. 求教如何在win7 X64系统上安装.net 3.5 sp1

    其实win7系统已自带net 3.5.1了.开始菜单——控制面板——程序——打开或关闭windows功能,找到Microsoft .NET Framework 3.5.1,去掉选项,确定.然后再进入“ ...

  4. linux 设置中文版man手册

    作为CentOS 新手,看懂英文man固然重要,不过配置好中文man也可以让自己更快速地学习!1. 下载中文man包源码的网址:https://src.fedoraproject.org/repo/p ...

  5. [Bayes] KL Divergence & Evidence Lower Bound

    L lower是什么? L lower, 既然大于,那么多出来的这部分是什么?如下推导: 得出了KL的概念,同时也自然地引出了latent variable q.

  6. [Full-stack] 世上最好语言 - PHP

    前言 本篇是对个人PHP, Laravel系列博文的总结与思考. 目的在于理清并熟练如下过程: "需求 --> Usercase --> UI --> 框架 --> ...

  7. 使用CollectionViewSource,通过Xaml绑定自动排序

    这个是一个完成分组和排序功能的Datagrid,同样只是简单的绑定到List集合,后台不用额外的代码,所有功能都在Xaml中完成: 首先在UI中定义CollectionViewSource资源,在这里 ...

  8. react学习笔记(一)用create-react-app构建 React 开发环境

    React 可以高效.灵活的用来构建用户界面框架,react利用高效的算法最小化重绘DOM. create-react-app 是来自于 Facebook,通过该命令不需配置就能快速构建 React ...

  9. NIO相关概念之Buffer

    Buffer的定义: 概念上,缓冲区是包在一个对象内的基本数据元素数组.Buffer类相比一个简单数组的优点是它将关于数据的数据内容和信息包含在一个单一的对象中.Buffer类以及它专有的子类定义了一 ...

  10. iOS - UILabel添加图片之富文本的简单应用

    //创建富文本 NSMutableAttributedString *attri = [[NSMutableAttributedString alloc] initWithString:@" ...