一只小狐狸带你解锁炼丹术&NLP秘籍

作者:孙树兵
学校:河北科技大学
方向:QA/NLU/信息抽取
编辑:小轶

背景

文本纠错(Spelling Error Correction)技术常用于文本的预处理阶段。在搜索引擎、输入法和 OCR 中有着广泛的应用。2020年的文本纠错自然也离不开 BERT 的表演。但原生的 BERT 在一些NLP任务如error detection、NER中表现欠佳,说明预训练阶段的学习目标中对相关模式的捕获非常有限,需要根据任务进行一定改造。在文本纠错任务中亦是如此。

此前文本纠错的SOTA方法采用了基于 Bert 的 seq2seq 结构,直接生成纠错后的字符序列。但是经观察发现,这样的方法总是倾向于不进行任何纠错,错误检测能力很低。一种可能的解释是 Bert 在预训练时只掩码了15%的字符,所以并不能够充分学习所有字符的上下文。

为了提高错误检测能力,本文在SOTA方法的基础上又添加了一个错误检测网络。分错误检测和纠正两步走。先检测每一个字的错误概率,然后根据检测结果将可能的错别字 soft-mask,其实就是错误概率:( 滑动查看完整公式 )






























原字符的











再输给基于Bert的修正网络。这样就强制修正网络学习了错别字的上下文。下面将详细为大家介绍模型的实现细节。

论文链接:https://arxiv.org/pdf/2005.07421.pdf

Arxiv访问慢的小伙伴也可以在订阅号后台回复关键词【0610】下载论文PDF。

模型结构

本文提出的 Soft-Masked Bert 模型可分为三个部分:

  • 检测网络采用 Bi-GRU 预测字符在每个位置出现错误的概率。

  • 用错误概率对 input embedding 做 soft-mask。soft-mask 是传统 hard-mask 的延伸。当错误概率等于1时,前者退化为后者。

  • 修正网络为原文中每个位置挑选替换字。实现过程与单纯使用BERT的SOTA方法相似。

检测网络

检测网络是一个二分类的序列标注模型。模型的输入是character embedding序列































。其中 









表示字符 







的 character embedding(即word embedding, position embedding 和 segment embedding 的总和)。输出是标签序列 

































为第 i 个字符的标签,等于 1 表示字符错误,0 表示正确。我们记 









为 







等于 1 的概率。

本文采用双向 GRU(Bi-GRU) 实现检测网络。字符错误概率 







可以定义为














































其中,

















表示检测网络给出的条件概率,




是 sigmoid 函数,










为 Bi-GRU 的隐状态, 









和 









是参数。隐状态可以定义为:

Soft-Mask

soft-masked embedding 为 input embedding 和 mask embedding 的加权和。权重由该字符的错误概率得到。第i个字符的 soft-masked embedding 可形式化地定义为:
















































是 input embedding,












是 mask embedding。如果错误概率很高,则 








接近 












修正网络

修正网络是一个基于 Bert 的多类别序列标注模型。输入为 soft-masked embedding 序列 


































,输出为替换字符序列 

























BERT 由12个相同的 block 组成。每个 block 包含一次 multi-head self-attention 操作和一个前馈神经网络。我们将BERT最后一层的隐状态序列记为 































。则给定待纠错的字符序列 




,字符 







被替换为候选字符表中第 




个字符的条件概率为








































其中,




和 




为参数;








是 









和 Bert 最后一层隐状态 








通过残差连接后得到的,即 





















。校正网络的最后一层采用 softmax 函数,从候选字符列表中选择概率最大的字符作为字符作为输出。

训练过程

Soft-masked BERT 的训练是 Seq2seq 进行的。训练目标包括错误检测和错误纠正两部分,其目标函数分别为:

总目标函数为两者的线性组合:




























。其中










实验结果

在 SIGHAN 和 News Title 两个数据集上进行了实验。本文的 Soft-Masked BERT方法在两个数据集上基本都取得了最好结果。

总结

本文提出了一种新的神经网络结构Soft-masked Bert,实现中文文本纠错。该结构包含错误检测和修正两个部分。通过Soft-mask技术将检测结果编码到修正网络。实验结果表明该方法的性能优于单纯使用Bert的基线模型。并且这一方法具有较强的普适性,也可用于其他语言的纠错任务。

本文收录于原创专辑:《卖萌屋@自然语言处理》

重磅惊喜:卖萌屋小可爱们苦心经营的 自然语言处理讨论群 成立三群啦!扫描下方二维码,后台回复「入群」即可加入。众多顶会审稿人、大厂研究员、知乎大V以及美丽小姐姐(划掉????‍♀️)等你来撩噢~(手慢无

  • 告别自注意力,谷歌为Transformer打造新内核Synthesizer

  • NLP中的少样本困境问题探究

  • ACL20 | 让笨重的BERT问答匹配模型变快!

  • 7款优秀Vim插件帮你打造完美IDE

  • 卖萌屋原创专辑首发,算法镇魂三部曲!

  • GPT-3诞生,Finetune也不再必要了!NLP领域又一核弹!

夕小瑶的卖萌屋

_

关注&星标小夕,带你解锁AI秘籍

订阅号主页下方「撩一下」有惊喜哦

万能的BERT连文本纠错也不放过相关推荐

  1. 文本纠错与BERT的最新结合,Soft-Masked BERT

    文本纠错相关资料 1.http://www.doc88.com/p-8038708924257.html 2.http://blog.csdn.net/glanderlice/article/deta ...

  2. lstm 文本纠错_中文文本纠错算法错别字纠正的二三事

    本文首先介绍一下: 1)错别字的类型有哪些 2)错别字纠正的关键技术和关键点 3)简要介绍我们项目中采用的文本纠错框架 4)介绍错别字项目的个人体会 5)几个现成的工具包 ,百度nlp平台最近也推出了 ...

  3. lstm 文本纠错_工业界纠错系统

    本篇文章,主要来唠嗑下工业界的纠错系统怎么设计?包括:基于规则的纠错系统(简单的英文纠错.复杂的中文纠错).基于NN的纠错系统.当然,在成熟的工业界纠错系统中,最好是结合规则&&NN方 ...

  4. 文本纠错pycorrector

    原文链接:https://blog.csdn.net/javastart/article/details/107428483 这一段时间再研究身份证和面单识别项目,总发现一些识别准确率问题,在想办法提 ...

  5. 文本纠错--CRASpell模型

    文本纠错–CRASpell模型 CRASpell: A Contextual Typo Robust Approach to Improve Chinese Spelling Correction 这 ...

  6. 中文文本纠错任务简介

    每天给你送来NLP技术干货! 来自:ChallengeHub 最近在梳理中文文本纠错任务,文本根据搜集到的文章整理成的任务简介,在此先感谢大佬们分享的高质量资料. 1 任务简介 中文文本纠错是针对中文 ...

  7. [文本纠错] pycorrector框架训练

    深度模型使用说明 Install 全自动安装:pip install pycorrector 半自动安装: git clone https://github.com/shibing624/pycorr ...

  8. 中文文本纠错神器Pycorrector是如何收获2000 Star的?

    点击左上方蓝字关注我们 计算机行业发展至今,"开源"已逐渐成为技术茁壮成长最肥沃的土壤.而在中国,企业开源热闹非常,个人开源也方兴未艾.尽管运营一个个人开源项目需要耗费大量时间精力 ...

  9. 【技术新趋势】合合信息:文本纠错提升OCR任务准确率的方法

    点击领取AI产品100元体验金,助力开发者高效工作解决文档难题: AI产品专享礼遇 摘要:错字率是OCR任务中的重要指标,文本纠错需要机器具备人类水平相当的语言理解能力.随着人工智能应用的成熟,越来越 ...

最新文章

  1. 《Linux嵌入式实时应用开发实战(原书第3版)》——第2章 安装Linux2.1 发行版...
  2. 某地理老师的暴强言论
  3. linux网络编程-----非阻塞connect
  4. PWN-PRACTICE-BUUCTF-23
  5. 谷歌10月15日发布 Pixel 4;高通以31亿美元收购与TDK公司权益;甲骨文、VMware就云技术及支持达成协议……...
  6. Linux查看进程是否占用,Linux 下查看哪个进程占用swap空间
  7. 如何做一个有品位的程序员
  8. 恒生UFX交易接口基本介绍
  9. 数字IC设计学习笔记(一)——逻辑综合简介
  10. vuejs中用require引入图片,出现ReferenceError: require is not defined
  11. IDEA alt + insert快捷键不能使用
  12. 助力白纸一般的你面试——宏任务微任务
  13. jQuery动画序列
  14. nginx【30】listen指令的用法
  15. AGS 对象池和状态概要
  16. 安全准入考试(配电专业一般工作人员)安规题库(含答案)
  17. Docker安装太慢,使用国内镜像服务快速安装
  18. 从微博搜索相关话题下的所有热门博文链接
  19. 分享一个超好用的项目进度模板(包括计划进度与实际进度对比甘特图)
  20. 数据库调优的方法有那些

热门文章

  1. java微信学习 接入
  2. MyEclipse中代码提醒功能
  3. C++ 0x 使用可变参数模板类 实现 C# 的委托机制
  4. JSON数据格式以及与后台交互数据转换实例
  5. 测试工具的选择和使用
  6. #define va_arg(AP, TYPE)
  7. 少写点if-else吧,它的效率有多低你知道吗?
  8. win10系统的服务器在哪里设置密码,window10怎么设置密码
  9. c++ doxygen 注释规范_利用Doxygen给C程序生成注释文档
  10. python self 序列_python中序列化对象