一直以来感觉好多地方都吧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. Java知多少(43)异常处理基础

    Java异常是一个描述在代码段中发生的异常(也就是出错)情况的对象.当异常情况发生,一个代表该异常的对象被创建并且在导致该错误的方法中被抛出(throw).该方法可以选择自己处理异常或传递该异常.两种 ...

  2. 驱动文件中只有cat/inf/dll文件,怎么安装

    网上下载了一个驱动,里面包含文件只有cat/inf/dll文件,怎么安装? 1.计算机-右键-管理-设备管理器,找到要装驱动的设备上 2.右键-更新驱动程序-浏览到本地的这个驱动文件夹 3.开始安装

  3. 嵌入式开发之UDP 丢包--- UDP 丢包控制方法

    0. 发送端可以,发送五次左右,再Sleep 1.调用recv方法接收端收到数据后,处理数据花了一些时间,处理完后再次调用recv方法,在这二次调用间隔里,发过来的包可能丢失.对于这种情况可以修改接收 ...

  4. AD域部署使用bginfo软件

    实验网络拓扑图: 实验目标: bginfo收集信息服务器通过bginfo软件收集每个域客户端信息录入到SQL server 2008数据库 bginfo软件官网下载地址: https://docs.m ...

  5. MySQL主从介绍 准备工作 配置主 配置从 测试主从同步

    配置主: • 安装mysql • 修改my.cnf,增加server-id=130和log_bin=xiaobo1 • 添加环境变量 Vim /root/.bash_profile PATH=$PAT ...

  6. Nginx-配置一个简单的http虚拟服务

    配置文件内容如下: #user nobody; worker_processes 4; #工作进程的个数,可以配置多个,一般配置成CPU的核数 pid logs/nginx.pid; # 此文件用于记 ...

  7. PS脚本博客

    http://blog.csdn.net/fzhlee/article/category/2718489

  8. [转]Git忽略规则及.gitignore规则不生效的解决办法

    在git中如果想忽略掉某个文件,不让这个文件提交到版本库中,可以使用修改根目录中 .gitignore 文件的方法(如无,则需自己手工建立此文件).这个文件每一行保存了一个匹配的规则例如: # 此为注 ...

  9. 【黑金原创教程】【FPGA那些事儿-驱动篇I 】实验二:按键模块① - 消抖

    实验二:按键模块① - 消抖 按键消抖实验可谓是经典中的经典,按键消抖实验虽曾在<建模篇>出现过,而且还惹来一堆麻烦.事实上,笔者这是在刁难各位同学,好让对方的惯性思维短路一下,但是惨遭口 ...

  10. C# 读写Excel的一些方法,Aspose.Cells.dll

    需求:现有2个Excel,一个7000,一个20W,7000在20W是完全存在的.现要分离20W的,拆分成19W3和7000. 条件:两个Excel都有“登录名”,然后用“登录名”去关联2个Excel ...