机器学习:单词拼写纠正器python实现

01 朴素贝叶斯分类实战

前面介绍了贝叶斯的基本理论,朴素贝叶斯分类器,拉普拉斯修正,文章的链接如下:
机器学习:说说贝叶斯分类
朴素贝叶斯分类器:例子解释
朴素贝叶斯分类:拉普拉斯修正
在这3篇推送中用例子详细阐述了贝叶斯公式和朴素贝叶斯如何做分类,以及如何修正一些属性某些取值概率。

下面,借助朴素贝叶斯分类器的基本思想,编写一个单词拼写纠正器,它大致实现的功能如下:
如果用户输入的单词存在,则直接提示在字典中发现,并返回
如果单词不在词典中,纠正器会猜测用户的可能输入,然后做出最多两步的距离调整,并返回纠正后,用户最可能想输入的前三个单词
如果经过最多的两步调整后,还是未找到,则提示想输入的单词在字典中不存在。

02 纠正器实现原理

1 如用户输入了 hella,纠正后发现的3个最有可能的输入如下:
‘want to input: hello’, ‘hell’, ‘fella’
2 如用户输入了appropreate,纠正器纠正后:
‘want to input: appropriate’
3 如用户输入了owesomes,纠正器纠正后:
‘want to input: awesome’
4 如用户输入了grduallyare,纠正器纠正后:
grduallyare not found in dictionary!

以上是纠正器能实现的纠正实例,那么该如何实现这么一个单词拼写错误检查和纠正的工具呢。

如果用户实际输入的单词为 w(word的简写), 然后拼写纠正器猜测用户实际想输入的单词为 c1, c2 , c3 , ……. 因此,我们可以猜测用户输入了 P(c1 | w) ,P(c2 | w),P(c3 | w)等等这些多种猜测。如果发现P(c1 | w) 的概率最大,那么用户很有可能想输入的那个单词为 c1 。这个概率可以统一表示为:
P(c | w)
如何求解这个概率的最大值?

将以上概率做如下转化来求解:用户想输入的很可能在语料库的这个 c 时,有可能被错误的输入为了 w1,w2,w3 ,…… 则这个概率可以统一表示为:
P(w | c)
用户错误地输入成 w1,w2,w3,……,它们之间是相互独立的,因此可以根据朴素贝叶斯分类器的理论,进一步将后验概率 P(c | w) 的求解转化为求解如下的目标函数:
max ( P(c) * P(w | c) / P(w) )
上式中 P(c)为先验概率,下载一个比较丰富的单词拼写都正确的英文单词库后,统计下每个单词出现的频次,就是单词 c 的出现的概率;
P(w) 是与问题分类无关的量,因为用户有可能输入任意一个单词;
P(w | c) 是一个类条件概率:用户想输入c(c在语料库中是有对应的,在此处需要注意:我们取的语料库不能100%保证一定存在任意一个正确的单词

  • 2
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值