文本处理——语言模型

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/Shingle_/article/details/82392017

统计语言模型

Language modeling:

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

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 ( w 1 , w 2 , , w T ) = t = 1 T P ( w t w 1 , , w t 1 ) .

举个例子:

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 ( w 1 ) = n u m ( w 1 ) / n u m ( a l l )

P ( w 2 w 1 ) = P ( w 1 , w 2 ) / P ( w 1 )

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 ( w 1 , w 2 , , w T ) t = 1 T P ( w t w t ( n 1 ) , , w t 1 ) .

常用:

unigram: P ( w 1 , w 2 , w 3 , w 4 ) = P ( w 1 ) P ( w 2 ) P ( w 3 ) P ( w 4 ) ,

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 ( 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 )

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

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

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


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

smoothing

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

P ( w i w i 1 ) = P ( w i 1 , w i ) P ( w i 1 )

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

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

加法平滑(additive smoothing)

P ( w i w i 1 ) = P ( w i 1 , w i ) + 1 P ( w i 1 ) + | V |

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

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

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

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

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

p r = d r N

N = r = 0 n r d r = r = 0 ( r + 1 ) n r + 1 = r = 1 n r r

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

r > 0 n r p r = 1 n 1 N < 1

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

Katz backooff

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

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

w i V P ( w i | w i 1 ) = 1

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

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 ( 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 ( 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平滑方法中,使用的一元文法的概率不与单词出现的次数成比例,而是与它前面的不同单词的数目成比例。

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

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

x = ( C w t n + 1 , 1 , , C w t n + 1 , d , C w t n + 2 , 1 , C w t 2 , d , C w t 1 , 1 , C w t 1 , d ) .

P ( w t = k | w t n + 1 , w t 1 ) = e a k l = 1 N e a l

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 ( N h )

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

L ( θ ) = t log P ( w t | w t n + 1 , w t 1 )

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

RNNLM

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

这里写图片描述

H t = ϕ ( X t W x h + H t 1 W h h + b h ) ,

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

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

权重参数 W x h R d × h

W h h R h × h

偏差参数 b h R 1 × h

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


效果评估

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

l o s s = 1 N i 1 N l o g p t a r g e t i

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

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/

猜你喜欢

转载自blog.csdn.net/Shingle_/article/details/82392017
今日推荐