nlp基础之语言模型

nlp入门基础之语言模型



https://zhuanlan.zhihu.com/p/28080127
https://zhuanlan.zhihu.com/p/52061158
https://blog.csdn.net/weixin_40056628/article/details/89364456

1. 简介

语言模型(language model)是用来计算一个句子的概率的模型,或者预测下一个词出现的概率。通俗地讲,就是用来评估一个句子有多大的可能性是有意义的(是人话而不是一堆杂乱无章的词语组合)。
一段自然语言文本可以看做是一个离散时间序列 s = ω 1 , ω 2 , ⋯   , ω T s=\omega_1,\omega_2,\cdots,\omega_T s=ω1,ω2,,ωT,而一个语言模型的作用是构建这个时间序列的概率分布 P ( s ) P(s) P(s)。概率计算公式可以表示为:
P ( s ) = P ( ω 1 , ω 2 , ⋯   , ω T ) = P ( ω 1 ) P ( ω 2 ∣ ω 1 ) P ( ω 3 ∣ ω 1 , ω 2 ) ⋯ P ( ω T ∣ ω 1 , ω 2 , ⋯   , ω T − 1 ) = ∏ t = 1 T P ( ω t ∣ ω 1 , ω 2 , ⋯   , ω t − 1 ) (1-1) \begin{aligned} P(s)&=P(\omega_1,\omega_2,\cdots,\omega_T)\\ &=P(\omega_1)P(\omega_2|\omega_1)P(\omega_3|\omega_1,\omega_2)\cdots P(\omega_T|\omega_1,\omega_2,\cdots,\omega_{T-1})\\ &=\prod_{t=1}^{T}P(\omega_t|\omega_1,\omega_2,\cdots,\omega_{t-1})\\ \tag{1-1} \end{aligned} P(s)=P(ω1,ω2,,ωT)=P(ω1)P(ω2ω1)P(ω3ω1,ω2)P(ωTω1,ω2,,ωT1)=t=1TP(ωtω1,ω2,,ωt1)(1-1)
对于 P ( ω t ∣ ω 1 , ω 2 , ⋯   , ω t − 1 ) P(\omega_t|\omega_1,\omega_2,\cdots,\omega_{t-1}) P(ωtω1,ω2,,ωt1),可以在大量娱乐库中采用频率统计的方式来近似估计:
P ( ω t ∣ ω 1 , ω 2 , ⋯   , ω t − 1 ) = C ( ω 1 , ω 2 , ⋯   , ω t ) ∑ ω C ( ω 1 , ω 2 , ⋯   , ω t − 1 , ω ) = C ( ω 1 , ω 2 , ⋯   , ω t ) C ( ω 1 , ω 2 , ⋯   , ω t − 1 ) (1-2) \begin{aligned} P(\omega_t|\omega_1,\omega_2,\cdots,\omega_{t-1})&=\frac{C(\omega_1,\omega_2,\cdots,\omega_t)}{\sum_{\omega}C(\omega_1,\omega_2,\cdots,\omega_{t-1},\omega)}\\ &=\frac{C(\omega_1,\omega_2,\cdots,\omega_t)}{C(\omega_1,\omega_2,\cdots,\omega_{t-1})}\\ \tag{1-2} \end{aligned} P(ωtω1,ω2,,ωt1)=ωC(ω1,ω2,,ωt1,ω)C(ω1,ω2,,ωt)=C(ω1,ω2,,ωt1)C(ω1,ω2,,ωt)(1-2)
直接计算上式是不现实的。假设词汇表大小为 V V V,由上式可以看到,产生第 i i i个词 ω i \omega_i ωi的概率是由已经产生的 i − 1 i-1 i1个词 ω 1 , ω 2 , ⋯   , ω i − 1 \omega_1,\omega_2,\cdots,\omega_{i-1} ω1,ω2,,ωi1决定的,那么我们必须考虑所有 V i − 1 V^{i-1} Vi1种不同历史情况下,产生第 i i i个词的概率。这样模型中就会有 V i V^i Vi个自由参数(每个条件概率看成一个参数)。这在实际中几乎是无法从训练数据中估计出这些参数的。并且,很多词的组合可能在语料库中根本不存在,这样会导致最后估计出的概率为零(数据稀疏问题)。
因此需要引入语言模型来降低参数个数。语言模型有基于统计模型的,比如n元语法(n-gram),也有基于神经网络的。

2. n元语法

n元语法(n-grams)是基于n-1阶马尔科夫链的概率语言模型,也即在n-gram模型中,一个词的出现概率只与前面n-1个词有关:
P ( ω 1 , ω 2 , ⋯   , ω T ) = ∏ t = 1 T P ( ω t ∣ ω t − ( n − 1 ) , ω 2 , ⋯   , ω t − 1 ) (2-1) P(\omega_1,\omega_2,\cdots,\omega_T)=\prod_{t=1}^{T}P(\omega_t|\omega_{t-(n-1)},\omega_2,\cdots,\omega_{t-1})\\\tag{2-1} P(ω1,ω2,,ωT)=t=1TP(ωtωt(n1),ω2,,ωt1)(2-1)
每个条件概率需要实现在大量语料库中根据频率近似求得。

  • n=1: unigram,每个词独立于历史
  • n=2: bigram,每个词只与它前面的一个词有关。实际中常用
  • n=3: trigram,每个词只与它前面的两个词有关

n元语法模型可能的缺陷:

  1. 参数空间过大
  2. 数据稀疏

2.1. 一元模型(unigram)

一元模型假设每句子中的每个每个词都是独立的,也即:
p ( s ) = p ( ω 1 ) p ( ω 2 ) ⋯ p ( ω T ) (2-2) p(s)=p(\omega_1)p(\omega_2)\cdots p(\omega_T)\\\tag{2-2} p(s)=p(ω1)p(ω2)p(ωT)(2-2)
需要实现在语料库中统计每个字的频率。

2.2. 二元模型(bigram)

p ( s ) = p ( ω 1 ∣ s t a r t ) p ( ω 2 ∣ ω 1 ) ⋯ p ( ω T ∣ e n d ) (2-3) p(s)=p(\omega_1|start)p(\omega_2|\omega_1)\cdots p(\omega_T|end)\\\tag{2-3} p(s)=p(ω1start)p(ω2ω1)p(ωTend)(2-3)

注意需要有句子开头和结尾标识符。实践中,需要先统计语料库中词语的两两组合情况的各自频率,再统计每个词的频率,以便得到条件概率。

3. n-gram模型实践

3.1. 文本分类

假设类别有两类: Y 1 , Y 2 Y_1,Y_2 Y1,Y2,原始文本为 X X X。由贝叶斯公司可知:
P ( Y i ∣ X ) ∝ P ( X ∣ Y i ) P ( Y i ) , i = 1 , 2 (2-4) P(Y_i|X)\propto P(X|Y_i)P(Y_i),i=1,2\tag{2-4} P(YiX)P(XYi)P(Yi),i=1,2(2-4)

P ( Y i ) P(Y_i) P(Yi)就是类别 Y i Y_i Yi的文本比例; P ( X ∣ Y i ) P(X|Y_i) P(XYi)就是在类别 Y i Y_i Yi下句子 X X X的概率,可以由n-gram算得

在上述贝叶斯假设条件下,可以简化过程,直接将训练样本的n-gram特征作为输入去训练一个分类器,得到分类模型。

4. 神经网络语言模型

4.1. 基于前馈神经网络的语言模型

Bengio在2003的论文A Neural Probabilistic Language Model。
在这里插入图片描述

图4.1 前馈神经网络语言模型

先给每个词在连续空间中赋予一个向量(词向量),再通过神经网络去学习这种分布式表征。利用神经网络去建模当前词出现的概率与其前 n-1 个词之间的约束关系。很显然这种方式相比 n-gram 具有更好的泛化能力只要词表征足够好。从而很大程度地降低了数据稀疏带来的问题。但是这个结构的明显缺点是仅包含了有限的前文信息
该模型利用前n-1个词去预测下一个词,输入层是n-1个词的one-hot向量(每个向量是 1 × V 1\times V 1×V),再乘以一个 1 × D 1\times D 1×D的权重矩阵,得到 V × D V\times D V×D的中间向量,将n-1个中间向量拼接成隐藏层(长度为 D ( n − 1 ) D(n-1) D(n1))。隐藏层的激活函数为tanh,输出层为一个全连接层再接一个softmax函数生成概率分布。该模型的副产物就是词向量(输入层到隐藏层的权重矩阵)
这篇论文是词向量的鼻祖,后面的cbow和skip-gram都是由这里启发而来。

4.2. 基于循环神经网络的语言模型

为了解决定长信息(只能利用前面n-1个词的信息)的问题,Mikolov在2010的论文 Recurrent neural network based language model。
在这里插入图片描述

图4.2 RNN语言模型(图片来源见水印)

网络的输入层是"s我想你",输出层可以看作是分别计算条件概率 P(w|s)、P(w|s我)、P(w|s我想)、P(w|s我想你) 在整个词表V中的值。而我们的目标就是使期望词对应的条件概率尽可能大。

相比单纯的前馈神经网络,隐状态的传递性使得RNN语言模型原则上可以捕捉前向序列的所有信息(虽然可能比较弱)。通过在整个训练集上优化交叉熵来训练模型,使得网络能够尽可能建模出自然语言序列与后续词之间的内在联系。

为了解决依赖的信息过长的问题,后续又有LSTM、attention等改进方法

  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值