Word2Vec前序 语言模型学习

本文属于NLP学习笔记,纯小白非专业人士,还请大佬指导。

前一篇:NLP 入门整理(不定期更新)

介绍了:词向量的简单模型,如onehot,基于窗口的共生矩阵等。

继续整理:网上的信息不是太少,而是作为小白来说信息过载,尤其是对我这种数学不好的,直到我看了peghoty 哥的博客,系统的介绍,真的大神,人家是发论文,看源码的。

如何让计算机可以理解我们人类的语言,常见有两种方法:

1进行基于规则的语言模型的研究,最开始的。

2基于统计的语言模型,这是后来的,发展到现在随着深度学习的发展,出现了神经网络语言模型。

下面说的就是基于统计的语言模型(理解为概率大,说明更合理,概率小不合理)。

Unigram model:

以一个英文句子为例: “The cat jumped over the puddle.”

模型的目的就是给这个句子一个概率值P,用代表句子中的单词,那么一个有n个单词的句子的概率可以表示为:

理解为:一篇文档由词生成,每个词有其出现的概率,也就是文档的概率=所有词概率的乘积 。

注意:这不是常见的N-gram模型。

N-gram模型

如果我们有一个由 m个词组成的序列(或者说一个句子),我们希望算得概率 P(w1,w2,⋯,wm)
,根据链式规则,可得
P(w1,w2,⋯,wm)=P(w1)P(w2|w1)P(w3|w1,w2)⋯P(wm|w1,⋯,wm−1)

中间插入下条件概率: P(B|A):A 条件下 B 发生的概率。从一个大的空间进入到一个子空间(切片),计算在子空间中的占比。

这是贝叶斯公式吧。真的,数学不好,一看这些就头大。关于贝叶斯公式这里的理解:将语言模型 P() 看作为一种先验知识,从而指导最终结果选择。

这个看着简单,但是却难以落地,因为如果直接算条件概率转化后的式子的话,对每个词要考虑它前面的所有词。数据量很大。

N-gram基于马尔科夫假设:每个词出现的概率只跟它前面的少数几个词有关。比如,二阶马尔科夫假设只考虑前面两个词,相应的语言模型是三元模型。引入了马尔科夫假设的语言模型,也可以叫做马尔科夫模型。学术版可以看peghoty整理的:

应用了这个假设表明了当前这个词仅仅跟前面几个有限的词相关,因此也就不必追溯到最开始的那个词,这样便可以大幅缩减上述算式的长度。

我们就可以设置m=1,2,3,....得到相应的一元模型,二元模型,三元模型了,当m=1,叫1-gram或者unigram ;m=2,叫2-gram或者bigram ;当 m=3叫3-gram或者trigram ;当m=N时,就表示的是N-gram。

N取多大合理:通常应用不会超过3,除了计算复杂度,还要考虑模型效果(参数越多,区别性越高,可靠性越低,需要寻求一个折中)。

平滑性这里没展开,为了解决稀疏矩阵(我的理解是测试集中出现了训练集中没有的词语,导致语言模型计算出的概率为零)。

另外,N-gram理论完了,关于例子,通俗易懂,推荐看下自然语言处理中的N-Gram模型详解 - 白马负金羁 - CSDN博客 

常见的场景:搜索引擎的输入提示,可以利用二元语言模型预测下一个单词。

这个看不太懂,标准模式:统计各个词语出现的频率并存储。需要计算语句的概率的时候,找出对应的概率并练乘起来。

上面这一段比较抽象, 最大似然我理解就是:就是利用已知的样本结果信息,反推最具有可能(最大概率)导致这些样本结果出现的模型参数值!

优点:(1) 采用极大似然估计,参数易训练;(2) 完全包含了前 n-1 个词的全部信息;(3) 可解释性强,直观易理解。

缺点:(1) 缺乏长期依赖,只能建模到前 n-1 个词;(2) 随着 n 的增大,参数空间呈指数增长;(3) 数据稀疏,难免会出现OOV的问题;(4) 单纯的基于统计频次,泛化能力差。

神经概率语言模型

基于前馈神经网络的模型

训练语言模型的最经典之作,要数 Bengio 等人在 2003论文《A Neural Probabilistic Language Model》,

Bengio 用了一个三层的神经网络来构建语言模型,同样也是 n-gram 模型

图中最下方的 wt−n+1,…,wt−2,wt−1 就是前 n−1 个词。现在需要根据这已知的 n−1 个词预测下一个词 wt。C(w) 表示词 w 所对应的词向量,整个模型中使用的是一套唯一的词向量,存在矩阵 C(一个 |V|×m 的矩阵)中。其中 |V| 表示词表的大小(语料中的总词数),m 表示词向量的维度。w 到 C(w) 的转化就是从矩阵中取出一行。

      网络的第一层(输入层)是将 C(wt−n+1),…,C(wt−2),C(wt−1) 这 n−1 个向量首尾相接拼起来,形成一个 (n−1)m 维的向量,下面记为 x。
  网络的第二层(隐藏层)就如同普通的神经网络,直接使用 d+Hx 计算得到。d 是一个偏置项。在此之后,使用 tanh 作为激活函数。
  网络的第三层(输出层)一共有 |V| 个节点,每个节点 yi 表示 下一个词为 i 的未归一化 log 概率。最后使用 softmax 激活函数将输出值 y 归一化成概率。最终,y 的计算公式为:

y = b + Wx + U\tanh(d+Hx)

式子中的 U(一个 |V|×h 的矩阵)是隐藏层到输出层的参数,整个模型的多数计算集中在 U 和隐藏层的矩阵乘法中。

我也看不懂,细节看下peghoty 大神的讲解,包括为什么用tanh 双曲正切函数,涉及参数的取值的建议等。

优点:对比Ngram,词语之间的相似度可以通过词向量表示。

          自带平滑,无需Ngram哪些复杂的平滑算法。

缺点: 仅包含了有限的前文信息。

.2 基于循环神经网络的模型

为了解决定长信息的问题,Mikolov用循环神经网络做语言模型是在 INTERSPEECH 2010 上发表《Recurrent neural network based language model》。

我也看不懂,就不贴公式了。

每来一个新词,就和上一个隐藏层联合计算出下一个隐藏层,隐藏层反复利用,一直保留着最新的状态。各隐藏层通过一层传统的前馈网络得到输出值。

相比单纯的前馈神经网络,可以真正充分地利用所有上文信息来预测下一个词,而不像前面只能开一个 n 个词的窗口,只用前 n 个词来预测下一个词。它就没有使用马尔科夫假设了。

(理论上效果很好,但是用起来却非常难优化)

简单总结下神经网络语言模型(NNLM)

优点:(1) 长距离依赖,具有更强的约束性;(2) 避免了数据稀疏所带来的OOV问题(这么理解:我们通常会有一个字词vocabulary,通常是自定义预加载的,用作训练模型,如果测试数据出现不在词库的词,就说这些词汇是Out-of-vocabulary,简称OOV)

缺点:训练时间长,神经网络黑盒子,可解释性较差(不如统计模型直观)

如果还是不理解,那就再简化下从目的出发,神经网络语言模型就是给定一个序列的前提下,预测下一个词出现的概率。

评价指标

模型有很多,怎么评价效果更好呢 ?

百科介绍:

在信息论中,perplexity(困惑度)用来度量一个概率分布或概率模型预测样本的好坏程度。它也可以用来比较两个概率分布或概率模型。(译者:应该是比较两者在预测样本上的优劣)低困惑度的概率分布模型或概率模型能更好地预测样本。

给测试集的句子赋予较高概率值的语言模型较好,当语言模型训练完之后,测试集中的句子都是正常的句子,那么训练好的模型就是在测试集上的概率越高越好,公式如下:

  结论:句子概率越大,语言模型越好,困惑度越小

先到这里,后面的CBOW,Skip-Gram待整理。

参考:

https://www.cnblogs.com/peghoty/p/3857839.html

http://licstar.net/archives/328

https://zhuanlan.zhihu.com/p/28894219

https://zhuanlan.zhihu.com/p/34219483

 https://blog.csdn.net/baimafujinji/article/details/51281816

https://zhuanlan.zhihu.com/p/44107044

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值