🚀 优质资源分享 🚀
学习路线指引(点击解锁) | 知识定位 | 人群定位 |
---|---|---|
🧡 Python实战微信订餐小程序 🧡 | 进阶级 | 本课程是python flask+微信小程序的完美结合,从项目搭建到腾讯云部署上线,打造一个全栈订餐系统。 |
💛Python量化交易实战💛 | 入门级 | 手把手带你打造一个易扩展、更安全、效率更高的量化交易系统 |
引言
我上两个月参加了一个中文文本智能校对大赛,拿了17名,虽然没什么奖金但好歹也是自己solo下来的比赛吧,期间也学到了一些BERT应用的新视角和新的预训练方法,感觉还挺有趣的,所以在这里记录一下这期间学到的知识,分享一下自己的比赛过程,方案在此处:https://github.com/qftie/MiduCTC-competition 。这个赛题任务大概就是,选择网络文本作为输入,从中检测并纠正错误,实现中文文本校对系统。即给定一段文本,校对系统从中检测出错误字词、错误类型,并进行纠正。
任务定义
系统/模型的输入为原始序列X=(x1,x2,…,xn)X=(x1,x2,…,xn),输出为纠错后的序列 Y=(y1,y2,…,ym)Y=(y1,y2,…,ym)X可能已经是完全正确的序列,所以X可能与Y相同。系统/模型需要支持多种粒度的序列,包括:字词、短语、句子、短文。
中文错误类型
一般包含三种,从字词到语义错误,难度依次递增
Soft-Masked BERT (ACL2020,字节跳动)
论文:Spelling Error Correction with Soft-Masked BERT
注意该模型只能处理输入序列和输出序列等长度的纠错场景!
**模型简介:**整个模型包括检错网络和改错网路:
- 检错网络是一个简单的Bi-GRU+MLP的网络,输出每个token是错字的概率
- 改错网络是BERT模型,创新点在于,BERT的输入是原始Token的embbeding和 [MASK]的embbeding的加权平均值,权重就是检错网络的概率,这也就是所谓的Soft-MASK,即 ei=pi∗emask+(1−pi)∗eiei=pi∗e_{mask}+(1−p_i)∗e_i 。极端情况下,如果检错网络输出的错误概率是1,那么BERT的输入就是MASK的embedding,如果输出的错误概率是0,那么BERT的输入就是原始Token的embedding。
在训练方式上采用Multi-Task Learning的方式进行,L=λ·Lc+(1−λ)·LdL=λ·L_c+(1−λ)·L_d,这里λ取值为0.8最佳,即更侧重于改错网络(Lc means correction)的学习。
模型结果:
该结果是句子级别的评价结果,Soft-MASK BERT在两个数据集上均达到了新的SOTA,相比仅使用BERT在F1上有2-3%的提升。
该模型处理错误的情况,主要有以下缺点,模型没有推理能力不能处理逻辑错误(语义错误),模型缺乏世界知识不能处理知识错误(地名等)