一、作业目标
python语言编程,实现一个简单的汉语拼音输入法,即实现从拼音(全拼)到汉字(字串)内容的转换。
二、主要算法
1、N-gram语言模型
在训练语料数据中,我们可以通过极大似然估计的方法,得到N个概率分布:是a的概率是0.4,是b的概率是0.0001,是c的概率是…,且所有的N个概率分布的总和为1.
n-gram模型概率公式推导。根据条件概率和乘法公式:
如果直接这么计算T序列的概率会有很大困难的,需要引入马尔科夫假设,即:一个item的出现概率,只与其前N个items有关,即N-gram模型。
因此,P(T)可以求得,例如,当利用bigram模型时,P(T)=P(A1)P(A2|A1)P(A3|A2)…P(An|An-1)
而P(An|An-1)条件概率可以通过极大似然估计求得,等于Count(An-1,An)/Count(An-1)。
2、Viterbi算法
多步骤每步多选择模型的最优选择问题中,Viterbi算法是一个有效解决方案。在每一步的所有选择都保存了前续所有步骤到当前步骤当前选择的最小总代价(或者最大价值)以及当前代价的情况下前继步骤的选择。依次计算完所有步骤后,通过回溯的方法找到最优选择路径。
三、整体设计思路
工程分为语料训练与维特比算法两部分。
1、语料训练:
采用2-gram模型进行转移概率训练。Train_Matrix作为语料库训练模块,对生语料库中英文、空格、标点符号等处理,提取分离出中文单句用作语料训练。统计转移概率,建立拼音转中文拼音查找字典。
2、Viterbi算法
对于转移概率趋近与0的小概率词组,取最低下限值作平滑处理;路径概率求解取log后转为加法运算,计算并记录所有路径的概率,最后状态下比较排序得最大概率路径,追溯得最佳解;路径记录采用定深度的堆栈以减小存储空间,满栈时采用堆排序推出最小概率路径。
四、改进方向
(1)平滑处理,可选择删除插值算法;
(2)可以利用更多成熟的语料训练库计算N-gram距离;
(3)作业战线拉有点长,希望下次大作业能专注着一气呵成;
工程代码链接:http://pan.baidu.com/s/1bZbepC 密码:c03q