基于Spark的大规模语言模型训练(上篇)

阿凡达2018-08-21 11:31

一、语言模型概述

本节简单概述语言模型的定义与应用、概率估计与平滑,以及面向大规模语料的语言模型训练方法。相关详细内容可参考[2][5]。若对本部分熟悉,可直接看1.3节。

1.1  n元语言模型

n元语言模型是一种计算词序列概率的方法,通常用于处理基于已有的词序列预测下一个词出现概率的问题。如果把词序列(实际中是一个由N个词构成的句子)看作一种稳态Markov随机过程,并假定的出现只依赖其前面n个词,则可得到n元语言模型的计算公式:

根据链式法则,由词序列构成的句子S的概率计算公式为:

根据语料训练得到的语言模型,将包含公式(2)右边的概率信息。通过查找相应ngram的概率,即可得到一句话的概率。

语言模型在语音识别中的作用——根据拼音序列挑选最优的字或词序列利用声学模型对一段音频进行识别得到一个拼音序列后,该拼音序列(同音词)会对应很多个词序列;利用语言模型计算每个词序列的概率,挑选概率最大的词序列作为最终的字或词识别结果。此外,语言模型也应用于机器翻译、文字识别等领域中。

语言模型中需要知道的所有的条件概率,我们称之为模型的参数,从语料中获得这些概率的过程就是模型训练的过程。下面简要概述语言模型中概率参数的估计与平滑技术。

1.2  概率估计、平滑与ARPA格式语言模型

简单地,可通过计算最大似然估计(MLE)来计算模型中的概率参数。以二元语言模型(bigram)为例,要计算的概率,从概率统计角度可知,。在拥有大语料的情况下,可以直接统计这对词在语料中的出现次数,同时也能统计出现的次数,以及语料中总词数total_count。这样当语料库足够大时,根据大数定理,相对频度就能近似概率,即:

因此,语言模型训练的过程其实就是在语料库中统计词频的过程,但是也会出现这样的情况:即两个词语同现的次数为0,那根据我们的计算就应该是。概率值为0的这种情况称之为零概率问题,相应的需要进行平滑操作。

自然语言处理方向上的各位前驱学者已经设计了很多平滑算法,主要包括:1Laplace平滑;2)古德-图灵(Good-Turing)估计;3Katz平滑;4Jelinek-Mercer平滑;5Witten-Bell平滑;6)绝对折扣法;7Kneser-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)数据分治,切分语料或切分词典,以更适合分布式并行计算。

 

现有的训练方法或开源工具有:

1GoogleMapReduce训练方法,所采用的平滑算法是其所提出的Stupid-Backoff算法(概率和不为1),能够训练大规模语料。缺点是:所获得的语言模型并不是概率意义的,无法计算ppl;未公开完整的训练代码。

2IRSTLM,采用切分词典的数据分治方式,在内存有限的单机上可以分块训练,以避免内存限制。缺点是:所实现的平滑算法是近似的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




相关阅读:

基于Spark的大规模语言模型训练(上篇)

基于Spark的大规模语言模型训练(中篇)

基于Spark的大规模语言模型训练(下篇)

网易云新用户大礼包:https://www.163yun.com/gift

本文来自网易实践者社区,经作者胡光龙授权发布。