基于字的二元模型拼音输入

基于字的二元模型拼音输入

基本要求

​ 使用基于字的二元模型,实现一个拼音到汉字的转换程序

介绍算法的基本思路和实现过程

基本思路
  • 问题为隐马尔科夫链中的解码问题:给定模型 λ=(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),所以不会因此出现概率相加大于一的情况)

展示实验效果,选取效果好和差的例子进行分析

正确长句
  • 经济建设和文化建设突出了十八大精神的重要性
  • 消除恐惧的最好办法就是面对恐惧
  • 当你在这里创作的时候你作业做完了吗
  • 因为互联网改变了传统出版业的营销模式

正确的长句多为有固定的长词的句子,且新闻用词更易预测准确,与训练语料有关,也与模型有关(二元模型注重前后二字的关系,对多次出现的长词预测效果好)

错误分析
  • 北京外国与(语)大学
    • 对于一些长词仍然无法很好的预测,若数据集够大够全可以解决
  • 大哥打扫(大嫂)过年好
    • 此为病句,若知“大哥大嫂”经常使用则可以避免错误,如果使用更长的窗口,更多元的模型可以解决,再进阶还可以考虑句子的组成
  • 你的历届时(理解是)正确的
    • 由于语料库为新闻语料,所以倾向于使用新闻用词,如“历届”比“理解”更容易出现,“青蛙”被预测成“青瓦台”的青瓦
  • 看到大佬们的杨丽(样例)
    • 由于预测时并不考虑语境与句子前后的逻辑,此句单看并不是病句,也有逻辑可言

对比参数选择,进行性能分析

句子长度
句子长度随机5710
每句用时0.00860.00370.00870.0114
字准确率0.81850.64290.65540.7558
句准确率0.36290.28570.23530.1765

句子长度越短,字准确率越低,但在句子长度较短区域字准确率下降缓慢;

句子长度越短,句准确率越高,但随机情况准确率最高;

句子长度越短,每句用时越少。

由于后三组(句子长度为5、6、7)为群中样例前20行修改后的结果,有的句子修改后较为生硬(如“她是我最爱”),也没有出现较长名词,故句准确率没有随机时高。

总结收获,提出改进方案

收获

了解了隐马尔可夫模型、viterbi 算法,增长了知识;

作为人工智能导论的第一项实验,体会了 “求最大概率”、“求最短路径” 这一极富人工智能色彩的拼音输入法项目,与课上学到的大多数问题一样,都将具体问题转化为对一组或一个值的求解,浅浅地立即了人工智能思想。

改进方案

由于时间安排不合理没有将算法变得更精细,之后有时间可以加入三元输入、更精细的平滑预测(带参数)、专有名词巩固等。还可以训练更多语料,避免词预测为新闻词汇。

  • 2
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
【资源说明】 人工智能作业基于C++实现的拼音输入法源码+拼音输入法实验报告+项目部署说明.zip 1、该资源内项目代码都是经过测试运行成功,功能ok的情况下才上传的,请放心下载使用! 2、本项目适合计算机相关专业(如计科、人工智能、通信工程、自动化、电子信息等)的在校学生、老师或者企业员工下载使用,也适合小白学习进阶,当然也可作为毕设项目、课程设计、作业、项目初期立项演示等。 3、如果基础还行,也可在此代码基础上进行修改,以实现其他功能。 这个文件夹包含了我实现的拼音输入法作业,其中包含五个目录。 + bin/ 目录下包含了项目用到的可执行文件,主要为 `pinyin` 和 `evaluate`,分别为项目的主程序和评估程序; + data/ 目录下包含了项目中用到的输入输出文件; + model/ 目录下包含了项目预先训练好的模型文件; + src/ 目录包含了项目的源代码,其中 `main.cpp` 为主程序文件,`model.cpp` 为模型建立文件,`predict.cpp` 为预测文件; + test/ 目录下是一些开发过程中用到的测试文件。 由于项目中使用到的模型文件太大,无法将其上传到 github 的项目仓库中。我将其保存在了我的云盘中,您可以通过以下命令将其下载到 `model/` 文件夹下: ``` wget https://cloud.tsinghua.edu.cn/f/fce169ed08ec4c0b8187/?dl=1 -O model/posterior3zip2.txt ``` 为了运行本项目,您需要使用 Linux 系统,并且在项目的主文件夹下(README.md 所在的文件夹),运行以下命令 ``` bin/pinyin data/test_input.txt data/test_output.txt ``` 该命令会默认使用<strong>三元模型</strong>作为拼音输入法的模型,对于一千条测试语句,该命令大约需要执行两分钟。同时,本项目也支持使用二元模型,您可以通过显式指定 ``` bin/pinyin -n2 data/test_input.txt data/test_output.txt ``` 来完成这一点。显然,也可以使用 `-n3` 来显式指定使用三元模型。 运行完成后,转化的结果被存储在了 `data/test_output.txt` 文件中。本项目还提供了 `evaluate` 命令,来评估转化结果的好坏 ``` bin/evaluate data/test_output.txt data/test_ans.output ``` 该命令会打印转化的准确率与行准确率。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值