一、语言模型概述
本节简单概述语言模型的定义与应用、概率估计与平滑,以及面向大规模语料的语言模型训练方法。相关详细内容可参考[2][5]。若对本部分熟悉,可直接看1.3节。
1.1 n元语言模型
n元语言模型是一种计算词序列概率的方法,通常用于处理基于已有的词序列预测下一个词出现概率的问题。如果把词序列(实际中是一个由N个词构成的句子)看作一种稳态Markov随机过程,并假定的出现只依赖其前面n个词,则可得到n元语言模型的计算公式:
根据链式法则,由词序列构成的句子S的概率计算公式为:
根据语料训练得到的语言模型,将包含公式(2)右边的概率信息。通过查找相应ngram的概率,即可得到一句话的概率。
语言模型在语音识别中的作用——根据拼音序列挑选最优的字或词序列:利用声学模型对一段音频进行识别得到一个拼音序列后,该拼音序列(同音词)会对应很多个词序列;利用语言模型计算每个词序列的概率,挑选概率最大的词序列作为最终的字或词识别结果。此外,语言模型也应用于机器翻译、文字识别等领域中。
语言模型中需要知道的所有的条件概率,我们称之为模型的参数,从语料中获得这些概率的过程就是模型训练的过程。下面简要概述语言模型中概率参数的估计与平滑技术。
1.2 概率估计、平滑与ARPA格式语言模型
简单地,可通过计算最大似然估计(MLE)来计算模型中的概率参数。以二元语言模型(bigram)为例,要计算的概率,从概率统计角度可知,。在拥有大语料的情况下,可以直接统计这对词在语料中的出现次数,同时也能统计出现的次数,以及语料中总词数total_count。这样当语料库足够大时,根据大数定理,相对频度就能近似概率,即:
因此,语言模型训练的过程其实就是在语料库中统计词频的过程,但是也会出现这样的情况:即两个词语同现的次数为0,那根据我们的计算就应该是。概率值为0的这种情况称之为零概率问题,相应的需要进行平滑操作。
自然语言处理方向上的各位前驱学者已经设计了很多平滑算法,主要包括:1)Laplace平滑;2)古德-图灵(Good-Turing)估计;3)Katz平滑;4)Jelinek-Mercer平滑;5)Witten-Bell平滑;6)绝对折扣法;7)Kneser-Ney平滑。详细算法原理可参考文献[5]。
大多数平滑算法可用如下公式表示:
(4)
这些平滑算法主要分成两种策略:插值平滑和回退平滑。其区别主要在于计算条件概率时,是否需要加入低阶的概率信息:
插值平滑:(4-1)
回退平滑:(4-2)
不同的平滑算法,其折扣系数的计算方式不同。无论是插值平滑,还是回退平滑,用公式(4)表示最终的语言模型时,在语言模型训练过程中,需要估计的参数都是条件概率和回退概率。
公式(4)表示的语言模型即为ARPA格式(回退与平滑算法均适用):
1)格式:log(smoothed-prob) n-gram log(back-off weight)
2)计算方式:首先寻找smoothed-prob,否则进行回退。
3)示例:
1.3 面向大规模语料的语言模型训练
目前,通过增加语料规模提高语言模型的覆盖面,已经成为很多系统改进性能的重要方法。n元语言模型的规模最终体现为n元组的个数。理论上,N元组的个数随训练语料规模或阶数(即n的取值)呈指数级增长。为了能够用有限的系统资源来处理海量的语言模型数据,直观上可以从数据压缩和体系结构两个方向着手解决这个问题。
图1 面向大规模语料的语言模型训练策略
数据压缩方法主要有:1)剪枝或过滤,删除频次较少的n元组;2)设计紧凑的数据结构,或者删除辅助的索引结构以速度换空间;3)采用有损数据压缩算法,来压缩语言模型。
随着网络技术的发展,利用网络把多台单机连接起来组成处理和存储能力更强的集群,同样可以处理更大规模的数据。体系结构:1)分布式并行语言模型训练,把大规模语料切分为若干份放到多台主机上并行训练;2)数据分治,切分语料或切分词典,以更适合分布式并行计算。
现有的训练方法或开源工具有:
1)Google的MapReduce训练方法,所采用的平滑算法是其所提出的Stupid-Backoff算法(概率和不为1),能够训练大规模语料。缺点是:所获得的语言模型并不是概率意义的,无法计算ppl;未公开完整的训练代码。
2)IRSTLM,采用切分词典的数据分治方式,在内存有限的单机上可以分块训练,以避免内存限制。缺点是:所实现的平滑算法是近似的Witten-Bell和近似的Kneser-Ney平滑算法(概率和不为1);不支持词频截断;尚未采用集群形式的分布式框架,需要后期开发。
综上所述,本文在针对大规模语料的语言模型训练时,主要考虑:
1)数据分治和分布式并行训练:采用切分词典的数据分治思想、利用Spark分布式计算框架;
2)概率和为1的平滑算法:实现严格概率意义(概率和为1)的平滑算法,且适合修改为分布式训练的方式,以能够进行ppl评估。最适合的是Witten-Bell的插值平滑算法。
下面将较为详细地阐述Witten-Bell平滑算法,及如何修改为分布式训练。
二、Witten-Bell平滑
Witten-Bell平滑,被认为是Jelinek-Mercer平滑的一个特例。其原始版本是一种插值模型,也可以方便地修改为回退模型。
2.1 Witten-Bell插值平滑
n阶平滑模型被定义为 n阶最大似然模型与(n-1)阶平滑模型的线性插值:
(5)
为了计算Witten-Bell插值平滑的参数,我们需要利用跟随在历史之后的不同单词的数量,该值被定义为:
(6)
符号表示词频为1次或多次(大于1次)的单词的数量;符号表示将符合条件的值进行累加求和;表示ngram的词频。通过概率和为1的约束,能够得到参数满足:
(7)
将公式(7)代入公式(5),可得:
(8)
相关阅读:
网易云新用户大礼包:https://www.163yun.com/gift
本文来自网易实践者社区,经作者胡光龙授权发布。