目录

1. 统计语言模型:

2.NNLM神经网络语言模型:

2.1流程:

2.2训练过程:

3.softmax介绍:

摘要:

托马斯·米科洛夫(Tomas Mikolov)在Google带领的研究团队创造了一套Word Embedding训练的方法,称之为word2vec。最早提出word2vec的论文是“Efficient estimation of word representations in vector space”。word2vec就是word to vector的缩写,中文意思就是将词转化为向量。

词向量表示与之前的离散式表示不同,离散式表示以one-hot模型为代表,认为词与词之间是独立的,表示该词的向量只有一个维度是一,其余是0。虽然表示简单,但是其面临着数据稀疏性和维度灾难的问题。而词向量认为在一个数据集中单词与单词之间是有相互联系的,即存在相似关系,存在“距离”的概念,则表示该词的向量空间就不仅仅是只代表该词那么简单,还包括这个词潜在的一些属性,让词与词之间有更多的相似性。

以很流行的N-gram为代表的简单模型,能够使用今天所有的数据集(这个数据集可能有万亿的规模)进行训练,而且在数据集足够大的前提下简单模型的效果会比在规模较小的数据集上训练的复杂模型表现得要好。但是也正是因为模型自身的简单,给他带来了限制——当数据集较少的时候,如果我们不发展新的技术的话,即使我们对简单模型再进行扩展组合,也不会有很显著的进步。随着神经网络的发展,慢慢地可以实现在更大的数据集上训练更复杂的模型。其中提出最成功的概念就是词向量,并且已经有研究证明基于神经网络的语言模型明显优于N-gram模型。

  1. 统计语言模型:

我们可以使用简单的统计模型来分析一个句子。其实方法很简单,一个句子是否合理,我们不需要分析它的语法和语义,只需要分析这句话出现的概率。例如P(w1,w2,„,wt)。w1 到 wT 依次表示这句话中的各个词。

有个很简单的推论是:

其中,P(w1)表示第一个词出现的概率;P(w2|w1)是在已知第一个词的前提下,第二个词出现的概率;以此类推,词wn的出现概率取决于它前面所有的词。

20世纪初,俄国数学家马尔可夫(Andrey Markov)提出每当遇到类似这种情况时,就假设任意一个词出现的概率只与它前面的词相关,这样问题就变得简单了。这种假设在数学上称为马尔可夫假设,于是式(14.1)就可以简化为:

式(14.2)对应的统计语言模型是二元模型(Bigram Model)。一个词出现的概率只与它前面一个词相关叫二元模型,一个词出现的概率与其前面两个词相关叫三元模型,一个词的出现概率与其前面三个词相关叫四元模型。以此类推,一个词出现的概率由前面N-1个词决定,称为N元模型。

可以想象N元模型中N的值越大就越接近句子真实的概率,当然计算量也会越大。当N从1到2,再从2到3,模型的效果上升显著,而当模型从3到4时,效果的提升就不是很明显了。所以一般三元或四元模型用得比较多,很少人会使用四元以上的模型。

2.NNLM神经网络语言模型:

词向量的思想从NNLM中提出,并一直沿用至今,是深度学习在NLP领域中使用的既是基础又是核心的思想。通常词向量的长度都是人为设置的,如我们设置词向量的长度为128,也就是说每个词都会使用一个128维的向量来表示,这个向量的每一个维度都具有抽象的含义(具体的含义我们是无法知道的)。

2.1流程:

我们会分析语料库并构建一个字典V,所有的词都在这个字典中,并且每个词在该字典中有唯一的编号。每次训练时,NNLM从语料库中选取一段长度为n的文本(wt-N+1,…,wt-2,wt-1,wt)如t=10,n=5,那么文本就是(w6,w7,w8,w9,w10),n可以人为设置。接下来我们把长度为n的文本序列用它们所对应的编号来替代,如(w6,w7,w8,w9,w10)就变成了类似(26,42,267,6582,64)这样的编号。然后再将编号变为独热编码格式。假设字典V中一共有10000个词,文本序列的长度为5,经过独热编码处理后的文本数据就变成了5行10000列的矩阵,类似下面这样:

[[0,…,0,…,1,…,0,…,0,…,0,…,0,…,0,…0,…,0,…0,…0]

[0,…,0,…,0,…,1,…,0,…,0,…,0,…,0,…0,…,0,…0,…0]

[0,…,0,…,0,…,0,…,0,…,1,…,0,…,0,…0,…,0,…0,…0]

[0,…,0,…,0,…,0,…,0,…,0,…,0,…,0,…0,…,0,…1,…0]

[0,…,0,…,0,…,0,…,1,…,0,…,0,…,0,…0,…,0,…0,…0]]

最后把最后一个词的独热编码作为模型预测的标签值,其他词的独热编码作为输入传给模型。图14.8中权值矩阵C所在的层称为词特征层,可以理解其为所有词的词向量矩阵(矩阵C在训练开始的时候都是随机值,没有任何意义,经过模型训练以后才能得到有意义的词向量)。例如,词向量的长度为128,那么矩阵C可能就是一个10000行128列的权值矩阵,矩阵中的一行表示一个词的词向量。

每个词的独热编码与矩阵C相乘,得到该词对应的词向量的值,如图14.9所示。

图14.8中的C(wt-n+1)表示wt-n+1的词向量,C(wt-2)表示wt-2的词向量,C(wt-1)表示wt-1的词向量。得到输入的每个词的词向量以后,对这些词向量进行拼(Concatenation),如对4个长度为128维的词向量进行拼接,得到512维的数据。式(14.3)表示多个词向量进行拼接得到x:

模型最终的输出值y的计算公式为:

对照图14.8来看,x为多个词向量拼接后的信号,H为x到隐藏层之间的权值矩阵,d为隐藏层的偏置值,Tanh为隐藏层的激活函数,U为隐藏层到输出层之间的权值矩阵。b+Wx为图14.8中的虚线(表示可有可无)部分,b是偏置值,W是权值矩阵,如果设置了b不为0且W不为零矩阵,则计算b+Wx相当于x可以传给输出层。如果设置b为0且W为零矩阵,相当于不把x直接传给输出层。模型输出神经元的数量等于字典中的词汇数量,最后通过softmax函数得到每个词的预测概率值。

2.2训练过程:

[1]每次从语料库中滑动5个数据,将其中前四个词转为one-hot编码形式,将四个one-hot形式作为输入喂入网络。

[2]从输入到映射层所做的事情是(one-hot向量*矩阵C),这里词的one-hot编码会根据为1的位置去对应C矩阵,去抽出对应位置的128维的词向量,将此向量作为投影层的输出。

[3]上一步投射层会将词的one-hot表示表示成128维的稠密向量,从投影层到隐层是一种全连接的连接方式,线的数量是4*128个,每个隐层神经元有4条线相连接,最后使用tanh函数结合H与d获取激活输出。

[4]从隐层到输出层也是一直全连接的形式,连接线数量为128*10000,使用softmax函数结合U与b获取最后的概率输出。

[5]计算交叉熵损失函数值,以梯度下降方式进行反向传播,在反向传播过程中对参数矩阵C、H、d、U、b进行更新。

*通过不断的喂入批次数据,对网络进行反向传播调参,最后训练出一个进行词预测任务的模型,并将训练好模型中的C矩阵里的每一列都作为,对应于one-hot编码中位置为1词的词向量(大小为1*128),这个词向量就是我们要转化的结果。

NNLM就是在训练一个传入前面几个词,然后预测下一个词的模型。这个模型训练好之后,就得到了我们想要的词向量,其就保存在前面提到的权值矩阵C中。权值矩阵C中的每一行就对应了一个词的词向量,列数表示词向量的长度,可以人为设置。

NNLM能够对句子中更长的依赖关系进行建模,并且得到了每个词的数值表示,然后可以使用词向量来计算词与词之间的相似性,这些都是传统统计模型无法做到的。将词表征为一个向量形式,这个思想直接启发了后来的word2vec的工作。

3.softmax介绍:

在多分类问题中,我们通常会使用softmax函数作为网络输出层的激活函数。softmax函数可以对输出值进行归一化操作,把所有的输出值都转换为概率,所有概率值加起来等于1。softmax函数的公式为:

怎么发展到了Word2vec?相关推荐

  1. NLP发展历程从Word2Vec,GloVe,ELMo,Flair,GPT,BERT

    1.2013年,Word2vec模型,Google公司 无监督模型,与语境无关 2.2014年,GloVe模型,Stanford GLoVe:Global Vectors for Word Repre ...

  2. word2vec词向量训练及中文文本类似度计算

    本文是讲述怎样使用word2vec的基础教程.文章比較基础,希望对你有所帮助! 官网C语言下载地址:http://word2vec.googlecode.com/svn/trunk/ 官网Python ...

  3. [论文阅读] (24) 向量表征:从Word2vec和Doc2vec到Deepwalk和Graph2vec,再到Asm2vec和Log2vec(一)

    <娜璋带你读论文>系列主要是督促自己阅读优秀论文及听取学术讲座,并分享给大家,希望您喜欢.由于作者的英文水平和学术能力不高,需要不断提升,所以还请大家批评指正,非常欢迎大家给我留言评论,学 ...

  4. gensim词向量Word2Vec安装及《庆余年》中文短文本相似度计算 | CSDN博文精选

    作者 | Eastmount 来源 | CSDN博文精选 (*点击阅读原文,查看作者更多精彩文章) 本篇文章将分享gensim词向量Word2Vec安装.基础用法,并实现<庆余年>中文短文 ...

  5. 预训练模型:BERT深度解析《BERT: Pre-training of Deep Bidirectional Transformers for Language Understanding》

    目录 1. 背景 2. 什么是 Bert 及原理? 3. 论文内容<BERT: Pre-training of Deep Bidirectional Transformers for Langu ...

  6. 最小熵原理系列:词向量的维度应该怎么选择?

    ©PaperWeekly 原创 · 作者|苏剑林 单位|追一科技 研究方向|NLP.神经网络 随着 NLP 的发展,像 Word2Vec.Glove 这样的词向量模型,正逐渐地被基于 Transfor ...

  7. 自然语言处理中的语言模型与预训练技术的总结

    目录 0. 背景 1. 统计语言模型(Statistical Language Model) 马尔科夫假设(Markov Assumption) N-Gram模型 拉普拉斯平滑(Laplace Smo ...

  8. 图像处理中提取中间特征是干什么_PyTorch提取中间层特征?

    点击上方"MLNLP",选择"星标"公众号 重磅干货,第一时间送达 编辑:忆臻 https://www.zhihu.com/question/68384370 ...

  9. 循环神经网络_小孩都看得懂的循环神经网络

    点击上方"MLNLP",选择"星标"公众号 重磅干货,第一时间送达 全文共 2014 字,28 幅图,预计阅读时间 20 分钟. 本文是「小孩都看得懂」系列的第 ...

最新文章

  1. Linux 解压命令
  2. ppt提示内存或系统资源不足_为何手机一直提示内存不足?原来是它们惹的祸,赶紧清了...
  3. 一文入魂!聊透分布式系统一致性!
  4. 四方支付系统,聚合平台搭建
  5. JSONObject.fromObject爆红,显示无fromObject方法
  6. 地理时空大数据和深度学习的合作
  7. UE4编辑器界面语言切换
  8. 工业访问控制行业调研报告 - 市场现状分析与发展前景预测(2021-2027年)
  9. 王者荣耀背景故事整合
  10. 论程序员如何正确上班摸鱼
  11. 如何正确学习和使用设计模式
  12. excel从身份证号码中获取邮编信息?
  13. Visual Paradigm社区版安装教程
  14. 7-1 到底是不是太胖了
  15. Flink实战—基于时间窗口定时输出sink
  16. php soap version,PHP的SOAP接口提示Wrong Version
  17. android 调试驱动程序,Android驱动程序开发和调试环境配置
  18. 又一城市5G规划来啦!建1.34万个5G基站,推进8大5G应用工程
  19. 微信小程序高度设置为100%
  20. 使用iperf进行局域网内测速

热门文章

  1. 想创业先问自己20个问题
  2. 解密中国移动推进TD科学发展策略
  3. 中移动效仿谷歌手机平台战略将推OMS
  4. Jquery解决collapsed收缩问题
  5. java ide 的优劣_Eclipse和IntelliJ IDEA到底哪个更好?
  6. 电线之间:采访开发商和企业家Guillermo Rauch
  7. html 在td中加入input,如何将输入标签插入到td标签中?
  8. android 前摄屏幕补光,前后800万摄像头/配前置补光灯_富可视 M2_手机Android频道-中关村在线...
  9. 【C语言double类型输入输出问题】
  10. Double类型出现的nan问题