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

俄语输入法键盘_汉字输入法隐马尔科夫模型隐马尔可夫模型(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

 

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

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

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 二进制的权展开式_进制按权展开方法

    二进制的权展开式_进制按权展开方法1.问题描述为什么二进制按权展开就是十进制?按照我们所学到的知识,来举例说明。比如:(1111)2按权展开就是:1×23+1×22+1×21+1×20=15我们得到了15对吧,那么两个问题为什么15这个就是十进制呢?为什么展开后相加就正好等于十进制的15呢?2.问题解答首先来看我们为什么按权展开?(1111)2因为逢二进一所以按权展开就是要这样:1×23+1×22+1×21+1×20由于我们习惯性的把加起来的和等于十进制的15所以我们会误认为,按权展开就是十进制其.

    2022年10月17日
    2
  • android 浏览器控件[通俗易懂]

    android 浏览器控件[通俗易懂]在Android手机中内置了一款高性能webkit内核浏览器,在SDK中封装为一个叫做WebView组件。 什么是webkit WebKit是MacOSXv10.3及以上版本所包含的软件框架(对v10.2.7及以上版本也可通过软件更新获取)。同时,WebKit也是MacOSX的Safari网页浏览器的基础。WebKit是一个开源项目,主要由KDE的KHTML修改而来并且

    2022年5月15日
    40
  • centos7系统更新命令_centos查看命令

    centos7系统更新命令_centos查看命令1.查看网络IP ifconfig2.下载命令 wget+网址3.安装 yum-y install + 目标4.删除文件 sudo rm 文件所在目录/目标强制删除文件 rm -f删除目录 rm -rf5.复制一个文件到另一个文件夹sudo cp /文件夹/文件 /另一个文件夹6.对一些文件进行读写sudo vim 文件名7….

    2022年8月18日
    7
  • 下拉列表框DropDownList绑定Dictionary泛型类

    下拉列表框DropDownList绑定Dictionary泛型类DropDownList绑定Dictionary泛型类定义一个Dictionary泛型类///<summary>   ///产品类型   ///</summary>   ///<returns></returns>   publicDictionary<string,string>productType() …

    2022年10月8日
    3
  • pycharm执行代码快捷键_python 函数调用

    pycharm执行代码快捷键_python 函数调用按住Ctrl,点击函数名称,即可跳转到该函数的代码文件中选中后,函数显示有下划线:点击函数名称,跳转到该函数所在的文件里:

    2022年8月29日
    4
  • webpack 版本依赖关系[通俗易懂]

    webpack 版本依赖关系[通俗易懂]依赖 版本 新版本 webpack 4 5 webpack-cli 3 4 webpack-dev-server 3 3

    2022年8月10日
    7

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

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