引言我之前参加了一个中文文本智能校对大赛,拿了17名,虽然没什么奖金但好歹也是自己solo拿的第一个比较好的名次吧,期间也学到了一些BERT应用的新视角和新的预训练方法,感觉还挺有趣的,所以在这里记录一下这期间学到的知识,分享一下自己的比赛过程 。这个赛题任务大概就是,选择网络文本作为输入,从中检测并纠正错误,实现中文文本校对系统 。即给定一段文本,校对系统从中检测出错误字词、错误类型,并进行纠正 。
任务定义系统/模型的输入为原始序列\(X=(x1,x2,..,xn)\),输出为纠错后的序列 \(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?e_{mask}+(1?p_i)?e_i\)。极端情况下,如果检错网络输出的错误概率是1,那么BERT的输入就是MASK的embedding,如果输出的错误概率是0,那么BERT的输入就是原始Token的embedding 。
模型结果:
文章插图
该结果是句子级别的评价结果,Soft-MASK BERT在两个数据集上均达到了新的SOTA,相比仅使用BERT在F1上有2-3%的提升 。
该模型处理错误的情况,主要有以下缺点,模型没有推理能力不能处理逻辑错误(语义错误),模型缺乏世界知识不能处理知识错误(地名等)
用MLM-phonetics纠错2021ACL中文文本纠错论文:Correcting Chinese Spelling Errors with Phonetic Pre-training 论文笔记 - 知乎 (zhihu.com)
论文地址: paper
作者在论文中对比了MLM-base和MLM-phonetics的差异:
- MLM-base 遮盖了15%的词进行预测, MLM-phonetics 遮盖了20%的词进行预测 。
- MLM-base 的遮盖策略基于以下3种:[MASK]标记替换(
经验总结扩展阅读
- day01-3-界面显示&用户登录&餐桌状态显示
- 你的哪些骚操作会导致Segmentation Fault😂
- OCI runtime exec failed: exec failed: unable to start container process: exec: "mongo": executable file not found in $PATH: unknown
- pthread_mutex_t & pthread_cond_t 总结
- VLQ & Base64 VLQ 编码方式的原理及代码实现
- MYSQL-->InnoDB引擎底层原理
- StampedLock:一个并发编程中非常重要的票据锁
- Longchamp龙骧饺子包
- <三>从编译器角度理解C++代码编译和链接原理
- <一>关于进程虚拟地址空间区域内存划分和布局