一般有两种文本纠错的类型:
1.Non-word拼写错误
首先看一下Non-word的拼写错误,这种错误表示此词汇本身在字典中不存在,比如把“要求”误写为“药求”,把“correction”误拼写为“corrction”。寻找这种错误很简单,例如分完词以后找到哪个词在词典中不存在,那么这个词就可能是错误拼出来的的词。
操作步骤
• 找到候选词
• 接着基于特定算法找出与错拼词关联最高的一个或多个单词作为纠正选项
如何确定候选项呢?
• 英文:编辑距离
• 中文:拼写相近、字形相近
如何找出最关联项:可以根据贝叶斯定理,得到如下表达式:
P(候选项∣错误单词)∝P(候选项)∗P(错误单词∣候选项)
“此选项本身在语料中出现的可能性”和“人们意图打候选项时会错打成错误单词的可能性”的乘积。前者可视为uni-gram语言模型,需要计算词语的出现频次,当然也可以扩张至二阶或三阶,比如计算“错误单词左边单词+候选项+错误单词右边单词”在语料中的出现情况。
2.Real-word拼写错误
单词本身没有错误,但是不符合上下文语境,常常涉及语法语义层面的错误,比如把“我现在在公司里”错写成“我现在在公式里”。这种错误比上面以一种错误纠错更加困难。
操作步骤
• 首先针对每个单词根据编辑距离、同音词、近形词等方式选出候选项(也包括单词本身)
• 接下来计算基于候选项的语言模型,以及在候选项情况下出现错误单词的条件概率;如果综合计算而得单词本身出现在此语境中的概率较大,则不进行纠正,否则推荐纠正项。
• 注:在实际应用中不可能对每个词进行排查,可以应用语言模型等方式对句子进行粗粒度的初步筛查(困惑度)。
这里举个小例子,只给定少量英语语料,如何设计一个简单的英文纠错系统(Non-word)?
首先给定一个思路:
首先全部单词变成小写,并且计算他们出现的次数,再除以单词总数(字典长度)作为该词的频率,对输入的单词在词典里进行匹配,至少0次编辑,最多2次编辑。找出编辑距离最小的,当编辑距离为最小的不只一个时,找出所有单词里的概率最大的作为输出。
对于Real-Word可以先确定候选项,然后通过语言模型(一阶/二阶)进行统计。
注:编辑距离:就是指对单词中的字母进行增删改操作
下一节将对上面的问题进行一个实战案例
Reference
1.胡盼盼《自然语言处理从入门到实战》