中文拼写检查(CSC)在今天仍然是一个热门话题,也是一个悬而未决的问题。N元语法语言建模(LM)以其简单性和强大功能在CSC中得到了广泛的应用。
1. 整体概述
下图为系统的整体流程图,主要包含:中文分词、混淆集合、语料库和语言模型。
- step1. 利用中文分词技术,对给定的句子进行切分。中文分词的结果将作为下一步的基础。
- step2. 根据判断条件,发现句子中对应词语的混淆集。
- step3. 对句子中每个可以替换的字符,我们将枚举其混淆集合中的每个字符,以替换原来的字符。在这之后,我们将得到一个候选句子集。
- step4. 系统将结合
bi-gram
和tri-gram
(根据不同的条件使用bi-gram和tri-gram)来计算每个候选句子的得分。我们使用CCL
和SOGOU
语料库来生成n-gram
的频率。最后,得分最高的句子将被选为最终输出。
2. 混淆集合
混淆集合是由常见混淆字符组成的预先准备的集合,包括相似的发音和相似的字形。在文本的拼写错误检测和纠正中起着关键作用。
一些读音相近的汉字,如汉语的谐音字(“子(字)”和“子(自)”),鼻音(“藏(藏)”)和非鼻音(“赞(赞)”),卷舌(“赵(找)”)和非卷舌(“早(早)”)等。
3. 中文N-gram模型
到目前为止,N-gram语言模型是最广泛使用和实践最好的语言模型,但高阶N-gram
模型通常存在稀疏性,这导致一些条件概率为零。为此,我们在系统中使用具有不同规则的二元语法(bi-gram)和三元语法(tri-gram)来确定哪个字符是最好的纠错选择。在我们的系统中,根据中文分词的结果,判断是否存在长度大于等于2的连续词,然后,如果连续词的长度等于2,则使用二元语法,如果大于2,则使用三元语法。
3.1 Bi-gram模型
对于给定的中文字符串 C = c 1 , c 2 , … , c L C=c_1,c_2,\dots,c_L C=c1,c2,…,cL,若句子有任何错误,错误词就会出现在连续的单个词中,经过中文分词后就会出现错误词。bi-gram
模型中一个字符的概率只取决于紧接在前面的那个词,其中字符串的概率由如下一系列条件概率的乘积近似:
P ( C ) = ∏ l = 2 L P ( c l ∣ C l − 1 ) ≈ ∏ l = 2 L P ( c l ∣ c l − 1 ) P(C)=\prod_{l=2}^{L}P(c_l|C^{l-1})\approx \prod_{l=2}^{L}P(c_l|c_{l-1}) P(C)=l=2∏LP(cl∣Cl−1)≈l=2∏LP(cl∣cl−1)
上式中每一项的概率可由最大似然估计计算:
P ( c l ∣ c l − 1 ) = N ( c l − 1 , c l ) N ( c l − 1 ) P(c_l|c_{l-1})=\frac{N(c_{l-1},c_l)}{N(c_{l-1})} P(cl∣cl−1)=N(cl−1)N(cl−1,cl)
其中, N ( c l − 1 , c l ) N(c_{l-1},c_l) N(cl−1,cl)和 N ( c l − 1 ) N(c_{l-1}) N(cl−1)分别表示字符串“ c l − 1 , c l c_{l-1},c_l cl−1,cl”和“ c l − 1 c_{l-1} cl−1”在给定语料库中出现的次数。
在系统中,我们使用得分最高的 P ( C ) P(C) P(C)值对应的二元组词作为正确的字符串来覆盖旧的字符串,以此完成纠错。
3.2 Tri-gram模型
tri-gram模型与以上bi-gram模型原理类似,一个字符出现的概率只取决于紧接在前面的两个词,则每一项的概率为:
P ( c l ∣ c l − 2 , c l − 1 ) = N ( c l − 2 , c l − 1 , c l ) N ( c l − 2 , c l − 1 ) P(c_l|c_{l-2},c_{l-1})=\frac{N(c_{l-2},c_{l-1},c_l)}{N(c_{l-2},c_{l-1})} P(cl∣cl−2,cl−1)=N(cl−2,cl−1)N(cl−2,cl−1,cl)
3.3 getscore计算得分函数
我们将 C ′ = c 1 ′ , c 2 ′ , … , c L ′ C^\prime=c_1^\prime,c_2^\prime,\dots,c_L^\prime C′=c1′,c2′,…,cL′定义为原始句子 C C C通过混淆集替换掉一些字符后派生出来的字符串,利用getscore
函数选择最合适的句子,如下图(a)(b)分别显示了bi-gram模型和tri-gram模型的伪代码。