俄语输入法键盘_汉字输入法

俄语输入法键盘_汉字输入法隐马尔科夫模型隐马尔可夫模型(HiddenMarkovModel)是一种统计模型,用来描述一个含有隐含未知参数的马尔可夫过程。其难点是从可观察的参数中确定该过程的隐含参数,然后利用这些参数来

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺

 隐马尔科夫模型

隐马尔可夫模型 (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

 

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/166790.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • js中的闭包[通俗易懂]

    js中的闭包[通俗易懂]闭包是js的一个难点也是它的一个特色,是我们必须掌握的js高级特性,那么什么是闭包呢?它又有什么用呢?我们都知道,js的作用域分两种,全局和局部,基于我们所熟悉的作用域链相关知识,我们知道在js作用域环境中访问变量的权利是由内向外的,内部作用域可以获得当前作用域下的变量并且可以获得当前包含当前作用域的外层作用域下的变量,反之则不能,也就是说在外层作用域下无法获取内层作用域下的变量,同样在不同的函…

  • 罗技键盘怎么连台式电脑_罗技键盘蓝牙搜不到

    罗技键盘怎么连台式电脑_罗技键盘蓝牙搜不到罗技蓝牙键盘连接电脑需装入电池,打开电源开关,转动拨盘至【1】位置,然后长按【PC】键3秒进入【搜索】模式。打开电脑,前往【设置】-【设备】-【蓝牙和其他设备】,打开【蓝牙】,在蓝牙搜索列表中选中罗技蓝牙键盘的名称,确认配对即可完成连接。本文以惠普光影精灵6MAX,MacbookPro(分别连接K835有线键盘和K480蓝牙键盘);Windows10,macOSCatalina10.15.7…

    2022年10月16日
  • StringTokenizer使用讲解

    StringTokenizer使用讲解StringTokenizer是一个用来分隔String的应用类,相当于VB的split函数。一.构造函数。1.StringTokenizer(Stringstr):构造一个用来解析str的StringTokenizer对象。java默认的分隔符是“空格”、“制表符(‘\t’)”、“换行符(‘\n’)”、“回车符(‘\r’)”。2.StringTokenizer(Stri

  • 牛客国庆集训派对Day6 I.清明梦超能力者黄YY(树剖)「建议收藏」

    牛客国庆集训派对Day6 I.清明梦超能力者黄YY(树剖)「建议收藏」题目:https://www.nowcoder.com/acm/contest/206/I正难则反。问你倒数第k次的颜色,正着来搞不定,那就转换成“倒着来的第k次”。使用树剖将这棵树丢进线段树里,不维护染色,而是维护更新的次数(因为除了倒数第k次的颜色,其他的根本没用啊!!!),然后把区间最小值pushUp到树顶。更新完染色次数之后,用树顶来判整个区间里是否存在已经被更新了k次的节点,如果…

  • phpstorm 2021.12.21激活码_在线激活

    (phpstorm 2021.12.21激活码)好多小伙伴总是说激活码老是失效,太麻烦,关注/收藏全栈君太难教程,2021永久激活的方法等着你。IntelliJ2021最新激活注册码,破解教程可免费永久激活,亲测有效,下面是详细链接哦~https://javaforall.cn/100143.html1435QFILVV-eyJsaWNlbnNlSW…

  • html中空格的写法[通俗易懂]

    html中空格的写法[通俗易懂]HTML不是一种编程语言,而是一种超文本标记语言(markuplanguage),是网页制作所必备的。超文本”就是指页面内可以包含图片、链接,甚至音乐、程序等非文字元素。方法1:使用键盘,键入空格在html页面中,我们可以通过键入“空格”键来插入空格。例:在p.p1中键入一个空格,在p.p2中键入5个空格。注:此时是半角状态键入“空格”:<pclass=”p1″>测试文字|HTML中文网!</p><pclass=”p2″>测试文字|HTM

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号