精华内容
下载资源
问答
  • 这是一篇论文翻译论文标题:Spelling Error Correction with Soft-Masked BERT论文地址:...在这篇论文中,我们不失普偏性的讨论中文拼写纠错。使用最先进的bert模型(一个语言表示模型),从语料...

    这是一篇论文翻译

    论文标题:Spelling Error Correction with Soft-Masked BERT

    论文地址:

    https://arxiv.org/pdf/2005.07421.pdfarxiv.org

    概要

    拼写纠错是一个有挑战的任务,因为一个完美的方案是需要有人类的语言理解能力。在这篇论文中,我们不失普偏性的讨论中文拼写纠错。使用最先进的bert模型(一个语言表示模型),从语料序列中一个一个的取出字符来进行更正处理。Bert模型的准确率还是相当不错的,不过,由于bert使用预处理模型是Masked Language Model(只有15%mask),不能发现每个位置上是否有错。所以,我们使用了一个新颖的神经网络结构来作为错误检测模块,使用bert来作为错误纠正模块,然后将这两个模块连接在一起,所以我们称之为soft-masking技术。我们的“Soft-Masked BERT”具有普偏性,可以使用在其他语言的拼写纠错里。测试结果表明,我们的方式比单独用bert效果要好。

    1 介绍

    拼写纠错是一个重要的任务,目的是纠正文本中拼写的错误,既要在字符级别也要在单词级别。在很多领域拼写纠错是关键的技术,比如:查询,OCR,论文评分。在这片论文里,我们考虑字符级别的拼写纠错。

    ae37b338849647ed7b8012e51c866cca.png
    Table 1: 中文拼写错误例子

    拼写纠错是一个非常有挑战的任务,因为要完全解决这个问题,模型需要有人类的语言理解能力。在Table1中,至少有两个挑战,第一是需要了解金字塔这个知识,金子塔是金子做的塔,金字塔是埃及的古建筑,在这里人是可以通过上下文来识别问题。第二有时需要一定的推理,第二句里错误的把“生”写成了“胜”,但是“求胜欲”在词层面上比“求生欲”更常见。

    拼写纠正有许多方法,可以分为两大类,一类是传统机器学习,另一类是深度学习。例如使用一个传统机器学习的统一框架来组成一个错误检测、备选生成、备选最终选择的通道。或者使用Seq2Seq深度学习模型将错误序列输入,然后输出一个拼写已经纠错的序列。

    最近,BERT,一个语言表示模型,被成功的应用到许多语言理解的任务上,包括拼写纠错。使用BERT最先进的方式是,拿一个已经使用大量未标签的数据集训练BERT,作为预训练模型,然后使用有标签的数据集微调BERT模型。这个有标签的数据集可以通过收集易混淆的拼写错误来生成。最后这个模型被用在预测给定句子的每个位置的备选字符列表最有可能性的一个。这个模型很强大,因为BERT有能力获取语言领域知识。我们的实验结果显示模型准确率还有可能被进一步提升。观察到一个现象,BERT模型检测错误的能力不是足够高,当一个错误检测到,模型有一个更好的机会去纠正。我们估计这是因为BERT预训练的方式只使用了15%字符遮蔽,因此它只学习到遮蔽字符的分布和尽量选择不做任何纠正。这个现象是普遍的,如果用BERT来做拼写纠错就有一定的挑战了。

    考虑到上面的问题,我们提出了一个新颖的神经网络结构,Soft-Masked BERT。它包含两个网络,检测网络和基于BERT的修正网络。修正网络和单独使用BERT相似。检测网络是一个BI-GRU,它预测在每一个位置上字符错误的概率,然后利用这个概率在序列上进行词向量的软遮罩。软遮罩是硬遮罩的扩展,当字符错误的概率为1时,软遮罩就变成了硬遮罩。每个位置上的软遮罩向量于是输入到纠正网络,使用BERT进行错误纠正。在端到端的连接训练中,在检测网络的帮助下,我们的做法能够迫使模型为了纠正更多的错误而学习到更多的正确的上下文信息。

    我们用实验对比了Soft-Masked BERT和一些基线数据,包括单独使用BERT。数据集使用了两个,SIGHAN和News Title,SIGHAN是一个基准数据集,New Title是一个高质量的评估数据,包含大量新闻文章,比SIGHAN的数据大10倍。就准确性的测试结果显示,Soft-Masked BERT明显在两个数据集上超过基准数据。

    这个结果要归功于两方面:(1)为中文拼写纠错提出的新颖的神经网络结构Soft-Masked BERT。(2)Soft-Masked BERT有效性的实验验证。

    2 使用方法

    2.1 问题和动机

    中文拼写纠错可以描述为这样一个任务,给定一个n个字符的序列

    ,然后转化为另外一个等长字符序列
    中错误的字符在
    中被更正。这个任务可以认为在序列中打标错误字符,模型可以认为是一个X到Y的映射。这个任务比较简单,但是在一个句子里,通常错误只有一两处或者没有,大部分需要原样复制。

    最好的办法是使用BERT来完成任务。实验数据显示,如果能够指明错误的字符,BERT纠错的能力可以被提升。数据也显示,对于输出的序列BERT倾向不做任何修改,也可能是因为BERT在做预训练的时候只使用了15%的mask,所以不是所有位置的字符都很好的理解上下文,从而具有正确纠错能力。这就是我们设计一个新模型的动机。

    2.2 Model

    我们为中文拼写纠错提出了一个新颖的叫做Soft-Masked BERT的神经网络模型,如下图。 检测网络使用Bi-GRU,纠正网络使用BERT。检测网络预测每个字符错误的概率,更正网络预测错误被纠正的概率,前者使用soft masking将预测的结果传给后者。

    9956478c4f9dfdbf74b21f6f765f6fd7.png
    Soft-Masked BERT架构图

    更特别的是,我们的方法先为每个字符创建一个向量,就是输入向量。下一步,检测网络处理输入的向量序列,输出每个字符的错误概率,然后用soft way的方式mask最有可能错误的字符。然后将soft masked的序列输入纠正网络,然后纠正网络输出对于masked的错误纠正正确的概率,使用的方式就是BERT模型,最后再加一个softmax进行结果归一化。输入向量和最后一层向量之间还有个残差连接。接下来,我们详细描述下模型细节。

    2.3 检测网络

    检测网络是一个二分类模型。输入是一个向量的序列

    代表第i个字符的向量,
    = word embedding + position embedding + segment embedding,正如在BERT里一样。输出是标签的序列
    表示第i个字符的标签,标签的值有两个,1表示字符错误,0表示字符正确。对于每一个字符有一个概率
    代表是1的概率,
    越大,就表示字符错误的可能性就越大。

    在工作中,我们用双向GRU(Bi-GRU),对于序列的每一个字符,错误概率

    定义为:

    ,

    其中

    表示检测网络提供的条件概率。
    表示sigmoid函数,
    表示 Bi-GRU的隐藏向量,
    是参数。此外,因此隐藏向量的定义为:

    62884e4d3ff572f83d22ecb36be4bc2d.png

    公式(4)表示GRU隐藏状态从两个方向的连接,GRU就是GRU函数。

    这个第i个字符的soft-masked向量

    定义为

    9fbe494953f8e8537633bb8a2fff5d05.png

    其中

    就是输入向量,
    就是mask向量,如果错误的概率很高,
    就近似等于
    ,如果错误的概率很低,就近似等于

    2.4 纠正网络

    纠正网络是一个基于BERT的序列多分类模型。输入是soft-masked的向量序列,

    ,输出是字符的序列

    BERT由12个单元的栈组成,将整个序列作为输入。每个单元包含一个多头、自注意力操作,然后接着一个feed-forward网络,定义如下:

    64db39d4d87d07d37ed7c91059fe17a8.png

    其中Q、K和V是同一个矩阵代表输入序列或者前一个单元的输出,MultiHead、Attention和FNN分别代表多头自注意力、自注意力和前馈网络,

    ,
    ,
    ,
    ,
    ,
    ,
    都是参数。我们将BERT最后一层输出的隐藏状态表示为

    对于序列的每个字符的错误纠正概率定义为

    98dd5f98e83c927c61dec7384a437426.png

    其中

    是字符
    被正确纠正为备选列表里的一个字符
    的条件概率,softmax是softmax函数,
    表示隐藏层,W和b是参数。
    等于残差线性组合。

    3e6fc49fe65357d07867221f2b950f9f.png

    是最后一层的隐藏状态,
    是字符
    的输入向量。纠正网络最有一层是softmax。从备选列表中选出最大概率的字符作为
    的输出。

    2.5 Learning

    Soft-Masked BERT的学习是一个端到端的训练过程,包括预训练的BERT,包含原始序列和纠正序列的训练数据,可以表示为

    。创建训练数据的一个方法是使用混淆矩阵,重复生成一个序列 包含错误的
    和没有错误的
    ,
    =1,2,...,N。

    这个训练过程由两个优化目标来驱动的,错误检测和错误更正。

    其中

    是检测网络的训练目标,
    是纠正网络的目标(也是最后的判断)。这两个函数线性组合在一个目标里学习。

    其中

    3 实验结果

    3.1 数据集

    4 问题

    问题一:训练的模型,随着训练的时间的增加不是越来越好,第一个模型检测准确率0.5,第二个模型0.3,第三个模型0.4.使用了交叉验证KFold。

    解决一:每次交叉验证是重新训练,从日志里看到loss是重新学习的,所以关键是在每次交叉验证里面的循环次数。

    展开全文
  • 对大多数拼写纠错来说,存在两个基本原则:对于一个拼写纠错的查询,在其中正确的拼写中,选择距离最近的一个。当两个正确拼写查询临近度相等时,选择更常见的那个。有两大类拼写纠错的方法,一种是词项独立的校正,...

    对大多数拼写纠错来说,存在两个基本原则:

    对于一个拼写纠错的查询,在其中正确的拼写中,选择距离最近的一个。

    当两个正确拼写查询临近度相等时,选择更常见的那个。

    有两大类拼写纠错的方法,一种是词项独立的校正,另一种是上下文敏感的校正。其中,在词项独立的校正中,不管查询中包含多少个查询词项,每次只对单个查询词项进行校正。利用这种词项独立的方式,很难检测到查询 flew form Heathrow中form这个错词。

    方法1:编辑距离

    给定两个字符串s1和s2, 两者的编辑距离定义为将s1转换为s2的最小编辑操作次数。编辑操作主要包括:

    将一个字符插入字符串、

    将一个字符从字符串中删除

    将一个字符替换为另一个字符

    基于这些操作的编辑距离也称为Levenshtein距离,例如:cat和dog的编辑距离是3。

    ​ 可以在O(|s1| * |s2|)的时间复杂度下计算两个字符串的编辑距离。|si| (i=1,2)表示字符串si的长度。主要解决思路是采用动态规划的思想:

    s1和s2以字符数组的形式存放,整数矩阵M的行号和列号分别是两个字符串的长度,算法在运行过程中不断填充矩阵,矩阵的第i行和第j列保存的是s1的前i个字符构成的字符串和s2的前j个字符构成的字符串的编辑距离。其中求最小值的三个参数分别对应在s1中替换一个字符、在s1中插入一个字符和在s2中插入一个字符。

    ​ 两个字符串的编辑距离计算算法如下:

    public int minDistance(String word1,String word2){

    int m=word1.length();

    int n=word2.length();

    int [][]dp=new int [m+1][n+1];

    for(int i=0;i<=m;i++){

    dp[i][0]=i; //单纯的删除操作

    }

    for(int i=0;i<=n;i++){

    dp[0][i]=i; //单纯的插入操作

    }

    for(int i=0;i

    for(int j=0;j

    if(word1.charAt(i)==word2.charAt(j)){

    dp[i+1][j+1]=dp[i][j];

    }else{

    dp[i+1][j+1]=Math.min(dp[i][j+1],Math.min(dp[i+1][j],dp[i][j]))+1;

    }

    }

    }

    return dp[m][n];

    }

    ​ 拼写纠错的问题:

    给定字符串集合V(对应词项词汇表)和查询词字符串,从V中寻找和q具有最小编辑距离的字符串。最直接的算法是计算q到V中的每个词项的编辑距离,然后选择其中编辑距离最小的字符串。很显然这种穷举的搜索开销很大,实际当中使用列多种启发式方法来提升查询效率。最简单的启发式方法是将搜索限制在与查询词有相同首字母的字符串上,也就是说我们期望查询的拼写错误不会出现在第一个字符上。

    方法2:k-gram 索引

    ​ 为了进一步限制需要计算编辑距离的词汇表大小,利用k-gram索引来辅助返回与查询q具有较小编辑距离的词项,一旦返回这些词项后,就能从中找到与q具有最小编辑距离的词。

    ​ 查询bord的2-gram索引如下所示,其中包含3个2-gram组成的倒排记录,假定我们要返回包含上面3个2-gram的至少2个词项,对倒排记录表的单遍扫描会返回满足该条件的所有词项。

    bo ----> aboard ----> about ----> boardroom ----> border

    or ----> border ----> lord ----> morbid ----> sordid

    rd ----> aboard ----> ardent ---> boardroom ----> border

    ​ 缺点:

    比如boardroom这种不可能是bord的正确拼写也会返回。

    针对上面的问题,需要计算查询词和词汇表更精细的重叠度计算方法。比如:Jaccard系数

    Jaccard系数的计算公式为:

    其中,A、B分别是查询q、词汇表词项中的k-gram集合。扫描过程中,一旦扫描到当前的词项t,就快速计算q和t的Jaccard系数,然后继续扫描下一个词项。如果Jaccard系数超过阈值,则将t输出,否则继续下一个扫描。

    方法3: 上下文敏感的拼写校正

    ​ 独立的词项拼写校正方法在面对诸如flew form Heathrow 中的输出错误时无能为力,因此这3个单词独立看来拼写都没有错误。当输入这类查询时,搜索引擎可能会发现返回的文档非常少,随后也许提供正确的查询建议flew form Heathrow。

    这种功能的一种简单的实现方法就是,及时每个单词拼写都是对的,仍然要对每个单词找到可能的拼写正确词,然后尝试对短语中的每个词进行替换。比如对于上面flew form Heathrow的例子,我们可能会返回如下短语fled from Heathrow 和 flew fore Heathrow。对每个替换后的短语,搜索引擎进行查找并确定最后的返回数目。

    ​ 对于单独的查询有多种可能的正确拼写形式,那么上述方法中穷举过程的开销会非常大,最后我们就会面对非常多的拼写组合。有一些启发式方法可以减少可能的拼写结果空间。

    上述例子中,我们对flew及from进行扩展时,我们只保留文档集合或者查询日志中的高频组合结果。比如,我们可能会保存flew from 而不是 fled fore 或 flea form,这是因为fled fore很可能比flew from 出现的次数少。接下来我们仅仅根据高频双词(如flew from)来获得Heathrow的可能的正确拼写。计算双词频率的时候可以使用文档集,也可以使用用户的查询日志。

    展开全文
  • 基于统计语言模型的中文拼写纠错1.流程图2.实验结果局部方法的实验结果:全局方法的实验结果:3.初步结论缺点:a.SLM对训练语料的规模和质量敏感。b.错词检测策略灵活,变化较多。单纯的局部⽅法和全局方法都应该不...

    一.基于统计语言模型的中文拼写纠错

    1.流程图

    2.实验结果

    局部方法的实验结果:

    全局方法的实验结果:

    3.初步结论

    缺点:

    a.SLM对训练语料的规模和质量敏感。

    b.错词检测策略灵活,变化较多。单纯的局部⽅法和全局方法都应该不是一个⾮常合理的方案。

    c.检错准确率较低,全局⽅法的评估受错词阈值影响大。

    优点:

    a.训练速度和推断速度快,模型部署容易。

    思考:

    a.虽然在测试集上的准确率较低,但是从附录的测试来看,检测效果还不错。原因正在考虑。

    b.检错的策略需要深入思考。

    c.基于SLM的⽅案检错和纠错分两步走,纠错时目前想到的⽅案有两种,⼀种是基于词语搭配的⽅式,找出错词的前⼀个词作为Key,用Value替换检测出的错词,算句子的PPL或者n-gram得分,其中句子搭配可以基于依存句法分析或者搜狗语料库中给出了一个基于统计的搜索词搭配数据集,或者第三⽅构建的混淆集。

    另⼀种⽅案是按照构建训练数据集的方式,基于百度输⼊入法的API,按照错词拼音的全拼和简拼方式 构建K-V字典作为混淆集。

    但是无论上述哪一种,检错都是最关键,最重要的一步。

    d.考虑到部署,基于SLM的方案尚不成熟,故可能Transformer的方案会OK⼀一些。

    e.End-2-End的DL⽅法的确是很棒的,省去了很多细节上的考察和思考,SLM还有很多细节值得去思考。

    4.一些测试例子(列表中的词表示检测出的错词)

    [‘化夏’] 化夏 ⼦孙 团结一心 。

    [‘形像’] 形像 代⾔⼈人 。

    [‘影像’] 此事 不 会 影像 中国 关系 ⼤局 。

    [‘计画’] 我们 会 优先 推动 五 大 创新 研发 计画 。

    [‘惊吁声’] ⼈群 中 发出 一阵 惊吁声 。

    二.基于Sequence Tagging的思路

    1. 输入输出和模型选择

    2.结果评估

    三.基于Sequence2Sequence的思路

    1.模型选择

    模型上选择Transformer,使用Tensor2Tensor作为训练框架。

    2.结果评估

    四.基于百度文本纠错的API的思路

    该思路在单独一篇博客中讲到,参看这篇文章。

    总结:从自己构建的数据集测试结果来看,基于生成的思路效果最好,同时可以完成检错和纠错;基于传统统计的方法,检错和纠错需要分开做,需要考虑的细节问题较多,该问题值得继续深入研究。

    参考文献:

    列举上述三篇参考资料,重在讨论检错策略。在不同的文件中,提出了不同的检错策略。

    英语流利说的模型,应用在英文场景下,模型比较简单,但是效果很不错。

    展开全文
  • 在搜索引擎中,用户希望得到...拼写纠错,主要应用于58集团内部主站搜索中,可以对用户输入的房产,招聘,黄页,二手车等类别搜索质量不佳的查询词进行纠错改写,以能返回更好的搜索结果。拼写纠错能够挽回错误输入...

    8f5548b8de1879a8cecfa996fef474b2.gif

    在搜索引擎中,用户希望得到和输入查询词相关的并且质量较好的网页或文档。但是往往出于各种原因,用户输入的查询词本身质量不高或是错误的,如果搜索引擎不对这种错误进行修正弥补,会导致召回错误的结果,或者结果数少甚至没有结果。

    拼写纠错,主要应用于58集团内部主站搜索中,可以对用户输入的房产,招聘,黄页,二手车等类别搜索质量不佳的查询词进行纠错改写,以能返回更好的搜索结果。拼写纠错能够挽回错误输入导致的流量损失,对于提升用户体验起到重要作用,在58搜索引擎中是非常重要的一个模块。

    拼写常见错误

    在58的搜索场景下,用户输入查询词较短,较普遍使用拼音输入法输入拼音选择候选词,在部分方言中,一些音节是与普通话发音不同的(例,zh=>z、ang=>an、fei=> hui), 用户发音的地域特色常出现模糊音问题。另外由于移动端屏幕小,用户误选或未选,也很容易出现错误,同时伴随有手写及语音输入等其他输入方式,输入随意,也是错误的来源。

    整体上看,常见的查询词拼写错误类型包括:1)纯拼音;2)错字母或缺字母的英文;3)拼音汉字混合。拼音类型的错误包含同音别字、模糊音别字, 汉字方面包含错字、缺字错误。

    纠错方案

    基于规则的纠错方法

    是根据用户输入错误的类型进行设计的,通过离线生成错误词到正确词的索引,线上纠错时用查询词或者处理后的查询词查询索引,如果索引中存在查询词到正确词的索引,则对查询词纠错为正确词,否则不做纠错处理。

    基于规则的纠错方法离线使用包含58集团服务领域全部词条的语料文件和搜索日志统计的搜索热词来生成索引文件,主要生成两个索引词典,拼音索引文件和编辑距离索引文件。遍历原始文件的每个词条,生成关键词的全拼,简拼,尾部不完整拼音,拼音的模糊音变换到关键词的索引,保存到拼音索引文件;生成关键词的每个位置的字删掉后余下的字串到关键词的索引,保存到编辑距离索引文件。

    拼音索引可以纠错查询词是全拼,简拼,拼音汉字混合,不完整拼音,同音错别字,模糊音错别字的错误,编辑距离索引可以纠错查询词是错字,缺字的错误。

    对于很长的全拼音查询词,索引文件中没有对应的索引词条,可以从查询词右侧开始和拼音索引文件匹配最长的拼音,如果找到匹配的拼音,将匹配的拼音截掉后继续进行前述过程,一直到处理完全部查询词。最后将匹配的拼音索引的词组合在一起作为纠错结果。

    基于统计语言模型的纠错方法

    用于纠错长查询词。离线使用包含58集团服务领域全部词条的语料文件和搜索日志统计的搜索热词生成语言模型。线上处理时,对查询词先进行分词,然后将相邻词组合在一起进行拼音纠错或编辑距离纠错,对纠错得到的词进行分割,这样原始查询词的每个分词会得到若干个候选词,然后使用维特比算法找到每个分词对应的候选词的最优组合,最优组合的标准是每个候选词的3-gram条件概率和最大。

    以下是纠错实现的详细描述。

    离线词典生成

    离线使用语料文件生成拼音索引文件,编辑距离索引文件,用于检查候选词正确性的词频文件,ngram模型文件。

    (1)拼音词典:读取语料文件中的每一个词条的关键词,生成四种索引:关键词的所有汉字转换为对应的拼音到原始关键词的索引;关键词的所有汉字转换为对应拼音的首字母到原始关键词的映射;关键词的所有汉字转换为对应的拼音,其中的卷舌音转换为非卷舌音,非卷舌音转换为卷舌音,进行任意组合后形成的词到原始关键词的映射;关键词的所有汉字转换为对应的拼音,最后一个汉字的拼音只保留首字母生成的词到原始关键词的映射。如下例所示:

    索引

    原始关键词

    索引类型

    可用于纠错的词示例

    ershoudiannao

    二手电脑

    1

    ershoudiannao,二手diannao,二手点脑

    esdn

    二手电脑

    2

    esdn

    ersoudiannao

    二手电脑

    3

    ersoudiannao,二搜电脑

    ershoudiann

    二手电脑

    4

    ershoudiann,二手电n

    (2)编辑距离词典:读取语料文件中的每一个词条的关键词,生成两种索引:省略关键词中的每个字生成的字串到原始关键词的索引,并记录省略掉的字在原始关键词中的位置;将词条中的所有汉字转换为拼音,省略掉拼音中的每个字母生成的字符串到原始关键词的索引,并记录省略掉的字母在词条中的位置。如下表的例子所示:

    索引

    省略字的位置

    原始关键词

    索引类型

    可用于纠错的词示例

    二手电脑

    -1

    二手电脑

    1

    无纠错

    手电脑

    1

    二手电脑

    1

    手电脑,无手电脑

    二电脑

    2

    二手电脑

    1

    二电脑,二无电脑

    二手脑

    3

    二手电脑

    1

    二手脑,二手无脑

    二手电

    4

    二手电脑

    1

    二手电,二手电无

    Ershoudiannao

    -1

    二手电脑

    2

    无纠错

    Rshoudiannao

    1

    二手电脑

    2

    rshoudiannao

    Eshoudiannao

    2

    二手电脑

    2

    eshoudiannao

    Erhoudiannao

    3

    二手电脑

    2

    erhoudiannao

    ...

    ...

    ...

    ...

    (3)ngram模型:统计语言模型纠错方法使用3-gram模型。使用开源工具Srilm训练ngram模型。首先对语料文件的每个词条的关键词分词,将分词用空格分割后保存;用Srilm先统计相邻3个分词组合的数目,生成ngram计数文件,然后统计每个组合的概率,生成语言模型。Srilm在训练模型时可以对数据进行平滑。模型可以用来评估一个词组的合理性,或者说可以用来评估两个字符串之间的差异程度。ngram模型的基本原理是一个句子中的每个词出现的概率只与其前面出现的词有关。可以计算每个词和其前面词组合在一起的条件概率,用以计算一个词序列组成词组的整体概率,如下公式所示:

    c0cd321a8e2c626a442921d55e343482.png

    利用马尔科夫链假设,当前词仅仅跟前面几个有限的词相关,因此就不必追溯到最开始的那个词,这样可以大幅缩减上诉算式的长度。3-gram模型中当前词仅仅跟前面2个词相关,如下公式所示:

    c3a57894d2ab6cc5bc7617b8f2d7cc29.png

    在本纠错服务中当索引文件中不存在与查询词对应的词条时,可以先对输入词进行分词,然后相邻词组合在一起进行分段纠错,这样的将相邻词组合在一起可以利用每个词的上下文信息。分段纠错后会产生很多候选的纠错结果,最后从每段选出一个候选词组合成最优的结果。

    在本纠错方法中计算出各组合中3-gram概率和最大的一个组合作为最优的组合。假设查询词是“源通快滴找聘”,经过分段纠错得到如下图所示的候选词,候选词组合“源通快滴 找聘”的3-gram概率和为:

    P(源通|S,S)+ P(快滴|源通,S)+ P(找聘|源通,快滴)

    其中P(找聘|源通,快滴)类似的是“找聘”在“源通快滴”后的条件概率。

    211e826cf4aecca2741b25ba62043ba0.png

    以上候选词组成一个栅格图,可以使用维特比算法求出这个栅格图的最大概率路径。

    维特比算法使用动态规划的思想,每个分词位置的最大概率路径必定由前一个位置的某个候选词的最大概率路径组成。

    在本纠错方法中,由于使用3-gram,对维特比算法进行一些修改,如下图所示:

    d6d82b077d6aa07ae30483ad0e04988d.png

    cc8de3feaafbe36b52a29dfc4a0977db.png

    在图中,C_x_x这样的标记是候选词。在2-gram中,因为每个候选词的条件概率只与前面一个位置的候选词计算出来,所以使用前面一个位置每个候选词的最大概率路径来计算当前位置每个候选词的最大概率路径。如下式所示:

    2390dac02b2f155bdf2a78871f2cd30a.png

    在3-gram中,因为每个候选词的条件概率是由前面两个位置的候选词计算出来的,所以每个候选词对应的最大概率路径不一定由前面一个位置的每个候选词的最大概率路径组成。前一个位置的每个候选词需要保存多条路径及对应的最大概率值,每条路径是经过前两个位置候选词的路径中的最大概率路径。如下式所示:

    443065f6e4a2c8741673cd73963ca347.png

    最后一个位置时求出所有候选词的最大概率路径的组合就是最后的纠错结果。

    具体的工程实现中,对相邻词组合纠错后得到的纠错结果进行分割来得到每个分词位置的候选词。分割过程中需要注意缺字情况下纠错结果的长度和原始组合词长度不一样情况下分割情况的完整性,将缺字的所有位置都要进行考虑。查询词的分词结果中可能有一些单字,因为单字与相邻词组合后的词大部分比较短,比较短的词不进行拼音纠错和编辑距离纠错。所以单字不作为单独的分词位置,而是将单字组合到周围的分词中。组合时要考虑所有的组合情况。纠错中间结果的分割也需要考虑单字的影响。

    在线纠错流程

    整个线上纠错流程如下图所示:

    d1ff77ee833ef09a8156a17e780153bf.png

    输入查询词后

    1. 首先解析查询词,判断查询词是全拼音或还是包含中文。

    2. 如果查询词是全拼音,则进行拼音纠错。

    3. 如果被纠错则退出纠错流程,返回纠错结果。

    4. 如果没有被拼音纠错,则进行编辑距离纠错。

    5. 如果被编辑距离纠错则退出纠错流程,返回纠错结果。

    6. 如果没有被编辑距离纠错,则进行长拼音纠错,处理完后退出纠错流程,如果有纠错结果,则将纠错结果返回。

    7. 如果查询词是部分中文或全中文的,则先进行拼音纠错。具体方法为将所有汉字转换为对应的拼音,然后查询拼音索引,查询有结果则纠错。如果没有被拼音纠错,则对查询词进行分词,然后使用基于语言模型的方法纠错。

    各种错误query的纠错流程示例:

    错误词

    纠错后的词

    纠错方法

    纠错级别

    Shuianhuating

    水岸华庭

    不包含汉字,拼音纠错后退出

    强制纠错不提示

    ATLS

    奥特莱斯

    不包含汉字,拼音纠错后退出

    强制纠错提示

    linshiG

    时工

    不包含汉字,拼音纠错后退出

    强制纠错提示

    iphoni4

    iphone4

    不包含汉字,拼音纠错未能纠错,编辑距离纠错正确纠错,退出

    强制纠错提示

    05crv

    05款crv

    不包含汉字,拼音纠错未能纠错,编辑距离纠错正确纠错,退出

    强制纠错提示

    shijingshanxiaochaoshi

    石景山小超市

    不包含汉字,拼音纠错未能纠错,编辑距离纠错未能纠错,长拼音纠错正确纠错,退出

    强制纠错提示

    途an

    途安

    包含汉字,拼音纠错正确纠错,退出

    强制纠错提示

    保山l

    宝山路

    包含汉字,拼音纠错正确纠错,退出

    强制纠错提示

    昂克威

    昂科威

    全部汉字,拼音纠错正确纠错,退出

    强制纠错提示

    天津医科大学总医院zufang

    天津医科大学总医院租房

    包含汉字,整体拼音纠错未纠错,分词为天津医科大学、总医院、zufang。使用ngram纠错为天津医科大学总医院租房

    强制纠错不提示

    复试办公公寓

    复式办公公寓

    包含汉字,整体拼音纠错未纠错,分词为复试、办公、公寓。使用ngram纠错为复式办公公寓

    建议纠错及提示

    本纠错模块就规则、统计模型的传统纠错方法实践进行了介绍,在58场景下可以对大部分的用户错误输入进行纠错,但就技术主要步骤:纠错词表、候选词生成及评价等方面还有不少空间,针对不同领域和业务情况还可以实施独立的策略算法,进行更精细的优化。

    目前业界前沿纠错技术不仅可以纠正用词的错误,还可以纠正文法错误,句法错误,知识错误等。例如百度的纠错技术,首先使用CRF技术检测错误,然后召回候选,最后使用deep和wide的混合模型对候选词排序。腾讯的纠错技术基于语义关联,特别对垂直搜索的效果很好,具体的实现和知识图谱的挖掘类似。另外有些开源项目大部分使用了避免人工特征提取的基于深度模型的纠错方法,各有优缺点。需要我们追赶前沿,根据业务场景不断的进行探索实践优化。

    9cda807a5fa57061f4a3a0b8abac6a1c.png

    展开全文
  • 1、拼写纠错是基于编辑距离来实现;编辑距离是一种标准的方法,它用来表示经过插入、删除和替换操作从一个字符串转换到另外一个字符串的最小操作步数;2、编辑距离的计算过程:比如要计算 batyu 和 beauty 的编辑...
  • 最近在研究中文拼写纠错,在查阅资料的时候看到了这篇文章《从编辑距离、BK树到文本纠错 - JadePeng - 博客园》,觉得 BK 树挺有意思的,决定深入研究一下,并在其基础上重新整理一遍,希望能够对各位读者大大们有所...
  • 一、中文:1、Pycorrector:https://github.com/shibing624/pycorrector当前主流的中文纠错框架,支持规则和端到端模型 2、FASPell:https://github.com/iqiyi/FASPell/blob/master论文:...
  • FASPell该仓库(根据GNU通用公共许可证v3.0许可)包含构建当前最佳(到2019年初)中文拼写检查器所需的所有数据和代码,可以以此复现我们的同名论文中的全部实验:FASPell: A Fast, Adaptable, Simple, Powerful Chinese...
  • 背景技术:在国内外相关领域研发人员的共同努力下,中文拼写检查在关键技术方面取得了重要突破,在技术运用方面也有相关产品落地,比如百度智能纠错平台,云查错等各种app,拼写检查的质量在一定程度上满足了人们的...
  • 感谢 @顾颜兮 提到的一个比赛。...此外,中文本文纠错这个问题本身需要对错误类型很好的定义,不同的错误类型,可能需要处理的方式不同,当然我们希望有一个general的模型,但是短期来看,似乎还做不到。
  • 本文首先介绍一下:1)错别字的类型有哪些2)错...如果有小伙伴能告知比较好的中文文本纠错package,欢迎留言讨论!感谢!简单总结了一下中文别字错误类型:1. 别字: 感帽,随然,传然,呕土2. 人名,地名错误:哈...
  • 作者: @Qarnet 前言最近在优化dxy帖子召回问题,我们之前在医疗健康领域的短文本解析探索(一)提到了phrase mining 抽取粗粒度名词,在医疗...在nlp领域中文纠错是个坑,不能说是深坑,也就是个万丈深渊吧... ,...
  • 来自:丁香园大数据前言最近在优化dxy帖子召回问题,我们之前在医疗健康领域的短文本解析探索(一)提到了phrase mining 抽取粗粒度名词,在医疗...在nlp领域中文纠错是个坑,不能说是深坑,也就是个万丈深渊吧......
  • 科研干货实用英语论文撰写纠错工具对于工科专业的我们来说,撰写英语论文时,大家首先想到的可能是百度、有道、google等一些大众的翻译软件,不仅会发生一些语法错误,而且其生硬直接的翻译方式也会降低文章的准确度...
  • 特性说明支持英文的单词纠错可以迅速判断当前单词是否拼写错误可以返回最佳匹配结果可以返回纠正匹配列表,支持指定返回列表的大小错误提示支持 i18n支持大小写、全角半角格式化处理支持自定义词库v0.0.5 最新变更...
  • 摘要 语法纠错(GEC,Grammatical Error Correction,下同)是NLP的一个子领域,在搜索query纠错、语音纠错、舆情文本纠错等诸多直接与普通大众交互的场景得到应用。在深度学习被广泛使用的背景下,研究人员提出了多种...
  • 的快车,通过硬核技术提高自动拼写和更正的效率。日前,讯飞输入法升级智慧拼音输入,搭载全新A.I.拼音引擎,可根据输入习惯联系上下文做智能判断,更重要的是不断精化纠错能力,做到与用户的“心有灵犀”。“懂你...
  • 逃逃前阵子参加了学校的单词拼写比赛,叫Spelling Bee。哈哈,名字特形象,“拼写小蜜蜂”,要取得好成绩,还真得像小蜜蜂一样勤奋。SpellingBee大赛最早成立于1925年,一年一度,在美国非常流行,是个全国性的比赛...
  • 计算语言学之拼写纠错

    千次阅读 2017-06-10 16:27:22
    1. 引言拼写检查是一个非常底层的自然语言处理方面的任务。...2. 英文拼写纠错无论是英文拼写纠错还是中文拼写纠错,都需要两部分,一个是发现错误,一个是纠正错误。这里我们提供2种匹配方法。2.1 基于字典的
  • 拼写纠错

    2020-10-23 16:14:05
    1. 引言 拼写检查是一个非常底层的自然语言处理方面的任务。多用在信息检索、输入法等,其实也可以扩展到寻找同义词等相关领域。这里我们主要针对英文、中文中的拼写检查的方法,进行一个简要的...2. 英文拼写纠错...

空空如也

空空如也

1 2 3 4
收藏数 80
精华内容 32
关键字:

中文拼写纠错