N元语言模型的训练方法

------------------------------------------------------------------
大家好,我是Bright,微软拼音的开发工程师。我之前介绍了语言模型的基本概念,本文介绍一下N-gram语言模型的训练方法。
------------------------------------------------------------------

模型的训练也称为模型的参数估计,参数可以用下式估计:

算式1_1                  (1)

这样的模型是以词语为基本单位,但是汉语文本没有空格分隔,因此需要先对汉语文本进行分词处理,再在分好词的语料上统计n元对的出现次数。

语言模型的质量依赖于分词语料的质量。为了获得良好的分词语料,可以先用分词工具对未分词语料(生语料)进行自动化的分词标注,然后对其中可能分词错误的地方进行人工校对,最后得到的语料称为熟语料。根据是否需要熟语料,训练方法分为有监督和无监督的两种方式。

有监督的训练方法

有监督的训练方法比较简单。先统计n元对的出现次数,然后采用最大似然估计的方法对参数进行估计(如公式1)。

无监督的训练方法

无监督的训练方法需要适当规模的生语料和词表,然后采用EM算法迭代地对语言模型的参数进行调整。EM 算法是 Dempster Laind Rubin 于 1977 年提出的求参数极大似然估计的一种方法,它可以从非完整数据集中对参数进行估计,是一种非常简单实用的学习算法。

假设我们有一组语料,其表示为算式2,词表算式3。我们期望将语料分成最理想的形式算式4,我们的优化目标可以表示为Capture18,它就是原始语料在分词结果算式5时的概率,我们期望这个概率最大,因此,最佳的算式0为:

算式6                                  (2)

基于EM算法的LM参数估计过程如下:

初始化:首先随机地初始化或者根据某种先验知识初始化模型的参数θ。基于词表获得原始语料得各种分词结果算式7

E-step:利用当前语言模型的参数 ,估计各个分词结果的概率算式8

M-step:对于原始语料的各种分词形式算式7,统计n元对的数量,并按照概率算式8进行加权,然后更新模型的参数,得到新的参数θ。

如此反复执行E-step和M-step,直到达到模型收敛。

收敛的条件可以是:在原始语料上的最佳分词结果的概率(或者迷惑度)在两次相邻两次迭代的变化小于某固定阈值。

由于原始语料的所有可能的分词结果数量很大,算式9计算各分词结果的概率就变得很困难。为此可以采用“前向-后向”(动态规划)算法,其可以较快速地实现n元对的统计。对unigram来说,假设我们想统计词语Wi的次数,基于“前向-后向”动态规划的统计算法如下:

对于语料CWi出现的所有可能位置,如算式10。计算如下:

算式11PNG                                  (3)

                  算式12                                    (4)

                  算式13                        (5)

Z是概率归一化因子,保证语料所有可能的切分结果的概率总和为1:

算式14     (6)

其中算式18称为前向概率,可能前向算法计算,算式19称为后向概率,可能后向算法计算。

前向算法和后向算法很类似,一个是从前向后边扫描边计算,一个是从后向前边扫描边计算,都是动态规划算法。这里仅给出前向算法,前向算法的递归函数定义为:

算式15       (7)

其中算式16为词语算式17的unigram概率,如果算式17不是一个词语,其概率为0。

上面是unigram的“前向-后向”动态规划统计算法,读者有兴趣可以自己推导一下bigram或者更高阶ngram的动态规划统计算法。

猜你喜欢

转载自blog.csdn.net/MSPinyin/article/details/6141556