隐马尔科夫模型

隐马尔可夫模型 (Hidden Markov Model) 是一种统计模型,用来描述一个含有隐含未知参数的马尔可夫过程。其难点是从可观察的参数中确定该过程的隐含参数,然后利用这些参数来作进一步的分析。

拼音输入法中可观察的参数就是拼音,隐含的参数就是对应的汉字。

那么我们要解决的就是隐马尔可夫的第二个问题:由观察序列求最优的隐藏序列

只需要HMM的三个要素(π,A,B)

参考别人github代码:

https://github.com/LiuRoy/Pinyin_Demo

代码解析如下:

1、模型生成

代码见train/main.py文件,里面的initstarting,initemission,init_transition分别对应于生成隐马尔科夫模型中的初始概率矩阵,发射概率矩阵,转移概率矩阵,并把生成的结果写入sqlite文件中。

训练用到的数据集是结巴分词里的词库,因为没有训练长句子,最后运行的结果也证明只能适用于短句输入。

2、初始概率矩阵(π)

统计初始化概率矩阵,就是找出所有出现在词首的汉字,并统计它们出现在词首的次数,最后根据上述数据算出这些汉字出现在词首的概率,没统计的汉字就认为出现在词首的概率是0,不写入数据库。有一点注意的是为了防止概率计算的时候因为越算越小导致计算机无法比较,所有的概率都进行了自然对数运算。统计的结果如下:

3、转移概率矩阵(A)

此处用到的是最简单的一阶隐马尔科夫模型,即认为在一个句子里,每个汉字的出现只和它前面的的一个汉字有关,虽然简单粗暴,但已经可以满足大部分情况。统计的过程就是找出字典中每个汉字后面出现的汉字集合,并统计概率。因为这个概率矩阵非常的大,逐条数据写入数据库过慢,后续可以优化为批量写入,提高训练效率。结果如下:

上图展示的一后面出现概率最高的十个字,也挺符合日常习惯。

4、发射概率矩阵(B)

通俗点就是统计每个汉字对应的拼音以及在日常情况下的使用概率,已暴举例,它有两个读音:bao和pu,难点就是找bao和pu出现的概率。此处统计用到了pypinyin模块,把字典中的短语转换为拼音后进行概率统计,但是某些地方读音也不完全正确,最后运行的输入法会出现和拼音不匹配的结果。统计结果如下:

5、viterbi算法实现:

代码建input_method/viterbi.py文件,此处会找到最多十个局部最优解,注意是十个局部最优解而不是十个全局最优解,但是这十个解中最优的那个是全局最优解,代码如下:

6、结果展示

运行input_method/viterbi.py文件,简单的展示一下运行结果:

问题统计:

  1. 统计字典生成转移矩阵写入数据库的速度太慢,运行一次要将近十分钟。
  2. 发射概率矩阵数据不准确,总有一些汉字的拼音不匹配。
  3. 训练集太小,实现的输入法不适用于长句子。

别人训练好的 hmm 拼音输入法代码:

本博客摘抄如下博客:

https://github.com/THUzhangga/HMM_shurufa

https://github.com/LiuRoy/Pinyin_Demo

转载于:https://www.cnblogs.com/lovychen/p/9760447.html

隐马尔可夫模型拼音汉字输入法相关推荐

  1. 一文搞懂HMM(隐马尔可夫模型)-Viterbi algorithm

    ***一文搞懂HMM(隐马尔可夫模型)*** 简单来说,熵是表示物质系统状态的一种度量,用它老表征系统的无序程度.熵越大,系统越无序,意味着系统结构和运动的不确定和无规则:反之,,熵越小,系统越有序, ...

  2. 一文搞懂隐马尔可夫模型(HMM)

    什么是熵(Entropy) 简单来说,熵是表示物质系统状态的一种度量,用它老表征系统的无序程度.熵越大,系统越无序,意味着系统结构和运动的不确定和无规则:反之,,熵越小,系统越有序,意味着具有确定和有 ...

  3. HMM一文搞懂HMM(隐马尔可夫模型)

    什么是熵(Entropy) 简单来说,熵是表示物质系统状态的一种度量,用它老表征系统的无序程度.熵越大,系统越无序,意味着系统结构和运动的不确定和无规则:反之,,熵越小,系统越有序,意味着具有确定和有 ...

  4. 隐马尔科夫模型(HMM)及其扩展

    转载自:(http://blog.csdn.net/xinzhangyanxiang/article/details/8522078) 学习概率的时候,大家一定都学过马尔科夫模型吧,当时就觉得很有意思 ...

  5. 一次性弄懂马尔可夫模型、隐马尔可夫模型、马尔可夫网络和条件随机场!

    1. 马尔可夫网络.马尔可夫模型.马尔可夫过程.贝叶斯网络的区别 相信大家都看过上一节我讲得贝叶斯网络,都明白了概率图模型是怎样构造的,如果现在还没明白,请看我上一节的总结: 贝叶斯网络 这一节我们重 ...

  6. 一次性弄懂马尔可夫模型、隐马尔可夫模型、马尔可夫网络和条件随机场!(词性标注代码实现)

    文章目录 1. 马尔可夫网络.马尔可夫模型.马尔可夫过程.贝叶斯网络的区别 2. 马尔可夫模型 2.1 马尔可夫过程 3. 隐马尔可夫模型(HMM) 3.1 隐马尔可夫三大问题 3.1.1 第一个问题 ...

  7. 隐马尔科夫模型(HMM)的应用

    HMM简介 隐马尔可夫模型(Hidden Markov Model,HMM) 如果你也是第一次接触的话,可以看这篇文章,讲得很好. 看了这篇之后我就去看代码了,下面的代码是 ASRT_v0.6.1 的 ...

  8. 隐马尔可夫模型:HMM

    隐马尔可夫模型求解三大问题实例剖析 HMM 模型如图所示: 一.隐马尔可夫模型定义 隐马尔可夫模型由初始概率分布.状态转移概率分布以及观测概率分布确定. 设 Q(图中的q)是所有可能的状态的集合,V( ...

  9. 炎热天气看书还是钓鱼?隐马尔科夫模型教你预测!

    高温天气与行为概率 夏季是一年最热的时候,气温普遍偏高,一般把日最高气温达到35℃以上的天气叫作高温天气,但是一般情况下高温天气分为两类.  (1)干热型高温.一般是指气温较高.太阳辐射强而且空气的湿 ...

  10. 【机器学习算法】隐马尔可夫模型HMM(一)

    目录 一.马尔可夫模型 1. 马尔可夫性 2. 马尔可夫链 3. 马尔可夫链案例 二.隐马尔可夫模型HMM 1. named entity recognition(命名实体识别)问题概述 2. 什么是 ...

最新文章

  1. 1.8 Remove
  2. 硬盘和显卡的访问与控制(一)——《x86汇编语言:从实模式到保护模式》读书笔记01
  3. 李永乐线性代数2020年基础课手写笔记汇总
  4. Supercomputer 解题报告
  5. BugkuCTF-MISC题多方法解决
  6. sql server端口_SQL Server端口概述
  7. Ruby游戏开发-BMXP介绍
  8. MySQL引擎类型(三)
  9. PXE(preboot execute environment)
  10. 【转】PCDATA和CDATA的区别究竟是什么呢?
  11. 【增速】人工智能之计算机视觉工业领域落地一览
  12. 【数据分析能力是指什么?】
  13. java zip 中文文件名乱码_java使用zip压缩中文文件名乱码的解决办法
  14. 苹果系统摩尔庄园是什么服务器,摩尔庄园手游iOS
  15. 成为一名机器学习算法工程师,你需要这些必备技能
  16. python收获怎么写_Python学习心得
  17. Tryhackme-BurpSuite
  18. flux护眼软件设置
  19. NPDP产品经理证书在中国有用吗?
  20. 使用MemoryStream类读写内存

热门文章

  1. 浅谈西门子840d主轴速度控制_西门子 840D 数控系统故障诊断与维修
  2. mp4的box信息——avcC,mdat
  3. javaweb问题集锦: HikariPool-1 - Connection is not available, request timed out after 60001ms.
  4. 对模型评估中的准确率、精准率和召回率描述与理解
  5. 二维码与图像结合生成器之QArt(关于Russ Cox )
  6. 计算机分组Excel,【Excel神技能】如何在Excel表格中进行“数据分组”?
  7. 结对编程四则运算第三周-挑战出题(20172301、20172304、20172328)
  8. 网页倒计时制作(js)
  9. 基因家族鉴定分析实战操作手册
  10. 世界那么大,你又怎么能看的完呢