文本纠错开源项目Pycorrector

如果无法正常显示,请先停止浏览器的去广告插件。
分享至:
1. 文本纠错开源项目 分享嘉宾:徐明
2. 目录 • 背景 • 纠错比赛 • 中文纠错解决方法 • 学术界方法 • 工业界方法 • 总结
3. 背景:纠错问题 包括:拼写纠错和语法纠错 • 网络微博、微信用语 — 错误率>2% • 语音识别转文本、OCR转文本 — 错误率>8% • 垂直领域文本输入,UGC,弹幕 — 错误率>1% 常见中文错误类型: 类别 常见应用场景: 细类 谐音字词 混淆音字词 中文拼音全拼 中文拼音缩写 case 配副眼睛-配副眼镜 流浪织女-牛郎织女 xingfu-幸福 sz-深圳 形似错字 形似字错误 高梁-高粱 多字 少字 乱序 多字 少字 词语颠倒 即减肥又又有营养-即减肥又有营养 爱有天意-假如爱有天意 伍迪艾伦-艾伦伍迪 语法错误 搭配错误 想象难以-难以想象 音似错字 • 搜索引擎 • 输入法、OCR、ASR • 文本校对 • 内容风控
4. 纠错比赛:公开的中文纠错比赛 CGED 2020 (Chinese Grammar Error Diagnosis) SIGHAN、NLPCC、CGED比赛介绍 SIGHAN 2015: Chinese Spelling Check Task • 官网:http://ir.itc.ntnu.edu.tw/lre/sighan8csc.html • 数据集:http://nlp.ee.ncu.edu.tw/resource/csc.html Source:1986年毕业于国防科技大学计算机应用专业,获学时学位。 Target: 1986年毕业于国防科技大学计算机应用专业,获学士学位。 (时 -> 士) NLPCC 2018 语法纠错 • 官网:https://github.com/zhaoyyoo/NLPCC2018_GEC • 数据集:http://tcci.ccf.org.cn/conference/2018/taskdata.php 四种错误类型: • R(多字) • M(缺字) • S:(错别字) • W:(词序错误) • 数据集:http://www.cged.tech/ • CGED包括以下几个子任务: • 检测,句子级的二分类,判断是否有语法错误 • 识别,多标签分类,判断具体错误类别 • 位置级,识别出 start_pos,end_pos 和错误类别 • 改正,对于选词错误和缺失词进行改正
5. 纠错预处理:训练样本 样本数据集质量高于模型 无监督方法: 有监督方法: • 随机造样本,随机删词、随机加词、随机替换词、随机乱序 • 生成模型,seq2seq • UDA,非核心词替换 正确文本生成错误文本,利用 seq2seq 模型自动生成纠错 pair: • EDA,简单数据增广技术,相似词、同义词替换 • 回译(bt, back translate),中文-英文-中文 • Bert Fill-Mask完形填空 + 音似形似相似度阈值 https://github.com/shibing624/textgen paper : Improving Grammatical Error Correction with Data Augmentation by Editing Latent Representation COLING 2020
6. 纠错解决方法:思路 规则的解决方法,深度模型的解决方法,研究循序渐进 规则的解决思路 • 专家系统 • 统计语言模型 – 默认方法 错误检测 • 混淆词典匹配:支持纠错和改正误纠 高梁 -> 高粱 • 常用词典匹配:切词后不在常用词典中的疑似错词 • Ngram语言模型:某个字的前后搭配2gram和3gram的 似然概率值低于句子文本平均ppl值 深度模型的解决思路 • DeepContext • CRF • Seq2Seq • BERT/ELECTRA/ERNIE/MacBERT • SoftMaskedBert/PLOME/MLM-phonetics 候选召回 候选排序 • 混淆集结果 • 音似字典替换错字结果 梁\liang ->凉 量 粱 良 粮 … • 形似词典替换错字结果 梁 ->粱 渠 喋 • 基于统计语言模型(kenlm)计算句子似然概率,取概 率值超过原句且最大的 P(种在高粱地里) P(种在高凉地里) P(种在高梁地里) P(种在高渠地里) 项目地址:https://github.com/shibing624/pycorrector
7. 规则方法:检错实现 错误检测的实现逻辑 取疑似错字的位置 • 通过平均绝对离差(MAD) • 通过平均值上下n倍标准差之间 属于正常字
8. 规则方法:纠错实现 错误纠正的实现逻辑 自定义的混淆集(confusion_custom_set) 构建候选集 • 字的混淆集(confusion_char_set) • 词的混淆集(confusion_word_set)
9. 规则方法:英文纠错实现 英文单词错误纠正的实现逻辑 候选值生成 • 通过candidates方法获得可能的正确地拼写词 • 获取编辑距离1,2内的候选值以及当前值和子集 计算方法 • 使用当前词的频率/总得词频数量,简单粗暴 • 英语常用单词3万个,取词频高于400
10. 模型方法:Alibaba at IJCNLP-2017 将语法特征嵌入到LSTM中用于中文语法错误诊断任务 Paper:《Alibaba at IJCNLP-2017 Task 1:Embedding Grammatical Features into LSTMs for Chinese Grammatical Error Diagnosis Task》 • 将CGED问题视为序列标记问题,使用双向LSTM单元作 为RNN单元对输入序列进行建模 • 因缺少训练数据,所以特征工程非常重要
11. 模型方法:有道NLPCC-2018 CGEC Chinese Grammatical Error Correction (CGEC) 2018年NLPCC语法纠错比赛Top1方案 Paper:有道NLPCC-2018 CGEC任务论文:A Neural Machine Translation Approach to Chinese Grammatical Error Correction • 修正浅层错误(拼写错误、标点错误) • 检测并改正语法错误 • Ensemble • 基于词的模型语法错误表现好,在拼写错误表现差 • NMT模型使用不同粒度输入:char, char+subword,subword,subword+char • 5gram语言模型排序
12. 模型方法:Seq2Seq 基于encoder-decoder尝试端到端解决纠错问题 Seq2Seq模型结构: Seq2Seq_attn模型结构: pycorrector seq2seq预测结果: sighan2015 样本: source target 今天是他第一次有棵可是他不局道怎么去。 今天是他第一次有课可是他不知道怎么去。 我们来家里面,然后讨润以下怎么回去。 我们来家里面,然后讨论一下怎么回去。
13. 模型方法:ConvSeq2Seq 微软亚洲研究院使用ConvSeq2Seq对英文语法纠错超过人类水平 Paper: Reaching Human-level Performance in Automatic Grammatical Error Correction: An Empirical Study 问题: • 受到训练数据的影响,训练数据中没有见过的语法错误, 方案: • 不能很好地改正 • 多个错误同时存在的时候,很难做到一次全部都修正 Fluency boost learning,即在训练过程增加数据,让模 型能够看到更多的错误,增强模型的泛化能力 • Boost inference,即预测过程中进行增强,一是多轮预 测,二是循环预测
14. 模型方法:ConvSeq2Seq Fluency Boost learning 方案
15. 模型方法:ConvSeq2Seq Boost inference 方案 A. multi-round B. round-way 与人类语法改错水平比较:
16. 模型方法:ConvSeq2Seq ConvSeq2Seq模型结构
17. 模型方法:ConvSeq2Seq ConvSeq2Seq模型实现逻辑 Git更新日志: • fairseq -> simpletransformers • tf->pytorch版本 • transformers 版本更新,1.x版本->2.x版本- >4.x版本 预测结果:
18. 模型方法:Soft-Masked Bert Soft-Masked BERT 应用于中文拼写纠错 Paper:Spelling Error Correction with Soft-Masked BERT ACL 2020 字节跳动 创新点: • 纠错分为:检测网络(Detection)和纠正网络(Correction) • 以检测网络的输出作为权重,将 masking 特征添加到各个输入字符,即 “Soft-Masked” 检测网络: • 检测网络由Bi-GRU组成 • 输出是每个位置 i 可能为错别字的概率 p(i),值越大->出错概率大。 Soft Masking: 纠正网络: • 一个基于BERT的序列多分类标记模型 • 将每个字特征过一层 Softmax 分类器,从候选词表中输出概率最大的字 符认为是每个位置的正确字符
19. 模型方法:Soft-Masked Bert Soft-Masked BERT 应用于中文拼写纠错 损失函数由检测网络和纠正网络加权构成 https://github.com/gitabtion/BertBasedCorrectionModels
20. 模型方法:MacBert MacBert(MLM as correction)减轻了预训练和微调阶段两者之间的差距 模型结构: • 掩码方式的对比: 不用改动现有Bert结构,只改掩码方式: • 使用全词掩码技术以及N-gram掩码 • 其中unigram至4-gram的概率分别为40%、30%、 20%、10% • 对输入序列总长度15%的token进行掩码: • 80%的情况下会替换为相似词 • 10%的情况下会替换为随机词 • 10%则不进行任何替换(负样本) • 相似词mask优于部分mask (bert) MSRA 中文命名实体识别: • 全部mask和部分mask,下 游任务性能下降明显 2. 效果: • 1. BERT f1 = 94.59% MacBERT f1 = 95.20% pycorrector MacBert纠错:P:63.64% R:63.64%
21. 模型方法:ERNIE-CSC 针对中文纠错:构建预训练语言模型MLM-phonetics和微调下游纠错任务 Correcting Chinese Spelling Errors with Phonetic Pre-training ACL-IJCNLP 2021 百度 错误检测: 错误纠正: • 输入:单词嵌入+拼音嵌入 • 错误纠正公式: Jointly Fine-tuning: • 联合建模的方式:
22. 模型方法:ERNIE-CSC 针对中文纠错:构建预训练语言模型MLM-phonetics和微调下游纠错任务 Pre-training MLM-phonetics(加入语音信息的Mask语言模型): 模型效果: Taskflow一键预测: 项目地址:https://github.com/PaddlePaddle/PaddleNLP/tree/develop/examples/text_correction/ernie-csc
23. 模型方法:PLOME 针对中文纠错:构建预训练语言模型PLOME和微调下游纠错任务 Paper:PLOME: Pre-training with Misspelled Knowledge for Chinese Spelling Correction ACL 2021 腾讯 PLOME任务: 字符预测任务Loss: 拼音预测任务Loss: 总体Loss: 效果: 项目地址:https://github.com/liushulinle/PLOME Mask策略:
24. 模型方法:总结 端到端纠错模型 序列标注 建模 copy • 预测三种编辑操作:分别是保持、删词、加词 • 使用迭代序列标注方法预测token级别的编辑操作 • source和target之间有很大的交集,借鉴copy机制,基于去噪自编码预训练,然后引入序列标注和句子级别 copy做多任务 • 生成模型 解码 训练 An Empirical Study of Incorporating Pseudo Data into Grammatical Error Correction EMNLP 2019 seq2seq大部分都在copy,效率可优化,先用序列标注01二分类来识别错误spans,再用seq2seq模型纠 Improving the Efficiency of Grammatical Error Correction with Erroneous Span Detection and Correction EMNLP2020 • 句子有多个错误,一次无法全部改正,使用迭代解码策略,一直解码到无需纠正 • 正确句子不唯一,利用局部beam search增强多样性 • 直接用bert进行encoder初始化做纠错会破坏预训练的表示,训练样本越多,破坏越大,导致灾难遗忘 • 先用纠错语料finetune bert模型,再用bert输出为seq2seq的特征 • 每轮迭代动态随机增加噪声padding、词替换 Encoder-Decoder Models Can Benefit from Pre-trained Masked Language Models in Grammatical Error Correction. ACL2020
25. 工业界方法:百度中文纠错 由于端到端系统的不可控性,工业界大多采用分阶段的纠错架构,错误检测,候选召回,候选排序 三步 Pipeline: 错误检测 • transformer/lstm+CRF 序列标注模型 候选召回 • 检测句子中错误位置和错误类型 • 模型输入层引入多种特征:词法句法分 析,字词多粒度特征 • 离线候选挖掘,利用大规模的错误对齐 纠错排序 • deep&wide,deep结合当前错误点上 语料,通过对齐模型,得到字、词、短 下文表示,wide部分基于形音、词法、 语级混淆矩阵 语义、用户行为等特征学习原词与候选 在线候选预排序,召回大量候选,结合 词的多维度距离表示 语言模型和混淆矩阵特征对候选粗筛 • 通过 GBDT&LR 进行排序
26. 工业界方法:平安寿险纠错 分阶段的纠错架构,方便扩展和领域迁移,子模块可插拔 参考:平安寿险PAI公众号文章
27. 工业界方法:总结 Pipeline纠错模块 错误检测 候选召回 纠错排序 • 混淆集+Ngram ppl • HMM、CRF • 序列标注+多特征(LSTM+Transformer) • Bert检测 • 搜索es、solr + 业务实体词 • 生成模型 seq2seq • 混淆集 • 音似、形似召回: • 字形、短语、词、编辑距离、公共子序列、公共子串 • 拼音、模糊音、简写拼音、乱序拼音、声母、韵母、近似字、方言 • 实体别名 • wide&deep、gbdt、fm • 特征:音似、形似、语义等相似度、用户行为,语言模型ppl,bert语义特征,PMI
28. QA

Accueil - Wiki
Copyright © 2011-2024 iteam. Current version is 2.137.1. UTC+08:00, 2024-11-16 19:49
浙ICP备14020137号-1 $Carte des visiteurs$