本周的内容主题是另一个计算语言学领域非常重要的基础概念: n元语法模型(n-gram, 也有翻译为文法模型的)
本部分也非常基础,但是确实统计自然语言处理这一方法论的核心与重中之重。
概念较多,有些容易混淆,但是多多接触之后自然会有更加深刻的理解。
在n元语法模型学习完之后还讲解了对应的数据平滑技术,里面涉及到了一些简单的公式推导
-------------------------------------------------------------------------------------------------------------------
# 语言建模(Language Modeling)
给定自然语言L,对于服从某个未知概率分布的语言L,根据给定的语言样本估计P的过程被称为语言建模
因为从统计角度看,自然语言中的任何句子都可以由任何词串组成。不过所组成的句子概率大小有区别:
S 1: 我刚吃过晚饭
S 2: 刚我过晚饭吃
显然 P(S 1) > P(S 2)
根据语言样本估计出的概率分布 P 就称为语言 L 的语言模 型。
应用:语音识别,OCR,手写体识别,机器翻译,信息检索,切分歧义消解等。
P(s)可有不同的形式,一般写成
其中每个Θ都是模型参数
链式法则:
要估计 p( w i | w 1 w 2 …w i-1 ) ,需要考虑词串 ( w 1 w 2 …w i ) 和 (w 1 w 2 …w i-1 ) 的出现频次。 若不限制词串的长度,参数估计存在困难 为了便于估计参数,限定只考虑 n 个词组成的 词串 (w i-n+1 …w i ) ,该词串被称作 n 元组。基于 n 元组统计得到的语言模型,称为 n 元语言模型。
n 元模型是一种近似模型, n 的选择需要平衡模型的准确性和可计算性。也即可以通过词频来估计概率
unigram (n=1) p(wi) 若语言中有20000个词,则需要估计20000个参数
bigram (n=2) p(wi|wi-1) 若语言中有20000个词,则需要估计200002个参数
trigram (n=3) p(wi|wi-2wi-1) 若语言中有20000个词,则需要估计200003个参数
four-gram(n=4) (有时也称为digram或quadrigram)
在谷歌的机器翻译系统中使用了n=7
n 较大时
n 提供了更多的语境信息,语境更具区别性
n 但是,参数个数多、计算代价大、训练语料 需要多、参数估计不可靠。
n 较小时
n 语境信息少,不具区别性
n 但是,参数个数少、计算代价小、训练语料 无需太多、参数估计可靠。
# 最大似然估计
选择一组参数,使得训练样本的概率最大。
选择能使训练样本取得最大概率值的分布作为总体分布。
令 c(w 1 ,..,w n ) 表示 n-gram w 1 ,..,w n 在训练语料中出 现的次数。则:
# 数据稀疏问题 (Data Sparsness)
考虑计算句子 CHER READ A BOOK 的概率。
c( CHER READ)=0
à p(READ |CHER) = 0
à p(CHER READ A BOOK )=0 ( 有问题 )
MLE 给训练样本中未观察到的事件赋以 0 概率。 若某 n-gram 在训练语料中没有出现 , 则该 n-gram 的概率必 定是 0 。
由于训练样本不足而导致所估计的分布不可靠的问题,称 为数据稀疏问题。
解决的办法是扩大训练语料的规模。但是无论怎样扩大训 练语料,都不可能保证所有的词在训练语料中均出现。
Balh 等人的工作
n 用 150 万词的训练语料训练 trigram 模型
n 测试语料(同样来源)中 23% 的 trigram 没有在训练语料中出 现过 对语言而言,由于数据稀疏的存在, MLE 不是一种很 好的参数估计办法
解决办法 : 平滑技术
n 把在训练样本中出现过的事件的概率适当减小
n 把减小得到的概率密度分配给训练语料中没有出现过的事件
n 这个过程有时也称为 discounting( 减值 )
# Zipf 定律
在 NLP中,数据稀疏问题永远存在,不太可能有一个足够 大的训练语料,因为语言中的大部分词都属于低频词。
Zipf 定律描述了词频以及词在词频表中的位置间的关系。
针对某个语料库,若某个词 w 的词频是 f,并且该词在词频
表中的序号为 r( 即 w是所统计的语料中第 r 常用词) ,则 f × r = k ( k 是一个常数 )
若 w i在词频表中排名 50 , wj 在词频表中排名 150,则 w i的出
现频率大约是 w j的频率的 3 倍。
例:马克吐温的小说 Tom Sawyer
n 共 71,370 词 (word tokens)
n 出现了 8,018 个不同的词 (word types)
注意词型 (word type) 和词例(word token) 的区别。
从 Zipf 定律可以看出
n 语言中只有很少的常用词
n 语言中大部分词都是低频词 ( 不常用的词 )
Zipf 的解释是 Principle of Least effort ,是说话人和听话 人都想省力的结果
n 说话人只想使用少量的常用词进行交流
n 听话人只想使用没有歧义的词 ( 量大低频 ) 进行交流
Zipf 定律告诉我们
n 对于语言中的大多数词,它们在语料中的出现是稀疏的
n 只有少量常用词,语料库可以提供它们规律的可靠样本
# 平滑技术
n Add-one 及 Add-delta 平滑
规定任何一个 n 元组在训练语料中至少出现 一次 ( 即规定没有出现过的 n 元组在训练语料 中出现了一次 )
new_count( n-gram) = old_count (n-gram) + 1
n 留存平滑
留存数据 (Held-out data)
n 把训练语料分作两个部分 :
w 训练语料 (training set): 用于初始的频率估计
w 留存语料 (held out data): 用于改善最初的频率估计
对于每一个 n 元组 w 1 ...w n 计算 :
n C tr ( w 1 ...w n ) w 1 ...w n 在训练语料中出现的频率
n C ho ( w 1 ...w n ) w 1 ...w n 在留存数据中出现的频率
w N r = 在训练语料中出现了 r 次的不同的 n 元组的个数 (type)
w T r = 所有在训练语料中出现了 r 次的 n 元组在留存语料中出现 的频率之和
w T = 留存语料中所有的 n 元组个数 (token)
n Good-Turing 平滑
利用高频率 n 元组的频率调整低频的 n 元组的 频率。
依据
n unigram model 数据稀疏问题比 bigram model 小
n bigram model 数据稀疏问题比 trigram model 小
n …
高阶 n 元组的概率估计可以参考低阶 n 元组的概率 估计值
因此可以把不同阶别的 n 元组模型组合起来产生一 个更好的模型。
插值模型
n Jelinek-Mercer 平滑
主要参考【1】
回退模型
n Katz 平滑
主要参考【2】
# 回退模型和插值模型的区别
在回退模型和线形插值模型中,当高阶 n 元组未出现时,使用低阶 n 元组估算高阶 n 元组的概率分布。
在回退模型中,高阶 n 元组一旦出现,就 不再使用低阶 n 元组进行估计。
在线形插值模型中,无论高阶 n 元组是否 出现,低阶 n 元组都会被用来估计高阶 n 元组的概率分布。
Reference
【1】 Frederick Jelinek and Robert L. Mercer.1980. Interpolated estimation of Markov source parameters from sparse data. In Proceedings of the Workshop on Pattern Recognition in Practice, Amsterdam, The Netherlands: North-Holland, May.
【2】 Slava M. Katz. 1987. Estimation of probabilities from sparse data for the language model component of a speech recognizer. IEEE Transactions on Acoustics, Speech and Signal Processing, ASSP-35(3):400-401, March.