输入法之模型训练

输入法。尤其是拼音输入法,解决的就是一些序列标注的问题,针对给定的状态(拼音),获取其概率最高的隐状态(中文)。
这个是一个标准的HMM,针对HMM的解码过程,是一个非常成熟也非常完备的东西。


local的计算和存储能力都有限。我们选择通常是二阶马尔科夫,也就是所谓的bigram model。

高阶对质量会有帮助。可是涉及到存储和计算。project上不可行。

同理,利用ME 以及CRFmodel都能够解决这一类的标注问题,相同是project上的问题。不太可行。

确定了採用bigram model。那么训练过程也就非常确定:
1.Segment and Count bigram&unigram
2.smoothing 
3.prunning

在seg之前,须要对我们的训练语料做一下预处理。输入法重点关注的是中文以及中文的关系,所以须要对当中的英文以及符号等切割做一个预处理。不然会添加后期剪枝的复杂度。
一版的做法是,针对里面的英文,能够用一个统一的ENGLISH的标记取代,尽量不要去掉,而对于符号,作为句子的分隔符号,将整个句子折断成一个一个纯中文的短句。作为训练语料。

作为完备的model。会包含 開始符号BOS 以及结束符EOS,则能够保证整个model是封闭的。只是针对输入法。这个不是必须的,对于输入过程。用户的每一次開始输入,都不一定是句子的開始,强行加上去,不一定有好的效果。

作为训练过程#1 没有什么好说的,直接处理即可。
#2是非常关键的一个。HMM的解码,涉及到大量的转义概率乘,假设两个状态的概率没看到,那么转义概率为0。整个相乘链就为0,显然不合理。所以须要平滑,事实上就是通过策略为没有看到的二元对提供一个默认的计算方式。

#3 二元对之间的关系非常多,一版在1B规模以上。而输入法智能非常用非常小规模(1kw),那么就须要对这个进行剪枝,剪枝非常重要,最大限度的保证剪枝后模型的准确率和剪枝前相近,后面具体介绍。
原文地址:https://www.cnblogs.com/mqxnongmin/p/10573835.html