在多种应用比如word中都有拼写检查和校正功能,具体步骤分为:
- 拼写错误检测
- 拼写错误校正:
- 自动校正:hte -> the
- 建议一个校正
- 建议多个校正
拼写错误类型:
- Non-word Errors非词错误:即写了一个不是单词的词,比如graffe并不存在,应校正为giraffe
- 检测方法:认为任一不在字典中的词都是一个非词错误,因此字典本身越大越好
- 校正方法:为错误词产生一个候选,其是跟错误词相似的真词,然后选择加权编辑距离最短或者信道噪声概率最高的那个词。
- Real-word Errors真词错误:
- 印刷错误:three->there
- 认知错误(同音异性字):piece -> peace; too -> two
- 检测方法:由于每个真词可能都是一个错误词,因此我们为每个词都产生一个候选集,其为跟该词发音或拼写相似的词,该词本身也位于自身的候选集中。
- 校正方法:按照信道噪声或者分类器选择最好的候选词。
一、The Noisy Channel Model of Spelling信道噪声模型:非词错误校正
基本方法:
假设初始词经过一个噪声信道输出一个噪声词,即为可能的错误词,我们旨在对该噪声信道建模,从而使得在解码阶段能够根据噪声词得到一个猜测词,其跟初始词一致,即找到错误词正确的拼写。
而信道噪声我们视之为一个概率模型,如下:
输入:一个错误词x
旨在:找到一正确的词w
要求:
P(w)称为语言模型表示单词w为一个单词的概率,P(x|w)称为信道概率(或错误概率)表示如果是w,x是w拼错的词的概率。
例子:
设:有一个错误词“acress”
1. 产生候选词:
- 相似拼写词:跟错误词之间小的编辑距离
- 采用Damerau-Levenshtein edit distance,计算的操作包括:插入、删除、置换和两个相邻字母之间的换位transposition,
- 以下是与“acress”编辑距离=1的列表:
- 80%错误词与正确词之间的编辑距离为1,大部分的编辑距离都小于等于2
- 允许插入空格或者连字符-:thisidea -> this idea; inlaw -> in-law
- 相似发音词:跟错误词的发音之间小的编辑距离
2. 选择最优候选词:套用公式
a) 计算语言模型P(w):可以采用之前说过的任一语言模型,比如unigram、bigram、trigram,大规模拼写校正也可以采用stupid backoff。
b) 计算信道概率P(x|w):首先获得多个单词拼错的列表,然后计算混淆矩阵,然后按照混淆矩阵计算信道概率。
设:
有:
x和y为任一字母a-z,计数count表示后面那张情况发生的次数,其中插入和删除的情况都依赖于前一个字符,sub[x,y]的混淆矩阵结果如下:
然后按照上述混淆矩阵计算信道概率:
c) 整体概率计算实例如下:
也可以选用语言模型计算整体概率,比如:使用bigram或trigram语言模型
3. 结果评估方法:
使用拼写错误测试集: