知行编程网知行编程网  2022-01-18 11:41 知行编程网 隐藏边栏 |   抢沙发  66 
文章评分 0 次,平均分 0.0
万能的BERT连文本纠错也不放过

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

背景

文本纠错(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方法相似。

万能的BERT连文本纠错也不放过

检测网络

检测网络是一个二分类的序列标注模型。模型的输入是character embedding序列。其中  表示字符  的 character embedding(即word embedding, position embedding 和 segment embedding 的总和)。输出是标签序列 。 为第 i 个字符的标签,等于 1 表示字符错误,0 表示正确。我们记  为  等于 1 的概率。

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

其中, 表示检测网络给出的条件概率, 是 sigmoid 函数, 为 Bi-GRU 的隐状态,  和  是参数。隐状态可以定义为:

万能的BERT连文本纠错也不放过

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 进行的。训练目标包括错误检测和错误纠正两部分,其目标函数分别为:

万能的BERT连文本纠错也不放过

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

实验结果

万能的BERT连文本纠错也不放过

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

总结

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

本文为原创文章,版权归所有,欢迎分享本文,转载请保留出处!

知行编程网
知行编程网 关注:1    粉丝:1
这个人很懒,什么都没写

发表评论

表情 格式 链接 私密 签到
扫一扫二维码分享