基于语言模型的拼写纠错

| 导语   用户通过键盘或语音输入的文本会存在拼写错误,对于自然语言中出现的错误进行自动的识别和纠正,即为拼写纠错。拼写纠错在问答系统、搜索引擎中作为入口模块,对用户体验的提升有很重要的作用,同样也可以扩展到同义词查找等相关领域。本文则针对中文拼写纠错进行一个简要的概述,主要分享基于n-gram语言模型和困惑集来做中文拼写纠错的方法。

一、中文拼写纠错

定义:给定一个自然语言的句子,识别出其中出错的汉字或词语,并对其进行纠正。常被用于搜索引擎、问答系统和字处理软件中,如下所示:

中文拼写纠错任务主要包含两个子任务,分别是:

  • 错误识别(Error Detection):检测句子错误出现的位置
  • 错误纠正(Error Correction):在错误识别的基础上进行纠正

主要框架:中文拼写纠错的现有工作有很多[1],总的来说大致可分为两个阶段,也有部分模型将这两个阶段联合建模。

  • 构造候选句子:利用不同策略如规则或者模型,构建原句的修改候选,每一个候选都是对可能存在错误的一处或多处汉字或词语进行替换之后的结果。这一阶段是模型召回率的保证。
  • 候选句子评分:在构造候选句子的基础上,利用评分函数(编辑距离、n-gram语言模型等)或者分类器(LR、SVM等)对候选句子进行排序,最终排序最高且与原句子排序差距大于阈值的候选句子作为最终修改后的结果。

二、相关工作

      我们做了一些相关工作的调研,主要集中在基于语言模型的拼写纠错。

      论文[2]提出了一种具有较高准确率、较低召回率的纠错方法。系统流程图如下:

各步骤简述如下:

Error detection阶段:使用两种方式(1)使用双向character level n-gram language model,对句子里的character打分,得分低的地方视为待纠错位置。这里n-gram语言模型使用的是5-gram,为避免过多召回引入噪声,阈值设定较严格。将待纠错位置与上下文组合进行词典查词,当所有组合在词典中都查找不到,则将其视为错字。对于下图中的“竟”字,根据上述规则被视为错字:

(2)由于分词是根据词典进行分割的,分词后是单个字符即认为和上下文未构成词,被视为错字。

候选句子构造:上一步词典过滤出的最终可疑字进行同音字和形近字的召回。召回的候选字与前后近邻组合为词进行词典查词过滤出有效候选。

候选句子打分:构造的候选中语言模型获得最高分,且得分大于阈值,则为纠正后的结果。

       论文[3]提出了一种自动构建中文拼写检查系统的方法。通过使用说文解字和四角码这两种语言资源扩大了混淆集(Confusion Sets),这些语言资源改善了混淆集的覆盖范围。接着结合词级别的N-gram语言模型统计进行拼写纠错。系统流程图如下:

对于输入的一个句子先进行分词。拼写错误的候选将逐个替换为相似的字符,对替换完的句子再次分词。在该系统中有两种拼写错误候选:一种是单个字符另一种是两个字符。他们的替换程序是不同的。(1)在对原始句子进行分词之后,每个单字符词语被认为是发生错误的候选。 这些候选在他们的混淆集合中被相似字逐一替换,生成候选句子。(2)对于每个两个字符的单词,如果单词出现在两个字符的混淆集合中,则将该单词替换为双字符混淆集合中的相似单词,生成候选句子。最后用语言模型来衡量候选句子的概率进行排序。如果没有候选句分数比原句的分数更高或者与原始评分相比得分不高于预先定义的阈值,则认为没有错误。否则,得分最高的候选句即为纠错结果。

       论文[4]提出的拼写纠错系统包含三个组件:(1)基于语言模型来生成校正候选句;(2)统计机器翻译模型提供校正候选句;(3)支持向量机(SVM)分类器,以重新排列前两个组件提供的候选句,输出最可能的纠正后的句子。

       论文[5,6,7,8]也是基于语言模型的纠错。此外,深度学习近来在自然语言处理领域获得广泛运用,Seq2Seq 模型在诸多自然语言处理任务如词性标注、语义依存分析、机器翻译、情感分析等均取得了显著的成绩。同样,在中文拼写纠错这个任务上,也有相应的深度学习模型出现[9,10]。

三、中文拼写纠错实现

       考虑到现实世界中很多领域没有监督数据,且人工标注耗时耗力,所以我们选择使用无监督的方法来进行拼写纠错。我们结合n-gram语言模型、困惑集进行了中文拼写纠错的实现。

1.先验知识

a.语言模型

       简单地说,语言模型(language mode)就是用来计算一个句子的概率的模型。语言模型在基于统计模型的机器翻译,汉语自动分词和句法分析中有着广泛的应用,目前采用的主要是n元语法模型(n-gram language model)。一个语言模型构建字符串的概率分布p(W),假设p(W)是字符串作为句子的概率,则概率由下边的公式计算:

其中w1表示第一个词,w2表示第二个词,以此类推。p(w4|w1w2w3)表示前面三个词是w1w2w3的情况下第四个词是w4的概率。w1w2…wi-1称作历史。根据马尔科夫假设,一个词只和他前面n-1个词相关性最高,这就是n元语言模型。

通常用的n元语法模型包括unigram,bigram,trigram,其中unigram表示这个词和前面的词无关,彼此独立,计算公式如下:

Bigram表示一个词只和它前面一个词有关,计算公式如下:

Trigram表示一个词只和它前面两个词有关,计算公式如下:

       大规模数据统计方法与有限训练语料之间必然产生数据稀疏问题,导致零概率,符合经典的zip'f定律。于是诞生了一系列平滑技术,基本思想是“降低已出现n-gram条件概率分布,使得未出现的n-gram条件概率分布非零”,且经数据平滑后一定保证概率和为1。经典的平滑方法有很多,如Additive smoothing,Good-Turing estimate,Jelinek-Mercer smoothing,Katz smoothing,Witten-Bell smoothing,Absolute discounting,Kneser-Ney smoothing等。我们构建语言模型时使用了berkeleylm统计语言模型工具包,其构建了Kneser-Ney语言模型。当n-gram的n值越大时,对下一个词的约束力就越强,因为提供的信息越多,但同时模型就越复杂,问题越多,所以一般采用bigram或trigram。n-gram模型通过计算极大似然估计(Maximum Likelihood Estimate)构造语言模型,这是对训练数据的最佳估计。

b.困惑集

字级别:在SIGHAN7 Bake-off 2013中文拼写检查任务中,组织者提供了六种混淆集:4组语音相似的字符(音近字)和2组视觉上相似的字符(形近字)。如对于汉字“情”来说,它有如下的困惑字集合:

-同音同调: 檠晴擎[qing2]

-同音异调: 青轻清[qing1] 顷请[qing3] 庆磬[qing4]...

-近音同调: 擒禽噙琴勤秦芹[qin2]

-近音异调: 精经睛…京[jing1] 颈警…井[jing3] 竟径镜…敬[jing4] 今津…金[jin1]仅锦紧…谨 [jin3] 近尽禁…浸[jin4] 亲嵚[qin1] 寝[qin3] 揿[qin4]...

-形近字:清晴请青债渍啧惆悸惟惕…

词级别:观察发现,在多字的词语中也会出现一些拼写错误,这意味着包含不正确字的字串也是一个合法的词语。 例如 “人员”([ren2-yuan2],指'成员') “人缘”([ren2-yuan2],指'关系')。于是我们根据语料构建了同音词词典。如对于词语“语言”来说,有以下困惑词: 寓言、预演、预言、鱼眼…

2.算法流程

拼写纠错框架图:

每个步骤介绍:

(1)分词。

分词使用HanLP分词。要注意的是对于相应的领域需要引入自定义领域词典,使得分词器能识别领域专有名词,提高分词准确率。

(2)困惑集替换,生成候选句

-在对原句分词之后,每个单个字符被认为是发生错误的候选。利用他们的困惑集中的相似字逐一替换,生成候选句子;

-对于每个多个字的词语,如果该词语出现在词级别的困惑集合中,则将该词语替换为困惑集合中的相似词,生成候选句子。

一个例子如下:

(3)候选句子评分

利用根据语料训练的语言模型,来衡量生成的候选句子的概率进行评分。如果候选句子中没有分数比原句更高或者与原始评分相比得分不高于阈值的,则认为原句没有错误。否则,得分最高的候选句即作为纠错结果输出。

3.实验结果

使用语言模型结合困惑集的方法,能解决错字(包括字音字形相似的字)和错词的纠正。部分纠错结果如下:

四、总结

综上所述,影响模型纠错效果的主要有如下几点:

  1. 语料:语料作用于语言模型的构建过程,语料要具备领域相关性且具有一定规模。
  2. 数据预处理:包括分词,去停用词等。预处理的结果作为后续的纠错模型的输入,需要尽量减小误差,比如分词时引入领域专有词典,停用词词典尽可能小但包含大多需要过滤的选项等。
  3. 困惑集:困惑集主要影响的是召回率。纠错首先需要构建一个较好的困惑集,困惑集要尽可能小但能包含大多可能的情况。困惑集太大,在构造的候选句子时候选句子空间较大,会引入一些噪声。困惑集太小,则会忽略很多情况。
  4. 模型参数:在比较候选句子与原句语言模型评分时,设置的阈值在模型的准确率和召回率之间有一个trade off的过程,需要根据数据调整模型参数。

参考文献:

[1]Lee L H, Yu L C, Chang L P. Guest Editoral: Special Issue on Chinese as a Foreign Language[J]. International Journal of Computational Linguistics & Chinese Language Processing, Volume 20, Number 1, June 2015-Special Issue on Chinese as a Foreign Language, 2015, 20(1).

[2]Yu J, Li Z. Chinese spelling error detection and correction based on language model, pronunciation, and shape[C]//Proceedings of The Third CIPS-SIGHAN Joint Conference on Chinese Language Processing. 2014: 220-223.

[3] Lin C J, Chu W C. A Study on Chinese Spelling Check Using Confusion Sets and? N-gram Statistics[J]. International Journal of Computational Linguistics & Chinese Language Processing, Volume 20, Number 1, June 2015-Special Issue on Chinese as a Foreign Language, 2015, 20(1).

[4] Liu X, Cheng K, Luo Y, et al. A hybrid Chinese spelling correction using language model and statistical machine translation with reranking[C]//Proceedings of the Seventh SIGHAN Workshop on Chinese Language Processing. 2013: 54-58.

[5]Chen K Y, Lee H S, Lee C H, et al. A study of language modeling for Chinese spelling check[C]//Proceedings of the Seventh SIGHAN Workshop on Chinese Language Processing. 2013: 79-83.

[6]Xie W, Huang P, Zhang X, et al. Chinese spelling check system based on n-gram model[C]//Proceedings of the Eighth SIGHAN Workshop on Chinese Language Processing. 2015: 128-136.

[7] Zhao J, Liu H, Bao Z, et al. N-gram Model for Chinese Grammatical Error Diagnosis[C]//Proceedings of the 4th Workshop on Natural Language Processing Techniques for Educational Applications (NLPTEA 2017). 2017: 39-44.

[8] Jui-Feng Yeh, Sheng-Feng Li, Mei-Rong Wu, Wen-Yi Chen, and Mao-Chuan Su. 2013. Chinese word spelling correction based on N-gram ranked inverted index list. In Proceedings of the 7th SIGHAN Workshop on Chinese Language Processing. 43–48. 

[9] Zheng B, Che W, Guo J, et al. Chinese Grammatical Error Diagnosis with Long Short-Term Memory Networks[C]//Proceedings of the 3rd Workshop on Natural Language Processing Techniques for Educational Applications (NLPTEA2016). 2016: 49-56.

[10] Xie P. Alibaba at IJCNLP-2017 Task 1: Embedding Grammatical Features into LSTMs for Chinese Grammatical Error Diagnosis Task[J]. Proceedings of the IJCNLP 2017, Shared Tasks, 2017: 41-46.

原文发布于微信公众号 - 腾讯知文(tencent_wisdom)

原文发表时间:2018-07-04

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏AI科技评论

学界 | 百度SVAIL推出高效问答模型GNR,比双向注意流快24.7倍

AI科技评论消息,百度硅谷AI实验室最近推出强文,文中提出了一种被称为GNR(Globally Normalized Reader)的方法。据AI科技评论了解,...

2648
来自专栏SIGAI学习与实践平台

机器学习发展历史回顾

机器学习是现阶段解决很多人工智能问题的主流方法,作为一个独立的方向,正处于高速发展之中。最早的机器学习算法可以追溯到20世纪初,到今天为止,已经过去了100多年...

1483
来自专栏大数据智能实战

基于DeepStream的CNN的可视化理解

  对CNN进行可视化是一项重要的工作,有助于理解深度学习模型的黑箱里面到底是什么东西。 有个著名的工具是:deep-visualization-toolbox...

3426
来自专栏量子位

自然语言处理中的注意力机制是干什么的?

王小新 编译自Quora 量子位 出品 | 公众号 QbitAI 谈神经网络中注意力机制的论文和博客都不少,但很多人还是不知道从哪看起。于是,在国外问答网站Qu...

2733
来自专栏AI2ML人工智能to机器学习

基于深度学习的文本分类?

曾几何时, SVM一统江湖, Lecun见证的Vapnik和Larry Jackel的世纪之赌, 从95年坚持到2000年依然岿然不动。 但是再过10年, 到2...

1172
来自专栏CVer

【CVPR 2018 行人重识别】相关论文介绍(下)

上次Amusi很荣幸邀请linolzhang大佬分享关于深度学习的行人重识别方向相关论文整理的文章。由于篇幅有限,上次只介绍了部分论文内容和文献,本文将继续介绍...

3813
来自专栏深度学习自然语言处理

word2vec理论与实践

导读 本文简单的介绍了Google 于 2013 年开源推出的一个用于获取 word vector 的工具包(word2vec),并且简单的介绍了其中的两个训练...

3106
来自专栏SIGAI学习与实践平台

计算机视觉技术self-attention最新进展

Attention注意力,起源于Human visual system(HVS),个人定义的话,应该类似于 外界给一个刺激Stimuli,然后HVS会第一时间产...

1844
来自专栏数据科学与人工智能

【陆勤践行】机器学习中距离和相似性度量方法

在机器学习和数据挖掘中,我们经常需要知道个体间差异的大小,进而评价个体的相似性和类别。最常见的是数据分析中的相关分析,数据挖掘中的分类和聚类算法,如 K 最近邻...

2898
来自专栏腾讯音视频实验室

带宽节省利器——帧率上采样

目前大多数人都关注点都在超分辨率技术上,为何不Pick一下帧率上采样呢?

7.6K4

扫码关注云+社区