当前位置:   article > 正文

第五章语言模型:n-gram_python n-gram模型

python n-gram模型

基本概念

语句 s = w 1 w 2 . . . w m s=w_1w_2...w_m s=w1w2...wm的先验概率

p ( s ) = p ( w 1 ) × p ( w 2 ∣ w 1 ) × p ( w 3 ∣ w 1 w 2 ) × . . . × p ( w m ∣ w 1 . . . w m − 1 ) = ∏ i = 1 m p ( w i ∣ w 1 . . . w m − 1 ) = p ( w 1 , w 2 , . . . , w m − 1 ) p(s)=p(w_1)\times p(w_2|w_1)\times p(w_3|w_1w_2)\times...\times p(w_m|w_1...w_{m-1}) \\ =\prod_{i=1}^mp(w_i|w_1...w_{m-1}) \\ =p(w_1,w_2,...,w_{m-1}) p(s)=p(w1)×p(w2w1)×p(w3w1w2)×...×p(wmw1...wm1)=i=1mp(wiw1...wm1)=p(w1,w2,...,wm1)
其中,当 i = 1 i=1 i=1时, p ( w 1 ∣ w 0 ) = p ( w 1 ) p(w_1|w_0)=p(w_1) p(w1w0)=p(w1)

需要说明的是:

  1. w i w_i wi可以是字、词、短语或词类等等,称为统计基元。通常可以以词代之。
  2. w i w_i wi的概率通过 w 1 , . . . , w i − 1 w1,...,w_{i-1} w1,...,wi1决定,由特定的一组 w 1 , . . . , w i − 1 w_1,...,w_{i-1} w1,...,wi1构成的一个序列,称为 w i w_i wi的历史。

历史基元*

  1. 随着历史基元的数量增加,不同的“历史”(路径)按指数级增长,对于第 i ( i > 1 ) i(i\gt1) i(i>1)个统计基元,历史基元的个数为 i − 1 i-1 i1
  2. 如果有 L L L个不同的基元(假设L为词汇集大小),理论上每个单词都有可能出现在1到 i − 1 i-1 i1的每一个位置上,那么, i i i基元就有 L i − 1 L^{i-1} Li1种不同的历史情况
  3. 我们必须考虑在所有的 L i − 1 L^{i-1} Li1种不同的历史情况下产生第 i i i个基元的概率,那么,模型中有 L m L^m Lm(m个位置,每个位置都有L种可能性)个自由参数 p p p

自由参数的数量过于庞大。

我的理解是:要计算出每一句话的先验概率的话,离不开每个词的概率,这里的概率是条件概率,也就是已知前面的词的情况下,这个词在这个位置出现的概率。参考传统机器学习方法,如朴素贝叶斯,都会实现准备好这些概率。然而正如上文所叙述的那样,随着每一句句子中统计基元的增加,所要计算、储存的自由参数是庞大的。

问题解决方法

设法减少历史基元个数,将 w 1 w 2 . . . w i − 1 w_1w_2...w_{i-1} w1w2...wi1映射到等价类 S ( w 1 w 2 . . . w i − 1 ) S(w_1w_2...w_{i-1}) S(w1w2...wi1),使得等价类的数目远远小于原来不同历史基元的数目,则有 p ( w i ∣ w 1 , . . . , w i − 1 ) = p ( w i ∣ S ( w 1 , . . . , w i − 1 ) ) p(w_i|w_1,...,w_{i-1})=p(w_i|S(w_1,...,w_{i-1})) p(wiw1,...,wi1)=p(wiS(w1,...,wi1))如何划分这个等价类是值得探究的。

如何划分等价类*

将两个历史映射到同一个等价类,当且仅当这两个历史最近的 n − 1 ( 1 ≤ n ≤ l ) n-1(1\le n\le l) n1(1nl)个词相同。

请添加图片描述

该情况下的语言模型被称为n元文法(n-gram)模型。

  1. n=1,即出现在第i位上的基元 w i w_i wi独立于历史,一元文法也被写为uni-gram或者monogram;
  2. n=2,2-gram(bi-gram),第 i i i位上的词 w i w_i wi仅与他前面的一个历史词 w i − 1 w_{i-1} wi1有关,$被称为1阶马尔可夫链;
  3. n=3,3-gram(tri-gram),被称为2阶马尔可夫链;

以二元文法为例,我们可以近似认为,一个词的概率只依赖于它前面的一个词。于是有:
p ( s ) = ∏ i = 1 m p ( w i ∣ w 1 . . . w m − 1 ) = ∏ i = 1 m p ( w i ∣ w i − 1 ) p(s)=\prod_{i=1}^mp(w_i|w_1...w_{m-1})=\prod_{i=1}^mp(w_i|w_{i-1}) p(s)=i=1mp(wiw1...wm1)=i=1mp(wiwi1)
当最近的 n − 1 n-1 n1个词相同时,两个历史就归为了一个等价类,那么完全可以把第i个统计基元依赖到身前的 n − 1 n-1 n1个词。

为了保证条件概率在 i = 1 i=1 i=1时有意义,同时为了保证句子内所有字符串的概率和为1,即 ∑ s p ( s ) = 1 \sum_sp(s)=1 sp(s)=1,可以在句子首尾两端增加两个标志 < B O S > w 1 w 2 . . . w m < E O S > <BOS>w_1w_2...w_m<EOS> <BOS>w1w2...wm<EOS>

题型十二:根据n-gram划分句子*

请添加图片描述那么二元文法的概率可以写成
请添加图片描述

n-gram的应用

音字转换问题

请添加图片描述
拼音对应了很多汉字的可能性,通过贝叶斯公式将其转化,就得到了另一种形式。由于固定汉字对应的拼音也是固定的,所以这一项直接就是1,所以最后回到了求语句的先验概率,把音对应的所有字给找出来,然后找哪种组合最为常见。

请添加图片描述

微软拼音的输入法是基于n-gram开发的。

汉语分词问题*

还是通过贝叶斯变换,转化求解对象:
请添加图片描述
其与音字转换问题最大的区别在于对于Seg的先验概率涉及到的每一个条件概率的内容。
请添加图片描述
总结一下,如果汉字的总数为N,
对于一元语法来说:

  1. 样本空间为N;
  2. 只选择使用频率最高的汉字;

对于二元语法来说:

  1. 样本空间为 N 2 N^2 N2,因为是一个二元组;
  2. 效果比一元语法明显提高。

对于汉字而言,四元语法比较合适;

参数估计*

训练语料:用于建立模型,确定模型参数的已知语料。

对于n-gram,参数 p ( w i ∣ w i − n + 1 . . . w i − 1 ) p(w_i|w_{i-n+1}...w_{i-1}) p(wiwin+1...wi1)都可以用最大似然估计求得(用相对频率计算概率的方法),其公式为:
p ( w i ∣ w i − n + 1 i ) = f ( w i ∣ w i − n + 1 i − 1 ) = c ( w i − n + 1 i ) ∑ w i c ( w i − n + 1 i ) p(w_i|w_{i-n+1}^i)=f(w_i|w_{i-n+1}^{i-1})=\frac{c(w_{i-n+1}^{i})}{\sum_{w_i}c(w_{i-n+1}^i)} p(wiwin+1i)=f(wiwin+1i1)=wic(win+1i)c(win+1i)
其中, f ( w i ∣ w i − n + 1 i − 1 ) f(w_i|w_{i-n+1}^{i-1}) f(wiwin+1i1)为在给定 w i − n + 1 i − 1 w_{i-n+1}^{i-1} win+1i1的条件下, w i w_i wi出现的相对频度,分子为 w i − n + 1 i − 1 w_{i-n+1}^{i-1} win+1i1 w i w_i wi同时出现的次数,分母 ∑ w i c ( w i − n + 1 i ) \sum_{w_i}c(w_{i-n+1}^i) wic(win+1i)是历史串 w i − n + 1 i − 1 w_{i-n+1}^{i-1} win+1i1在给定语料中出现的次数,相当于 c ( w i − n + 1 i − 1 ) c(w_{i-n+1}^{i-1}) c(win+1i1)

可以看出 c ( w a b ) c(w_{a}^b) c(wab)表示 w a w_a wa w b w_b wb这些词同时出现的次数。

题型十三:给定训练语料根据n-gram求取句子的概率*

请添加图片描述

在这里插入图片描述

由于数据系数,所以会引起零概率的问题,可以采用数据平滑来解决。

数据平滑

假定测试语料T由 l T l_T lT个橘子构成 ( t 1 . . . t l T ) (t_1...t_{l_T}) (t1...tlT),则整个测试集的概率为 p ( T ) = ∏ i = 1 l T p ( t i ) p(T)=\prod_{i=1}^{l_T}p(t_i) p(T)=i=1lTp(ti)
模型 p ( w i ∣ w i − n + 1 i − 1 ) p(w_i|w_{i-n+1}^{i-1}) p(wiwin+1i1)对于测试语料的交叉熵 H p ( T ) = − 1 W T log ⁡ 2 p ( T ) H_p(T)=-\frac{1}{W_T}\log_2p(T) Hp(T)=WT1log2p(T)
其中, W T W_T WT是测试文本T的词数。
模型p的困惑度 P P p ( T ) PP_p(T) PPp(T)定义为 P P p ( T ) = 2 H p ( T ) PP_p(T)=2^{H_p(T)} PPp(T)=2Hp(T)
n-gram对于英语文本的困惑度范围一般为50~1000,对应于交叉熵范围为6~10bits/word。

基本思想*

数据平滑的基本思想是:调整最大似然估计得概率值,使零概率增值,使非零概率下调,“劫富济贫”,消除零概率,改进模型的整体正确率。

基本目标:测试样本的语言模型困惑度越小越好。

基本约束: ∑ w i ( w i ∣ w 1 , w 2 . . . w i − 1 ) = 1 \sum_{w_i}(w_i|w_1,w_2...w_{i-1})=1 wi(wiw1,w2...wi1)=1(求和符号的下标表示了在该历史下所有出现过的 w i w_i wi

加1法*

基本思想:每一种情况出现的次数加1。

对于unigram,设 w 1 , w 2 , w 3 w_1,w_2,w_3 w1,w2,w3三个词,出现概率分别为 1 3 , 0 , 2 3 \frac{1}{3},0,\frac{2}{3} 31,0,32,加1之后,概率分别为 2 6 , 1 6 , 3 6 \frac{2}{6},\frac{1}{6},\frac{3}{6} 62,61,63

对于2-gram有:
请添加图片描述
就是说,分子加了个1,分母加上了全部可能的基元数,也就是除了词汇表数量,对于有限的训练语料来说,是除了<BOS>和<EOS>之外的单词个数。

题型十四:加1法实操

请添加图片描述
请添加图片描述

减值法/折扣法*

基本思想:修改训练样本中事件的实际计数,使样本中(实际出现的)不同事件的概率之和小于1,剩余的概率量分配给未见概率。

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

假设N是原来训练样本数据的大小, n r n_r nr是在样本中正好出现r次的事件的数目(此处事件为n-gram),即出现一次的n-gram有 n 1 n_1 n1个,出现两次的n-gram有 n 2 n_2 n2个,出现r次的n-gram有 n r n_r nr个。

那么, N = ∑ r = 1 ∞ = n r r N=\sum_{r=1}^∞=n_rr N=r=1=nrr(训练数据表面上是几句话,实际上在n-gram是很多n元组),

由于 N = ∑ r = 0 ∞ n r r ∗ = ∑ r = 0 ∞ n r + 1 ( r + 1 ) N=\sum_{r=0}^∞n_rr^*=\sum_{r=0}^∞n_{r+1}(r+1) N=r=0nrr=r=0nr+1(r+1),

所以 r ∗ = ( r + 1 ) n r + 1 n r r^*=(r+1)\frac{n_{r+1}}{n_r} r=(r+1)nrnr+1,

那么Good-Turing估计在样本中出现r次的事件的概率为 p r = r ∗ N p_r=\frac{r^*}{N} pr=Nr请添加图片描述
对于2-gram来说,没有出现过的bigram的个数为 n 0 = | V T | − ∑ r > 0 n r n_0=|V_T|-\sum_{r\gt0}n_r n0=VTr>0nr,其中 V T V_T VT是该语料的词汇量。如果r最多出现了7次,因为不存在r=8的情况,所以无法得到r=7时的修正概率和r*。

Back-off方法/后退方法/Katz后退法

基本思想:当某一事件在样本中出现的频率大于阈值K(通常K取0或1)时,运用最大似然估计的减值法来估计其概率。否则,使用低阶的,即(n-1)gram的概率来代替n_gram,而这种代替需要受归一化因子的作用。

另一种理解方式:对于每个计数 r > 0 r\gt0 r>0的n元文法的出现次数减值,把因减值而节省下来的剩余概率更加低阶的(n-1)gram分配给未见事件。

请添加图片描述
请添加图片描述

绝对减值法

基本思想:从每个计数r中减去同样的量,剩余的概率量由未见事件均分。

R R R为所有可能事件的数目(当事件为n-gram时,如果统计基元为词,且词汇集的大小为L,则 R = L n R=L^n R=Ln,每以bigram为例,每个词都可以和其余L个词组合)

请添加图片描述

请添加图片描述

线性减值法

基本思想:从每个计数r中减去与该计数成正比的量,剩余概率量 α \alpha α n 0 n_0 n0个未见事件均分。请添加图片描述

四种减值法的比较

请添加图片描述
本质上都是对非0事件的概率削减,将多出来的部分分配给0概率事件。

关注:

  1. 计数公式
  2. 概率计算公式

删除插值法

基本思想:用低阶语法估计高阶语法,即当trigram的值不能从训练数据中准确估计时,用bigram来替代。插值公式为:
请添加图片描述

系数的确定:

  1. 将训练语料分为两部分,即从原始语料中删除一部分作为留存数据
  2. 第一部分用于估计上述三个概率;
  3. 第二部分用于计算系数:使得语言模型对留存数据的困惑度最小。

语言模型的自适应*

问题

  1. 在训练语言模型时所采用的语料往往来自多种不同领域,这些综合性语料难以反映不同领域之间在语言使用规律上的差异。语言模型对训练文本的类型、风格和主题十分敏感。
  2. n元语言模型的独立性假设的前提是一个文本中的当前词出现的概率只与它前面相邻的n-1个词相关,但这种假设在很多情况下不成立。

基于缓存的语言模型*

该方法针对的问题是:在文本中刚刚出现过的一些词在后边的句子中再次出现的可能性往往较大,比标准的n-gram模型预测的概率要大。针对这种现象,cache-based自适应方法的基本思路是:语言模型通过n-gram的线性插值求得。

在这里插入图片描述

基于混合的语言模型*

该方法针对的是:由于大规模训练语料本身是异源的,来自不同领域的语料无论在主题方面还是在风格方面或者两者都有一定的差异,而测试语料一般是同源的,因此,为了获得最佳性能,语言模型必须适应各种不同类型的语料对其性能的影响。

在这里插入图片描述

基于最大熵的语言模型*

基本思想:通过结合不同信息源的信息构建一个语言模型;每个信息源提供一组关于模型参数的约束条件,在所有满足约束的模型中,选择熵最大的模型。

语言模型的应用

采用基于语言模型的分词方法*

请添加图片描述

请添加图片描述

未登录词即没有被收录在分词词表中但必须切分出来的词,包括各类专有名词(人名、地名、企业名等)、缩写词、新增词汇等等。

请添加图片描述

请添加图片描述

请添加图片描述
请添加图片描述
请添加图片描述

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/IT小白/article/detail/600988
推荐阅读
相关标签
  

闽ICP备14008679号