文本处理——语言模型

统计语言模型

Language modeling:

利用条件概率公式,S这个序列出现的概率等于每一个词出现的条件概率相乘。

P(S)=P(w1,w2,,wt1,wt)=P(w1)P(w2|w1)P(w3|w1,w2)P(wt|w1,w2,wt1). P ( S ) = P ( w 1 , w 2 , … , w t − 1 , w t ) = P ( w 1 ) P ( w 2 | w 1 ) P ( w 3 | w 1 , w 2 ) … P ( w t | w 1 , w 2 , … w t − 1 ) .

P(w1,w2,,wT)=t=1TP(wtw1,,wt1). P ( w 1 , w 2 , … , w T ) = ∏ t = 1 T P ( w t ∣ w 1 , … , w t − 1 ) .

举个例子:

P(w1,w2,w3,w4)=P(w1)P(w2w1)P(w3w1,w2)P(w4w1,w2,w3). P ( w 1 , w 2 , w 3 , w 4 ) = P ( w 1 ) P ( w 2 ∣ w 1 ) P ( w 3 ∣ w 1 , w 2 ) P ( w 4 ∣ w 1 , w 2 , w 3 ) .

P(w1)=num(w1)/num(all) P ( w 1 ) = n u m ( w 1 ) / n u m ( a l l )

P(w2w1)=P(w1,w2)/P(w1) P ( w 2 ∣ w 1 ) = P ( w 1 , w 2 ) / P ( w 1 )

P(w3w1,w2)=P(w1,w2,w3)/P(w1,w2) P ( w 3 ∣ w 1 , w 2 ) = P ( w 1 , w 2 , w 3 ) / P ( w 1 , w 2 )

... . . .

问题:条件概率太多,无法估算。

N-gram

k-dependent Markov chain:

当序列长度增加时,计算和存储多个词共同出现的概率会指数增加。N 元语法通过马尔可夫假设(虽然并不一定成立)简化了语言模型的计算。马尔可夫假设是指一个词的出现至于前面 n 个词相关,即 n 阶马尔可夫假设。n 元语法(n-grams)。它是基于 n−1 阶马尔可夫链的概率语言模型:

P(w1,w2,,wT)t=1TP(wtwt(n1),,wt1). P ( w 1 , w 2 , … , w T ) ≈ ∏ t = 1 T P ( w t ∣ w t − ( n − 1 ) , … , w t − 1 ) .

常用:

unigram:P(w1,w2,w3,w4)=P(w1)P(w2)P(w3)P(w4), unigram: P ( w 1 , w 2 , w 3 , w 4 ) = P ( w 1 ) P ( w 2 ) P ( w 3 ) P ( w 4 ) ,

bigram:P(w1,w2,w3,w4)=P(w1)P(w2w1)P(w3w2)P(w4w3), bigram: P ( w 1 , w 2 , w 3 , w 4 ) = P ( w 1 ) P ( w 2 ∣ w 1 ) P ( w 3 ∣ w 2 ) P ( w 4 ∣ w 3 ) ,

trigrams:P(w1,w2,w3,w4)=P(w1)P(w2w1)P(w3w1,w2)P(w4w2,w3). trigrams: P ( w 1 , w 2 , w 3 , w 4 ) = P ( w 1 ) P ( w 2 ∣ w 1 ) P ( w 3 ∣ w 1 , w 2 ) P ( w 4 ∣ w 2 , w 3 ) .

为了避免数据溢出、提高性能,通常会使用取 log 后使用加法运算替代乘法运算

N-grams是基于n−1阶马尔可夫链的概率语言模型,n权衡计算复杂度和模型准确性。一元模型实际上就是一个上下文无关的模型,也就是假设当前词出现的频率与前面的词无关。实际中应用最多的是N=3的三元模型,更高阶的模型就很少用了。N元模型的复杂度 O(|V|N) O ( | V | N )

  • 当 n 较小时,更可靠的统计结果,但是约束信息更少,单 n 元语法往往并不准确
  • 当 n 较大时,对下一个词出现的约束性信息更多,更大的辨别力,但是更稀疏,n元语法需要计算并存储大量的词频和多词相邻频率。

应用:n-grams模型用来评估语句是否合理;搜索引擎或输入法的自动补全、猜想、提示。(数据来源:用户log)

问题:上下文的相关性跨度可能非常大,需要采取一些长程的依赖性。


使用语言模型需要知道模型中的所有条件概率,通过对语料的统计,得到条件概率的过程称作模型的训练

smoothing

问题:(零概率或者统计量不足问题)如果上面统计过程中一对词 (wi1,wi) ( w i − 1 , w i ) 在语料库中没出现,或只出现1-2词,估计概率会有点棘手。

P(wiwi1)=P(wi1,wi)P(wi1) P ( w i ∣ w i − 1 ) = P ( w i − 1 , w i ) P ( w i − 1 )

  • 分子没出现过,概率为0
  • 分子分母都只出现了一次,概率为1

平滑的基本思想:提高低概率,降低高概率,尽量使分布趋于均匀。

加法平滑(additive smoothing)

P(wiwi1)=P(wi1,wi)+1P(wi1)+|V| P ( w i ∣ w i − 1 ) = P ( w i − 1 , w i ) + 1 P ( w i − 1 ) + | V |

古德-图灵估计法(Good-Turing Estimate)

基本思路:对于任何一个出现 r r 的n元语法,都假设它出现了dr

dr=(r+1)nr+1nr d r = ( r + 1 ) n r + 1 n r

一般来说,出现一次的词的数量比出现两次的多,出现两次的比出现三次的多。这种规律称为Zipf定律(Zipf’s Law)。即上式中的 nr+1<nr n r + 1 < n r , 所以, dr<r,d0>0 d r < r , d 0 > 0

对于统计数为r的n元语法,其概率为:

pr=drN p r = d r N

N=r=0nrdr=r=0(r+1)nr+1=r=1nrr N = ∑ r = 0 ∞ n r d r = ∑ r = 0 ∞ ( r + 1 ) n r + 1 = ∑ r = 1 ∞ n r r

所以,样本中所有实践的概率之和为:

r>0nrpr=1n1N<1 ∑ r > 0 n r p r = 1 − n 1 N < 1

因此,有 n1/N n 1 / N 的概率剩余量可以分配给所有未知事件(r=0)

Katz backooff

对于二元组 (wi1,wi) ( w i − 1 , w i ) 的条件概率估计 P(wi|wi1) P ( w i | w i − 1 ) 也可以通过古德-图灵估计做同样的处理。

前提:通过 wi1 w i − 1 预测 wi w i 时,所有可能情况的条件概率总和为1,即:

wiVP(wi|wi1)=1 ∑ w i ∈ V P ( w i | w i − 1 ) = 1

对于出现次数非常少( T T 通常在8-10左右)的二元组 (wi1,wi),按照古德-图灵方法打折扣,这样上式结果小于1(),意味着一部分概率量没有分配出去可以留给没有看到的二元组 (wi1,wi) ( w i − 1 , w i ) 。二元模型概率公式:

P(wi|wi1)=f(wi|wi1),count(wi1,wi)Tfgt(wi|wi1),0<count(wi1,wi)<TQ(wi1)f(wi),otherwise P ( w i | w i − 1 ) = { f ( w i | w i − 1 ) , c o u n t ( w i − 1 , w i ) ≥ T f g t ( w i | w i − 1 ) , 0 < c o u n t ( w i − 1 , w i ) < T Q ( w i − 1 ) f ( w i ) , o t h e r w i s e

Q(wi1)=1wiseenP(wi|wi1)wiunseenP(wi Q ( w i − 1 ) = 1 − ∑ w i s e e n P ( w i | w i − 1 ) ∑ w i u n s e e n P ( w i

三元模型:

P(wi|wi2,wi1)=f(wi|wi2,wi1),count(wi2,wi1,wi)Tfgt(wi|wi2,wi1),0<count(wi2,wi1,wi)<TQ(wi2,wi1)f(wi|wi1),otherwise P ( w i | w i − 2 , w i − 1 ) = { f ( w i | w i − 2 , w i − 1 ) , c o u n t ( w i − 2 , w i − 1 , w i ) ≥ T f g t ( w i | w i − 2 , w i − 1 ) , 0 < c o u n t ( w i − 2 , w i − 1 , w i ) < T Q ( w i − 2 , w i − 1 ) f ( w i | w i − 1 ) , o t h e r w i s e

N元模型,依次类推。

Kneser-Ney backoff

Kneser-Ney平滑方法中,使用的一元文法的概率不与单词出现的次数成比例,而是与它前面的不同单词的数目成比例。

大多数平滑算法可以用下面的等式表示:

Psmooth(wi|wi1in+1)={α(wi|wi1in+1),count(wiin+1)>0γ(wi1in+1)Psmooth(wi|wi1in+2),count(wiin+1)=0 P s m o o t h ( w i | w i − n + 1 i − 1 ) = { α ( w i | w i − n + 1 i − 1 ) , c o u n t ( w i − n + 1 i ) > 0 γ ( w i − n + 1 i − 1 ) P s m o o t h ( w i | w i − n + 2 i − 1 ) , c o u n t ( w i − n + 1 i ) = 0

也就是说如果n阶语言模型具有非零的计数,就用正常的分布,否则就后退到低阶分布,选择比例因子使条件概率分布之和等于1。通常负和这种框架的平滑算法称为后备模型(back-off model)

区别于后备模型,插值模型(如Jelinek-Mercer平滑方法、修正的Kneser-Ney平滑方法)在确定非零计数的n元文法的概率时,也会使用低阶分布的信息。


语言模型的训练中,我们还要关注语料的选取问题。

  • 保持训练数据和应用的一致
  • 训练数据通常越多越好
  • 需要对训练数据进行预处理,如网页文本中存在大量制表符,需要过滤

几款开源的语言模型项目:

神经语言模型

NNLM

这里写图片描述

首先,将n-1字上下文中的每个词 wti w t − i (由整数[1,N]表示)映射到一个关联的d维的特征向量 Cwti C w t − i ,也就是参数矩阵C中的第 wti w t − i 列。 向量 Ck C k 包含单词 k k 的学习特征。设向量x表示这些n-1个特征向量的拼接:

x=(Cwtn+1,1,,Cwtn+1,d,Cwtn+2,1,Cwt2,d,Cwt1,1,Cwt1,d).

P(wt=k|wtn+1,wt1)=eakNl=1eal P ( w t = k | w t − n + 1 , … w t − 1 ) = e a k ∑ l = 1 N e a l

ak=bk+i=1hWkitanh(ci+j=1(n1)dVijxj) a k = b k + ∑ i = 1 h W k i tanh ⁡ ( c i + ∑ j = 1 ( n − 1 ) d V i j x j )

该模型的容量由隐藏单元h的数量和学习的单词特征d的数量控制。词典大小通常比较大,所以输出层的计算量很大,复杂度为 O(Nh) O ( N h )

使用基于梯度的优化算法训练神经网络以最大化训练集对数似然:

L(θ)=tlogP(wt|wtn+1,wt1) L ( θ ) = ∑ t log ⁡ P ( w t | w t − n + 1 , … w t − 1 )

改进:将概率计算层级分解,采用二分树,计算复杂度降为O(logN) (Morin and Bengio 2005).

RNNLM

循环神经网络,它不是刚性地记住所有固定长度的序列,而是通过隐藏状态来储存前面时间的信息。

这里写图片描述

Ht=ϕ(XtWxh+Ht1Whh+bh), H t = ϕ ( X t W x h + H t − 1 W h h + b h ) ,

实际应用中输入为num_steps个可以输入进网络的形状为(batch_size, vocab_size)的矩阵。也就是总时间步 T T =num_steps,时间步 t 的输入 XtRn×d X t ∈ R n × d ,其中 n n =batch_sized=vocab_size(one-hot 向量长度)。

HtRn×h H t ∈ R n × h 是该时间步的隐藏层变量。

权重参数 WxhRd×h W x h ∈ R d × h

WhhRh×h W h h ∈ R h × h

偏差参数 bhR1×h b h ∈ R 1 × h

Ot=HtWhy+by. O t = H t W h y + b y .

def rnn(inputs, state, params):
    # inputs 和 outputs 皆为 num_steps 个形状为(batch_size, vocab_size)的矩阵。
    W_xh, W_hh, b_h, W_hy, b_y = params
    H, = state
    outputs = []
    for X in inputs:
        H = nd.tanh(nd.dot(X, W_xh) + nd.dot(H, W_hh) + b_h)
        Y = nd.dot(H, W_hy) + b_y
        outputs.append(Y)
    return outputs, (H,)

值得一提的是,即便在不同时间步,循环神经网络始终使用这些模型参数。因此,循环神经网络模型参数的数量不随历史增长而增长。

重点

  • 循环神经网络通过引入隐藏状态来捕捉时间序列的历史信息。
  • 循环神经网络模型参数的数量不随历史增长而增长。
  • 可以基于字符级循环神经网络来创建语言模型。

对RNN、LSTM、GRU感兴趣,想进一步了解的同学,欢迎移步: > https://blog.csdn.net/Shingle_/article/details/82469351


效果评估

交叉熵损失函数。在语言模型中,该损失函数即被预测字符的对数似然平均值的相反数:

loss=1Ni1Nlogptargeti l o s s = − 1 N ∑ i − 1 N l o g p t a r g e t i

困惑度(perplexity):困惑度是对交叉熵损失函数做指数运算后得到的值。

e1NNi1logptargeti=eloss e − 1 N ∑ i − 1 N l o g p t a r g e t i = e l o s s

  • 最佳情况下,模型总是把标签类别的概率预测为 1。此时困惑度为 1。
  • 最坏情况下,模型总是把标签类别的概率预测为 0。此时困惑度为正无穷。
  • 基线情况下,模型总是预测所有类别的概率都相同。此时困惑度为类别数。

《数学之美》 3

《统计自然语言处理》 5

《A Neural Probabilistic Language Model》 Bengio 2003 http://www.jmlr.org/papers/volume3/bengio03a/bengio03a.pdf

Morin, F. and Bengio, Y. (2005) 《Hierarchical Probabilistic Neural Network Language Model》. AISTATS’2005. http://www.iro.umontreal.ca/~lisa/pointeurs/hierarchical-nnlm-aistats05.pdf

http://www.scholarpedia.org/article/Neural_net_language_models

《Recurrent neural network based language model》 Toma´s Mikolov 2010 http://www.fit.vutbr.cz/research/groups/speech/publi/2010/mikolov_interspeech2010_IS100722.pdf

http://www.flickering.cn/nlp/2015/02/%E6%88%91%E4%BB%AC%E6%98%AF%E8%BF%99%E6%A0%B7%E7%90%86%E8%A7%A3%E8%AF%AD%E8%A8%80%E7%9A%84-2%E7%BB%9F%E8%AE%A1%E8%AF%AD%E8%A8%80%E6%A8%A1%E5%9E%8B/

http://www.flickering.cn/nlp/2015/03/%E6%88%91%E4%BB%AC%E6%98%AF%E8%BF%99%E6%A0%B7%E7%90%86%E8%A7%A3%E8%AF%AD%E8%A8%80%E7%9A%84-3%E7%A5%9E%E7%BB%8F%E7%BD%91%E7%BB%9C%E8%AF%AD%E8%A8%80%E6%A8%A1%E5%9E%8B/

http://www.flickering.cn/ads/2015/02/%E8%AF%AD%E4%B9%89%E5%88%86%E6%9E%90%E7%9A%84%E4%B8%80%E4%BA%9B%E6%96%B9%E6%B3%95%E4%B8%80/

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值