专栏首页语言、知识与人工智能基于语言模型的拼写纠错

基于语言模型的拼写纠错

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

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

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

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

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 基于深度学习的FAQ问答系统

    | 导语 问答系统是信息检索的一种高级形式,能够更加准确地理解用户用自然语言提出的问题,并通过检索语料库、知识图谱或问答知识库返回简洁、准确的匹配答案。相较于...

    腾讯知文实验室
  • IJCAI 2018 | 腾讯知文等提出新型总结式摘要模型:结合主题信息和强化学习训练生成更优摘要

    腾讯知文实验室
  • 最简单的模型轻量化方法:20行代码为BERT剪枝

    | 导语 BERT模型在多种下游任务表现优异,但庞大的模型结果也带来了训练及推理速度过慢的问题,难以满足对实时响应速度要求高的场景,模型轻量化就显得非常重要。...

    腾讯知文实验室
  • AI界最危险武器GPT-2使用指南:从Finetune到部署

    今早一起床就看到François Chollet大神(Keras作者)发推,根据 GPT-2中量模型的超长距离记忆想到了一种简单的不基于机器学习的文本生成方式,...

    大数据文摘
  • 软件开发模型

    典型的开发模型有:1. 边做边改模型(Build-and-Fix Model);2. 瀑布模型(Waterfall Model);3. 快速原型模型(Rapid...

    233333
  • 计算机网络术语详解

    假设你的名字叫小不点,你住在一个大院子里,你的邻居有很多小伙伴,在门口传达室还有个看大门的李大爷,李大爷就是你的网关。当你想跟院子里的某个小伙伴玩,只要你在院...

    bear_fish
  • 使用wxpy这个基于python实现的微信工具库的一些常见问题

    版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明...

    Jerry Wang
  • 图灵奖得主推荐新书:图模型手册(500页PDF下载)

    图灵奖获得者 Judea Pearl 在 Twitter 推荐了一本新书《图模型手册》,他认为,这本书很好地刻写了图模型领域自 20 世纪 80 年代成立以来是...

    新智元
  • 歌尔股份与Kopin联合研发,小巧轻型2K VR头显将于明年底上市

    VRPinea
  • 基于深度学习的FAQ问答系统

    | 导语 问答系统是信息检索的一种高级形式,能够更加准确地理解用户用自然语言提出的问题,并通过检索语料库、知识图谱或问答知识库返回简洁、准确的匹配答案。相较于...

    腾讯知文实验室

扫码关注云+社区

领取腾讯云代金券