基于字的二元模型拼音输入
基本要求
使用基于字的二元模型,实现一个拼音到汉字的转换程序
介绍算法的基本思路和实现过程
基本思路
- 问题为隐马尔科夫链中的解码问题:给定模型 λ=(A,B,π) 和观测序列 O ,计算最有可能产生这个观测序列的隐含序列 X , 即使得概率 P(X|O,λ) 最大的隐含序列 X 。
- 观测序列 O 在不考虑多音字的情况下认为确定
- 训练语料得到确定模型
- 统计字频得到初始状态概率
- 统计二元字频得到转移频率
- 使用维特比算法计算概率 P(X|O,λ) 最大的隐含序列 X
实现过程
- 训练语料
- 以行为单位读取计算,先将非中文字符转换为空格,再以空格为界将文段分成短句,每当字出现一次则计数,在同一短句中先后出现的两字则把后面出现的字计入属于前字的列表中,将计数与列表存在文件中
- 由字频计算出每个字出现的概率,存在文件中
- 由列表计算出对于某字 W W W ,在其后出现的每个字的的概率(转移概率),存在文件中(考虑平滑)
- 维特比算法预测
- 以 “qing hua da xue” 为例
- 首先依据拼音汉字对照表列出所有读音为 “qing” 的字
- 而后列出所有读音为 “hua” 的字,对每一个读音为 “hua” 的字,计算对于每个 “qing”,"qing hua"一中文词出现的概率(为此 “qing” 字的概率乘上 “qing hua” 的转移概率),选取概率最大的一组 “qing hua” 记为包含此 “hua” 字的序列。
- 后续同理,每完成一步计算的结果是累积的,即第一步计算出 “qing” ,而后是 “qing hua”、 “qing hua da”、 “qing hua da xue”, 最后选取"qing hua da xue"中概率最大的作为预测结果
- 平滑处理
- 为了避免某序列没有被训练到,但实则合理的情况,在预测过程中使用平滑处理,如果查找转移概率的过程中未查到匹配结果,例如查找“椛”字前方的“謦”的概率失败,则将概率设置为 1 f r e q ( 謦 ) + n \frac 1 {freq(謦) + n} freq(謦)+n1 (n为所有字的个数的粗略值,由于在训练后也对转移概率做了平滑操作(计算时分子加1分母加n),所以不会因此出现概率相加大于一的情况)
- 以 “qing hua da xue” 为例
展示实验效果,选取效果好和差的例子进行分析
正确长句
- 经济建设和文化建设突出了十八大精神的重要性
- 消除恐惧的最好办法就是面对恐惧
- 当你在这里创作的时候你作业做完了吗
- 因为互联网改变了传统出版业的营销模式
正确的长句多为有固定的长词的句子,且新闻用词更易预测准确,与训练语料有关,也与模型有关(二元模型注重前后二字的关系,对多次出现的长词预测效果好)
错误分析
- 北京外国与(语)大学
- 对于一些长词仍然无法很好的预测,若数据集够大够全可以解决
- 大哥打扫(大嫂)过年好
- 此为病句,若知“大哥大嫂”经常使用则可以避免错误,如果使用更长的窗口,更多元的模型可以解决,再进阶还可以考虑句子的组成
- 你的历届时(理解是)正确的
- 由于语料库为新闻语料,所以倾向于使用新闻用词,如“历届”比“理解”更容易出现,“青蛙”被预测成“青瓦台”的青瓦
- 看到大佬们的杨丽(样例)
- 由于预测时并不考虑语境与句子前后的逻辑,此句单看并不是病句,也有逻辑可言
对比参数选择,进行性能分析
句子长度
句子长度 | 随机 | 5 | 7 | 10 |
---|---|---|---|---|
每句用时 | 0.0086 | 0.0037 | 0.0087 | 0.0114 |
字准确率 | 0.8185 | 0.6429 | 0.6554 | 0.7558 |
句准确率 | 0.3629 | 0.2857 | 0.2353 | 0.1765 |
句子长度越短,字准确率越低,但在句子长度较短区域字准确率下降缓慢;
句子长度越短,句准确率越高,但随机情况准确率最高;
句子长度越短,每句用时越少。
由于后三组(句子长度为5、6、7)为群中样例前20行修改后的结果,有的句子修改后较为生硬(如“她是我最爱”),也没有出现较长名词,故句准确率没有随机时高。
总结收获,提出改进方案
收获
了解了隐马尔可夫模型、viterbi 算法,增长了知识;
作为人工智能导论的第一项实验,体会了 “求最大概率”、“求最短路径” 这一极富人工智能色彩的拼音输入法项目,与课上学到的大多数问题一样,都将具体问题转化为对一组或一个值的求解,浅浅地立即了人工智能思想。
改进方案
由于时间安排不合理没有将算法变得更精细,之后有时间可以加入三元输入、更精细的平滑预测(带参数)、专有名词巩固等。还可以训练更多语料,避免词预测为新闻词汇。