拼写纠错

在这里插入图片描述
当用户输入错误时,系统如何识别并进行纠错?

拼写错误有两种,第一种是拼写错误,例如上面的theirs,当用户输入的词不存在于词库中时,系统就能知道其输入错误;第二种是语法错误,例如I am go home,应该使用going。

在这里插入图片描述
当发现用户输入错误之后,可以使用经典的编辑距离寻找可能的输入单词。编辑操作有插入、替换、删除。编辑距离比较小的词是可能的待输入词。

词库词量很大,最笨的方法是循环整个词典,计算每个词与输入词的编辑距离,这样的时间复杂度非常高,时间复杂度与词库的大小相关;

在这里插入图片描述
为了提高效率,可以使用更高效的方法;最笨的方法是遍历词库的每个词,寻找与输入词编辑距离最小的词。,时间复杂度为 O ( V ) ∗ e d i t O(V)*edit O(V)edit,V为词库大小,edit为每个词对应的编辑距离。

另外一个方法是基于输入词生成编辑距离为1,2的字符串,比如对于单词appl,通过插入、删除、替换可以生成例如apple、app等单词。生成编辑距离为1的单词之后,基于生成的词再执行一遍插入、删除、替换就可以得到编辑距离为2的单词。

当得到编辑距离为1或者2的单词之后,怎么选择最合适的字符串呢?我们从数学角度进行定义:
在这里插入图片描述
给定字符串s,找到与其编辑距离为1或者2的所有字符串,返回概率 P ( c ∣ s ) P(c|s) P(cs)最大的字符串。也就是需要求使得 P ( c ∣ s ) P(c|s) P(cs)最大的字符串c。

我们的目的是: c ^ = a r g m a x c ∈ c a n d i d a t e s P ( c ∣ s ) \hat{c}=argmax_{c\in candidates}P(c|s) c^=argmaxccandidatesP(cs)通过贝叶斯定理可以将上面公式转换为: c ^ = a r g m a x c ∈ c a n d i d a t e s P ( s ∣ c ) P ( c ) / P ( s ) \hat{c}=argmax_{c\in candidates}P(s|c)P(c)/P(s) c^=argmaxccandidatesP(sc)P(c)/P(s)因为字符串s给定,因此 P ( s ) P(s) P(s)是常数项,因此可以忽略 P ( s ) P(s) P(s),上述公式可以改写为: c ^ = a r g m a x c ∈ c a n d i d a t e s P ( s ∣ c ) P ( c ) \hat{c}=argmax_{c\in candidates}P(s|c)P(c) c^=argmaxccandidatesP(sc)P(c)公式中的 P ( s ∣ c ) P(s|c) P(sc)是指用户想要的单词是c,但是错输入为s,这样的概率可以从后台大数据中收集得到。也就是说用户想输入的单词为apple,但是用户错输入为appl的概率是多少,这样就可以得到 P ( a p p l ∣ a p p l e ) P(appl|apple) P(applapple)

P ( c ) P(c) P(c)可以从用户数据中获得,比如c在所有输入语料中出现的次数。基于 P ( s ∣ c ) P(s|c) P(sc) P ( c ) P(c) P(c)就可以返回概率 P ( c ∣ s ) P(c|s) P(cs)最大的词c。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值