我是靠谱客的博主 开心早晨,最近开发中收集的这篇文章主要介绍笔记(总结)-神经语言模型和词向量,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

之前笔记(总结)-统计语言模型主要介绍了统计语言模型。可以看到,最终对句子的建模为(以二元文法为例):

P(S)=p(w1)p(w2|w1)...p(wn|wn1) P ( S ) = p ( w 1 ) p ( w 2 | w 1 ) . . . p ( w n | w n − 1 )

核心问题在于如何计算参数 p(wi|wi1) p ( w i | w i − 1 ) 。根据计算参数的不同方法,语言模型分为:

  • 统计语言模型:极大似然估计
  • 神经语言模型:神经网络预测

神经语言模型


模型建构简图

可以看到,模型的输入即为 wi1 w i − 1 的one-hot表示。输出为一个 |V| | V | 维向量, V V 为词汇表,输出表示的是给定wi1,下一个词是词表中的某个词的概率。训练过程与普通NN在多分类问题上的应用是一致的,可以看到这是无监督的训练过程。

当训练好神经网络后, p(wi|wi1) p ( w i | w i − 1 ) 就蕴含在网络中,给定句子,将词按one-hot格式输入到网络中,即可在输出中取对应的概率。


词的表示

在上面神经语言模型中,词是以one-hot形式存储的。one-hot形式简洁,存储方便,但是维数巨大,无法反映词之间的关系。one-hot存储过于稀疏,在神经网络的前馈计算和反向传播更新参数时不友好。是否有更好的方式来表示词呢?

早在1986年,Hinton在《Learning distributed representations of concepts》中就提出使用低维稠密的向量来表示词。由于向量可以用距离来度量相似性,词之间的关系自然也能够通过距离进行很好的表达。不同的维度可以视作词的不同语言属性的衡量标准,如第3维表示词做主语的可能性、第10维表示词与数词搭配的可能性等等。在这样一个高维(相对于3维)向量空间里,词之间的关系得到了很好的表示。且相对于 |V| | V | 维的one-hot表示,词向量的维度大大降低了。


这里写图片描述


Bengio的NNLM与词向量

Bengio在2001年的文章中就借鉴了Hinton的这种思想。先来看看神经网络语言模型的结构图:


这里写图片描述

针对语料中一段文本 wi(n1)...wi1 w i − ( n − 1 ) . . . w i − 1 ,预测 wi w i 的概率。不再采用one-hot表示,每个词都有对应的向量表示,词向量拼接后作为输入,经过单隐层计算后,输出仍为 |V| | V | 维向量,softmax化后表示条件概率。公式化上述过程:

词向量化:

wi(n1),...,wi1embeddinge(wi(n1)),...,e(wi1) w i − ( n − 1 ) , . . . , w i − 1 ⟹ e m b e d d i n g e ( w i − ( n − 1 ) ) , . . . , e ( w i − 1 )

拼接词向量为输入:

x=[e(wi(n1),...,e(wi1))] x = [ e ( w i − ( n − 1 ) , . . . , e ( w i − 1 ) ) ]

单隐层:

h=tanh(Hx+b(1)) h = t a n h ( H x + b ( 1 ) )

输出层:

y=Wx+Uh+b(2) y = W x + U h + b ( 2 )

条件概率:

p(wi|wi(n1)...wi1)=eywijeywj p ( w i | w i − ( n − 1 ) . . . w i − 1 ) = e y w i ∑ j e y w j

在模型训练过程中,词向量也作为参数进行优化,最终能够训练出一个神经网络语言模型,以及副产物——词向量。


Mikolov的词向量模型——CBOW&Skip-gram

上述的NNLM训练过程收敛太慢,需要拟合出一个靠谱的NNLM太麻烦了,词向量只是副产物。如果我们只想得到词向量,能否进行问题的简化呢?

Mikolov2013年推出了两篇论文,提出了两种模型——CBOW和Skip-gram来专门获取词向量。针对Bengio的模型,做出的改动如下:

  1. 去除NNLM中的单隐层
  2. 不考虑词序的影响(词序并不一定影响阅读,人的阅读习惯也并非总是线性扫描的),各个词向量求均值向量(而非拼接)作为输入
  3. 不只是考虑 wi w i 的历史,而且考虑其下文

可以看到,去除单隐层简化了网络结构,而均值化词向量极大减小了输入的尺寸。由于我们并不需要得到一个语言模型,只是想要通过神经网络找到词的合理表示,因此引入上下文环境来建模(具有相似性质的词往往出现在相似的上下文中)是更科学的。这样就得到了CBOW模型:


这里写图片描述

CBOW全称为Continuous Bag-of-Words,模型正是将简单的词袋表示(one-hot)转化为连续的词向量(embedding)。

CBOW是利用上下文来预测中心词,如果将输入输出对调,改为由中心词预测上下文,就得到了Skip-gram模型,对比如下:


这里写图片描述 这里写图片描述

Mikolov还基于这两个算法开源了word2vec(word to vector)工具。此后众多词向量生成的算法和开源工具几乎都是在此基础上进行的改造。自此之后,自然语言中的“词”终于有了一个较好的表示,低维(计算量小)、稠密(计算友好)、基于向量空间计算距离(相似性度量)。到目前为止,词向量也被应用在了各类NLP任务的上游特征提取环节,极大地方便了神经网络对自然语言的建模,也较大地提高了各类NLP任务的效果。

最后

以上就是开心早晨为你收集整理的笔记(总结)-神经语言模型和词向量的全部内容,希望文章能够帮你解决笔记(总结)-神经语言模型和词向量所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(42)

评论列表共有 0 条评论

立即
投稿
返回
顶部