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(w2∣w1)×p(w3∣w1w2)×...×p(wm∣w1...wm−1)=i=1∏mp(wi∣w1...wm−1)=p(w1,w2,...,wm−1)
其中,当 i = 1 i=1 i=1时, p ( w 1 ∣ w 0 ) = p ( w 1 ) p(w_1|w_0)=p(w_1) p(w1∣w0)=p(w1)。
需要说明的是:
自由参数的数量过于庞大。
我的理解是:要计算出每一句话的先验概率的话,离不开每个词的概率,这里的概率是条件概率,也就是已知前面的词的情况下,这个词在这个位置出现的概率。参考传统机器学习方法,如朴素贝叶斯,都会实现准备好这些概率。然而正如上文所叙述的那样,随着每一句句子中统计基元的增加,所要计算、储存的自由参数是庞大的。
设法减少历史基元个数,将 w 1 w 2 . . . w i − 1 w_1w_2...w_{i-1} w1w2...wi−1映射到等价类 S ( w 1 w 2 . . . w i − 1 ) S(w_1w_2...w_{i-1}) S(w1w2...wi−1),使得等价类的数目远远小于原来不同历史基元的数目,则有 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(wi∣w1,...,wi−1)=p(wi∣S(w1,...,wi−1))如何划分这个等价类是值得探究的。
将两个历史映射到同一个等价类,当且仅当这两个历史最近的 n − 1 ( 1 ≤ n ≤ l ) n-1(1\le n\le l) n−1(1≤n≤l)个词相同。
该情况下的语言模型被称为n元文法(n-gram)模型。
以二元文法为例,我们可以近似认为,一个词的概率只依赖于它前面的一个词。于是有:
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=1∏mp(wi∣w1...wm−1)=i=1∏mp(wi∣wi−1)
当最近的 n − 1 n-1 n−1个词相同时,两个历史就归为了一个等价类,那么完全可以把第i个统计基元依赖到身前的 n − 1 n-1 n−1个词。
为了保证条件概率在 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 >
拼音对应了很多汉字的可能性,通过贝叶斯公式将其转化,就得到了另一种形式。由于固定汉字对应的拼音也是固定的,所以这一项直接就是1,所以最后回到了求语句的先验概率,把音对应的所有字给找出来,然后找哪种组合最为常见。
微软拼音的输入法是基于n-gram开发的。
还是通过贝叶斯变换,转化求解对象:
其与音字转换问题最大的区别在于对于Seg的先验概率涉及到的每一个条件概率的内容。
总结一下,如果汉字的总数为N,
对于一元语法来说:
对于二元语法来说:
对于汉字而言,四元语法比较合适;
训练语料:用于建立模型,确定模型参数的已知语料。
对于n-gram,参数 p ( w i ∣ w i − n + 1 . . . w i − 1 ) p(w_i|w_{i-n+1}...w_{i-1}) p(wi∣wi−n+1...wi−1)都可以用最大似然估计求得(用相对频率计算概率的方法),其公式为:
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(wi∣wi−n+1i)=f(wi∣wi−n+1i−1)=∑wic(wi−n+1i)c(wi−n+1i)
其中, f ( w i ∣ w i − n + 1 i − 1 ) f(w_i|w_{i-n+1}^{i-1}) f(wi∣wi−n+1i−1)为在给定 w i − n + 1 i − 1 w_{i-n+1}^{i-1} wi−n+1i−1的条件下, w i w_i wi出现的相对频度,分子为 w i − n + 1 i − 1 w_{i-n+1}^{i-1} wi−n+1i−1与 w i w_i wi同时出现的次数,分母 ∑ w i c ( w i − n + 1 i ) \sum_{w_i}c(w_{i-n+1}^i) ∑wic(wi−n+1i)是历史串 w i − n + 1 i − 1 w_{i-n+1}^{i-1} wi−n+1i−1在给定语料中出现的次数,相当于 c ( w i − n + 1 i − 1 ) c(w_{i-n+1}^{i-1}) c(wi−n+1i−1)。
可以看出 c ( w a b ) c(w_{a}^b) c(wab)表示 w a w_a wa到 w b w_b wb这些词同时出现的次数。
由于数据系数,所以会引起零概率的问题,可以采用数据平滑来解决。
假定测试语料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(wi∣wi−n+1i−1)对于测试语料的交叉熵 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(wi∣w1,w2...wi−1)=1(求和符号的下标表示了在该历史下所有出现过的 w i w_i wi)
基本思想:每一种情况出现的次数加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,分母加上了全部可能的基元数,也就是除了词汇表数量,对于有限的训练语料来说,是除了
基本思想:修改训练样本中事件的实际计数,使样本中(实际出现的)不同事件的概率之和小于1,剩余的概率量分配给未见概率。
假设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=0∞nrr∗=∑r=0∞nr+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=|VT|−∑r>0nr,其中 V T V_T VT是该语料的词汇量。如果r最多出现了7次,因为不存在r=8的情况,所以无法得到r=7时的修正概率和r*。
基本思想:当某一事件在样本中出现的频率大于阈值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概率事件。
关注:
基本思想:用低阶语法估计高阶语法,即当trigram的值不能从训练数据中准确估计时,用bigram来替代。插值公式为:
系数的确定:
该方法针对的问题是:在文本中刚刚出现过的一些词在后边的句子中再次出现的可能性往往较大,比标准的n-gram模型预测的概率要大。针对这种现象,cache-based自适应方法的基本思路是:语言模型通过n-gram的线性插值求得。
该方法针对的是:由于大规模训练语料本身是异源的,来自不同领域的语料无论在主题方面还是在风格方面或者两者都有一定的差异,而测试语料一般是同源的,因此,为了获得最佳性能,语言模型必须适应各种不同类型的语料对其性能的影响。
基本思想:通过结合不同信息源的信息构建一个语言模型;每个信息源提供一组关于模型参数的约束条件,在所有满足约束的模型中,选择熵最大的模型。
未登录词即没有被收录在分词词表中但必须切分出来的词,包括各类专有名词(人名、地名、企业名等)、缩写词、新增词汇等等。