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

阿凡达2018-08-21 12:33

Witten-Bell平滑的物理意义:使用高阶模型的概率是,使用低阶模型的概率是。从折扣角度来说,Witten-Bell估计给训练语料中未出现事件分配的总的概率是,而Good-Turing估计分配的是,这是两者的区别所在。

       要训练获得ARPA格式的Witten-Bell语言模型,相对于公式(4),即转化为计算:

1) 条件概率:8-1

2) 回退权重:  8-2

3) 一阶条件概率:  (8-3)

公式(8-3)中的 为词典大小;公式(8-1)与(8-2)即为Witten-Bell插值平滑算法在训练时需要估计的两类概率参数:回退权重计算简单,条件概率计算较复杂。

2.2  Witten-Bell回退平滑

回退模型,在计算高阶ngram时,直接使用高阶ngram的最大似然概率(或折扣后的概率),而不与低阶的(n-1)gram进行插值。可以将Witten-Bell的插值模型调整为回退模型(略去推导,直接给出结论)。

1) 条件概率:9-1

2) 回退权重:9-2

3) 一阶条件概率为:9-3

公式(9-1)与(9-2)即为Witten-Bell回退平滑算法在训练时需要估计的两类概率参数:此时条件概率计算简单,但回退权重计算较复杂。

 

 

三、Witten-Bell插值平滑的分布式实现

根据第一节中数据分治思想,将词典进行分块处理,并根据子块词典分别统计ngram词频;在每个子块内进行语言模型参数估计,最后再进行合并,生成最终的语言模型。通过这种方式可以很方便地转换成分布式训练。大体的流程图如下:

2 基于数据分治的语言模型训练

目前的开源工具IRSTLM采用的是这种方案,其训练流程可参见附录1。但其所实现的Witten-BellKnerse-Ney只是近似实现,而不是严格概率意义的语言模型(无法计算PPL,只是相对大小);且尚未引入分布式框架,而是在单机上进行分块训练。

本文所实现的Witten-Bell将是严格概率意义的语言模型。根据数据分治思想,以及插值平滑和回退平滑对比分析,可知:

1 Witten-Bell的插值平滑与回退平滑参数对比

1)数据分治:对于以单词为前缀的所有ngram构成的子块,只能统计得到以为前缀的相关词频数值,包括等;因此,插值平滑中的回退权重以及回退平滑中的条件概率是可以在单个子块内部精确实现。但插值平滑的条件概率和回退平滑的回退权重依赖为前缀的(n-1)gram的条件概率,这在分布式训练中需要通过访问其他节点来实现,需要大量的查找计算和过高的带宽,而不利于分布式。

2)插值平滑中的条件概率在计算时,只需要一次为前缀的(n-1)gram计算;而回退平滑中的回退权重需要多次为前缀的(n-1)gram计算。

因此,相对而言,插值平滑更有利于分布式实现,以减少节点间的大量访问查找。

3.1  插值平滑算法改进

通过上节所述,插值平滑更有利于采用分布式实现。通过分布式直接训练能够获得回退权重,以及等参数。由于一阶语言模型,其条件概率是可以一次性精确获得的。因而,可以通过后续从低阶往高阶来依次调整条件概率的方式,来获得最终的语言模型——ARPA格式。可以将条件概率进行拆分:10

其中,一次分布式训练可以获得p1p2p3则所有的子块语言模型训练完成后,其实p1p2以及p3都已经获得了。可以通过从低阶到高阶调整的方式,来计算获得。最后获得严格概率意义的语言模型。下面是词频截止版本,以对未知事件加入词频阈值的限制。

3.2  词频截止(count cut-off

通过指定词频截断参数来对ngram进行过滤,将那些低于词频截断阈值的ngram也认为是未知事件,利用折扣获得的剩余概率来对这些未知事件进行平滑估计。即:



 

相关阅读:

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

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

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


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

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