------------------------------------------------------------------
大家好,我是Bright,微软拼音的开发工程师。我之前介绍了语言模型的基本概念,本文介绍一下N-gram语言模型的训练方法。
------------------------------------------------------------------
模型的训练也称为模型的参数估计,参数可以用下式估计:
(1)
这样的模型是以词语为基本单位,但是汉语文本没有空格分隔,因此需要先对汉语文本进行分词处理,再在分好词的语料上统计n元对的出现次数。
语言模型的质量依赖于分词语料的质量。为了获得良好的分词语料,可以先用分词工具对未分词语料(生语料)进行自动化的分词标注,然后对其中可能分词错误的地方进行人工校对,最后得到的语料称为熟语料。根据是否需要熟语料,训练方法分为有监督和无监督的两种方式。
有监督的训练方法
有监督的训练方法比较简单。先统计n元对的出现次数,然后采用最大似然估计的方法对参数进行估计(如公式1)。
无监督的训练方法
无监督的训练方法需要适当规模的生语料和词表,然后采用EM算法迭代地对语言模型的参数进行调整。EM 算法是 Dempster Laind Rubin 于 1977 年提出的求参数极大似然估计的一种方法,它可以从非完整数据集中对参数进行估计,是一种非常简单实用的学习算法。
假设我们有一组语料,其表示为,词表。我们期望将语料分成最理想的形式,我们的优化目标可以表示为,它就是原始语料在分词结果时的概率,我们期望这个概率最大,因此,最佳的为:
(2)
基于EM算法的LM参数估计过程如下:
初始化:首先随机地初始化或者根据某种先验知识初始化模型的参数θ。基于词表获得原始语料得各种分词结果。
E-step:利用当前语言模型的参数 ,估计各个分词结果的概率。
M-step:对于原始语料的各种分词形式,统计n元对的数量,并按照概率进行加权,然后更新模型的参数,得到新的参数θ。
如此反复执行E-step和M-step,直到达到模型收敛。
收敛的条件可以是:在原始语料上的最佳分词结果的概率(或者迷惑度)在两次相邻两次迭代的变化小于某固定阈值。
由于原始语料的所有可能的分词结果数量很大,计算各分词结果的概率就变得很困难。为此可以采用“前向-后向”(动态规划)算法,其可以较快速地实现n元对的统计。对unigram来说,假设我们想统计词语Wi的次数,基于“前向-后向”动态规划的统计算法如下:
对于语料C中Wi出现的所有可能位置,如。计算如下:
(3)
(4)
(5)
Z是概率归一化因子,保证语料所有可能的切分结果的概率总和为1:
(6)
其中称为前向概率,可能前向算法计算,称为后向概率,可能后向算法计算。
前向算法和后向算法很类似,一个是从前向后边扫描边计算,一个是从后向前边扫描边计算,都是动态规划算法。这里仅给出前向算法,前向算法的递归函数定义为:
(7)
其中为词语的unigram概率,如果不是一个词语,其概率为0。
上面是unigram的“前向-后向”动态规划统计算法,读者有兴趣可以自己推导一下bigram或者更高阶ngram的动态规划统计算法。
转自:http://blog.csdn.net/MSPinyin/article/details/6141556