中文拼写检查(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模型的伪代码。