【论文笔记】MDCSpell: A Multi-task Detector-Corrector Framework for Chinese Spelling Correction
文章目录
- 论文内容
- 论文思路
- 模型架构
- 损失函数
- 训练细节
- 实验结果
- 个人总结
论文复现 : https://blog.csdn.net/zhaohongfei_358/article/details/127035600
论文内容
论文地址: https://aclanthology.org/2022.findings-acl.98/
论文年份:2022
作者基于Transformer和BERT设计了一个多任务的网络来进行CSC(Chinese Spell Checking)任务(中文拼写纠错)。多任务分别是找出哪个字是错的和对错字进行纠正。
论文思路
作者对之前的模型进行了改进,其中(a)
, (b)
是之前的模型,(c)
是作者提出的模型
(a)
: 直接使用一个"Correction Module"来进行错字修正,input为包含错字的token序列,output就是把所有的错字改成正确的,对于那些原本正确就重新输出即可。例如:input为基尼太美
,output则为鸡你太美
。典型的方法有BERT(b)
:对Input通过一个Detection Module
来预测一下哪些是错字,然后对错字进行mask得到masked Input,然后再送给“Correction Module”进行预测。典型的方法有Softed-mask BERT。 例如:input为基尼太美
,Masked Input为[MASK][MASK]太美
,output为鸡你太美
。(c)
:作者提出的方法。Input还是直接送给Correction Module,但另一方面Input还送给Detection Module
,用Detection Module
输出的向量和Correction Module
输出的向量进行融合,然后再去做预测。(c)
比(b)
好的点主要有:①保留了错字的信息,这样可以让Correction Module更准确的预测。例如:input为哎呦,你干麻
,如果使用(b)
,则masked input会变成哎呦,你干[MASK]
,此时就可能会修正成哎呦,你干啥
,因为这也是语义通顺的。但如果给网络的麻
这个错误信息,它就知道应该修正成哎呦,你干嘛
了。 ② 在保留错字信息的同时,还能利用到Detection Module的信息。
模型架构
Correction Network 的数据流向如下:
1.将token序列 [CLS] 遇 到 逆 竟 [SEP]
送给Word Embedding模块进行embeddings,得到向量 { e C L S w , e 1 w , e 2 w , e 3 w , e 4 w , e S E P w } \{e_{CLS}^w, e_1^w, e_2^w, e_3^w, e_4^w,e_{SEP}^w\} {eCLSw,e1w,e2w,e3w,e4w,eSEPw}。
个人认为此时的embedding仅仅是Word Embeding,并不包含Position Embedding和Segment Embedding。
2.之后将 { e C L S w , e 1 w , e 2 w , e 3 w , e 4 w , e S E P w } \{e_{CLS}^w, e_1^w, e_2^w, e_3^w, e_4^w,e_{SEP}^w\} {eCLSw,e1w,e2w,e3w,e4w,eSEPw}向量送入BERT,增加Position Embedding和Segment Embedding,得到 { e C , e 1 , e 2 , e 3 , e 4 , e S } \{e_C, e_1, e_2, e_3, e_4, e_S\} {eC,e1,e2,e3,e4,eS}。
3.在BERT内部,会经历多层的TransformerEncoder,最终的得到输出向量 H c = { h C c , h 1 c , h 2 c , h 3 c , h 4 c , h S c } H^c=\{h_C^c, h_1^c, h_2^c, h_3^c, h_4^c, h_S^c\} Hc={hCc,h1c,h2c,h3c,h4c,hSc}.
4.将BERT的输出 H c H^c Hc 和 隔壁Detection Network输出的 H d H^d Hd 进行融合,得到 H = H d + H c H = H^d+H^c H=Hd+Hc
融合时并不对
[CLS]
和[SEP]
进行融合
5.将 H H H送给全连接层(Dense Layer)做最后的预测。
Correction Network模型细节:
- BERT:作者使用的是具有12层Transformer Block的BERT-base版。
- Dense Layer:Dense Layer的输入通道为词向量维度,输出通道为词典大小。例如:词向量维度为768,词典大小为20000,则Dense Layer则为
nn.Linear(768, 20000)
- Dense Layer的初始化:Dense Layer的权重使用的是Word Embedding的参数。因为word Embedding是将词index转成词向量,所以其参数刚好是Dense Layer的转置,即Word Embedding是
nn.Linear(20000, 768)
,所以作者就是用Word Embedding的转置来初始化Dense Layer的参数。因为这样可以加速训练,且使模型变的稳定。
Detection Network的数据流向如下:
1.输入为使用BERT得到的word Embedding { e 1 w , e 2 w , e 3 w , e 4 w } \{e_1^w, e_2^w, e_3^w, e_4^w\} {e1w,e2w,e3w,e4w}。虽然图里并不包含[CLS]
和[SEP]
的词向量,但个人认为不需要对其特殊处理,因为最后的预测也用不到这两个token.
2.将 { e 1 w , e 2 w , e 3 w , e 4 w } \{e_1^w, e_2^w, e_3^w, e_4^w\} {e1w,e2w,e3w,e4w}增加Position Embedding信息,得到 { e 1 ′ , e 2 ′ , e 3 ′ , e 4 ′ } \{e_1', e_2', e_3', e_4'\} {e1′,e2′,e3′,e4′}
在论文中说Detection Network使用的是向量 { e 1 , e 2 , e 3 , e 4 } \{e_1, e_2, e_3, e_4\} {e1,e2,e3,e4},其是word embedding+position embedding+segment embedding。这与图上是矛盾的,这里以图为准了。
3.将 { e 1 ′ , e 2 ′ , e 3 ′ , e 4 ′ } \{e_1', e_2', e_3', e_4'\} {e1′,e2′,e3′,e4′}向量送入Transformer Block,得到输出向量 H d = { h 1 d , h 2 d , h 3 d , h 4 d } H^d=\{h_1^d, h_2^d, h_3^d, h_4^d\} Hd={h1d,h2d,h3d,h4d}
4.一方面,将输出向量 H d H^d Hd送给隔壁的Correction Network进行融合;另一方面,将 H d H^d Hd送给后续的全连接层(Dense Layer)来判断哪个token是错误的.
Detection Network的细节:
- Transformer Block:Transformer Block是2层的TransformerEncoder。
- Transformer Block参数初始化:Transformer Block参数初始化使用的是BERT的权重。
- Dense Layer:Dense Layer的输入通道为词向量大小,输出通道为1。使用Sigmoid来判别该token为错字的概率。
损失函数
Correction Network和Detection Network使用的都是Cross Entropy。之后进行相加即可:
L = λ L c + ( 1 − λ ) L d L = \lambda L^c + (1-\lambda) L^d L=λLc+(1−λ)Ld
其中 λ ∈ [ 0 , 1 ] \lambda \in [0,1] λ∈[0,1] 。作者通过实验得出 λ = 0.85 \lambda=0.85 λ=0.85 时效果最好。
训练细节
第一步,首先使用 Wang271K(自己造的假数据) 数据集进行训练。batch size为32, learning rate为2e-5
第二步,使用SIGHAN训练集进行fine-tune。 batch size为32,learning rate为1e-5
作者并没有提到使用的是什么Optimizer,但看这个学习率,应该是Adam。
实验结果
个人总结
论文亮点:
- 纠错网络(Correction Network)的预测层加入了Detection Module的Hidden States,保留了原有错字信息的同时,增加了“是否是错字”的信息,让网络可以更好的预测出结果。
- 使用BERT的Word Embedding参数来初始化Correction Network的预测层(全连接层)的参数,使得模型可以更快更稳定的收敛。
- 使用BERT的Transfomer参数来初始化Detection Network的Transformer参数,让Detection Network可以更快更稳定的学习。
- 先使用大数据集对模型进行训练,然后再使用和测试集分布较为一致的训练集进行fine-tune,在fine-tune时,减小学习率。
【论文笔记】MDCSpell: A Multi-task Detector-Corrector Framework for Chinese Spelling Correction相关推荐
- 【论文复现】MDCSpell: A Multi-task Detector-Corrector Framework for Chinese Spelling Correction论文复现
文章目录 本文内容 环境配置 全局变量 模型构建 损失函数 模型训练 构造Dataset 构造Dataloader 训练 模型评估 模型使用 参考文献 代码地址 :https://github.com ...
- 论文笔记:《DeepGBM: A Deep Learning Framework Distilled by GBDT for Online Prediction Tasks》
论文笔记:<DeepGBM: A Deep Learning Framework Distilled by GBDT for Online Prediction Tasks> 摘要 1. ...
- 【论文笔记】Birthday, Name and Bifacial-security Understanding Passwords of Chinese Web Users
title: "[论文笔记]Birthday, Name and Bifacial-security Understanding Passwords of Chinese Web Users ...
- 论文解读:DCSpell:A Detector-Corrector Framework for Chinese Spelling Error Correction
论文解读:DCSpell:A Detector-Corrector Framework for Chinese Spelling Error Correction 简要信息: 序号 属性 值 1 模型 ...
- 论文解读:SpellBERT:A Lightweight Pretrained Model for Chinese Spelling Checking
论文解读:SpellBERT:A Lightweight Pretrained Model for Chinese Spelling Checking 简要信息: 序号 属性 值 1 模型名称 Spe ...
- 论文笔记:ReDet: A Rotation-equivariant Detector for Aerial Object Detection
论文 paper:https://arxiv.org/pdf/2103.07733.pdf code:https://github.com/csuhan/ReDet 概述 之前说过,cv的论文图画的好 ...
- 论文笔记-LSD: a Line Segment Detector线特征提取
备注:关于LSD的原版论文可点击此处,这一篇是原课题组又添加了一点改进的版本. 概要 LSD是一个线性时间的线段检测器,提供亚像素的精确结果.它被设计成可以在任何数字图像上工作而不需要调整参数.它可以 ...
- 论文笔记:Show, Control and Tell:A Framework for Generating Controllable and Grounded Captions
Show, Control and Tell:A Framework for Generating Controllable and Grounded Captions 1.提出问题 现在的图像描述模 ...
- 论文笔记:Show, Edit and Tell : A Framework for Editing Image Captions
背 景: 对现有字幕进行编辑更容易些,编辑字幕不需要关注现有信息,使它只需要专注于固定细节(例 如重复的单词)就可以. 创新点: 本文提出了一种基于现有字幕迭代自适应细化的图像字幕处理方法. 我们的模 ...
最新文章
- 最新Java中Date类型详解
- 10大类、142条数据源,中文NLP数据集线上搜索开放
- React-Native原理及生命周期
- Spring MVC 环境搭建(一)
- 如何安装Linux操作系统
- 市场上血糖仪的测试原理和优缺点评价
- 酒店预订、酒店检索、酒店详情、房间预订、订单管理、会员、优惠券、客房预订、高保真原型、酒店app、需求清单、组件规范、架构图、订单通知、服务通知、收藏、客服、搜索、导航、评价、支付、充值、登录、浏览
- 简单而常用的shell 命令
- RequestUtils : Struts1.3.8 Code Review [2]
- CentOS下使用Varnish为网站加速
- 阿里云搭建MQTT服务器
- 如何在html中引入代码,如何在HTML页面引入javaScript代码
- 排球分组循环交叉编排_学校2020年教职工气排球比赛圆满落幕
- 鹅长微服务发现与治理巨作PolarisMesh实践-上
- CTF writeup 0_IDF实验室
- 华为手机相机:专利曝光装“单反镜头”
- STM32MP157C-DK2->Develop on Arm® Cortex®-A7之 C语言开发LED例程
- nmap学习记录(未完待续)
- C++获取电脑主板唯一标识
- 原谅我一直对B站有误解!