【源码+文档】基于隐马尔可夫模型和维特比算法的拼音输入法

原理与实现

抽象模型

求使得 $P(s) = ΠP(w_i|w_{i−1}) $最大的句子。

二元模型当中,将每个单独的拼音作为一个节点$P(w_i)$,通过统计二元词汇出现频率作为$P(w_i|w_{i-1})$ ,通过动态规划(维特比算法)的方式求出$P(s)max$,得出生成的语句。

在三元模型当中,对于词组abc,ab作为一个节点$P(w_{i-1})$,c作为节点 $P(wi)$,$P(w_{i-1})$代表两个汉字,$P(wi)$代表一个汉字。其他与二元模型同理。

算法实现细节

字典集
  • 对语料进行中文过滤、分词与词频统计
    • 分词之后得到的词语长度如果>3,例如abdc,那么在统计2元字典集时作为3个词:ab,bc,cd,在统计3元字典集时作为2个词:abc,bcd
  • 由于给出的语料偏向新闻方面,因此自己在网络上收集了其他的语料并进行了处理
  • 如上得到的字典集存在可能的问题是,在二元和三元字典集当中可能会统计入奇怪且无意义的词。因此对字典集进行筛选,二元字典集当中出现次数少于20、三元字典集中出现次数少于10的词语会被删掉。
  • 最终得到的文件为:
    • word1_b.txt
    • word2_b.txt
    • word3_b.txt
对概率取对数

由于每个词语本身的概率较小,为了减小误差和抖动,在计算初始概率及转移概率时均对概率取对数并取相反数。

相应地,在进行状态转移时最优的选择是值最小的节点。

 

 源码和文档都托管在了【WRITE-BUG数字空间】上面了,有需要的可自取~

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值