自然语言处理(NLP)知识整理及概述(二)

2019-01-02  本文已影响8人  JudeArcturus

Spelling Correction

拼写错误类型

Noisy channel model for non-word spelling correction

假设 a = {a-z, A-Z, ...} 是英语所有可能构成单词的字母集合, a* 为由这个字母表所构成的任意有限长度的字符串集合。 其中所有有效的单词构成的集合D是a*的一个子集。而noise channel 是指从目的词(即字典)与实际接收到的字符串x所构成的矩阵。
对于所捕获到的,存在拼写错误的字符串x, 目标是在字典中找到一个词w,使这一情况出现的概率最大。 即:



由于用户实际想拼写的单词是不确定的,因此需要生成一个修正候选列表(candidate corrections),这个列表基于两个规则:

因此, noisy channel 实际上可以理解为,用户所输入的一个错误的字符串,经过怎样的变换过程可以得到若干个正确的单词。变换的过程越多,相当于channel越长, 而找候选列表的过程也就是找channel最短的过程。

最小编辑距离

最小编辑距离(minimum edit distance)是指从一个string到另一个string所需的最小编辑步骤,包括:插入、删除、替换。而采用这三种编辑手段计算所得的距离又称为Levenshtein distance。这一距离将所有操作的cost都记为1.

但严格来说,替换这一操作等于先删除再插入。因此这一操作的cost可当成是2(更接近实际操作的cost)。 此外,对于Damerau–Levenshtein distance,这一距离还新增了transposition of two adjacent characters 这一操作。

如何计算两个单词的edit distance

  1. 单词长度对齐→例如在单词头部+#作为占位符

  2. 以对齐后的单词长度n建立一个n×n的矩阵。其中(n, 0)为坐标原点,横纵坐标分别对应两个单词各个字母的位置。

  3. 按照以下方法遍历矩阵n,计算edit distance


    computing distance

    举个例子,计算单词intention → execution的 edit 距离如下:


    example
  4. 从矩阵右上角沿着对角线上数值最小的路径回退,走过的路径即为应执行的edit操作。

候选词列表的产生

channel model probability

统计概率的计算方法如下:
首先对错误统计的方式:


其中,w是正确的单词, x 表示捕捉到的错误字符串。 wi 是指w中的第 i 个字符。
以一个错误的输入 acress 为例, 可能的单词与其对应的概率如下:

显然,用户想输入across的概率最大,这样候选词列表就有了排序和过滤的依据(大概率的排在前面,概率过低的可以不显示)。另一方面,P(word) 也可以使用bigram,这样就与上下文取得了联系,能更好的预测用户想要输入的单词。

Noisy channel model for real-word spelling correction

有25%-40%的错误属于 real-word error
这一部分是language model与noisy channel model的结合。假设用户输入的所有单词都没有non-word error

  1. 对于输入的每个单词,无论拼写是否正确,依然生成若干个候选列表
  2. 当输入多个单词后, 利用LM, 例如trigram等,判断哪种组合的概率更高
  3. 只考虑有一个词需要变更的情况。

举个例子,用户输入 "two of thew":

example

仅考虑 two off thew, two of the, too of thew 的概率,取最大值。

其他可用于spelling correction 的因素

相关资源

Peter Norvig’s list of errors
Wikipedia’s list of common misspelllings
GNU Aspell
Hunspell
How to Write a Spelling Corrector

上一篇下一篇

猜你喜欢

热点阅读