《Spelling Error Correction with Soft-Masked BERT》阅读记录

《Spelling Error Correction with Soft-Masked BERT》

To be published at ACL 20202020.5.15

链接:https://arxiv.org/abs/2005.07421

摘要

彼时CSC的SOTA方法:在语言表示模型BERT的基础上,在句子的每个位置从候选词列表中选择一个字符进行纠正(包括不纠正)。

但这一方法能力不是最强悍的,因为BERT本身没有足够的能力来检测每个位置是否有错误,显然是由于使用掩码语言建模对其进行预训练的方式。

本文工作:提出了一个由错误检测网络基于BERT纠正错误网络的神经网络结构。

  • 二者使用本文所述的Soft-Masking(软遮蔽/软掩码)技术相连

Soft-masked BERT 也可用于其他语言

方法性能优于基线。

结论

提出了一种新的用于拼写错误校正的神经网络结构(主要是CSC上)——Soft-Masked BERT。

  • 检测网络识别给定句子中可能不正确的字符,并对字符进行软屏蔽(soft-mask)
  • 校正网络以软屏蔽字符为输入,对字符进行校正

软掩蔽技术是通用的,并且在其他检测-校正任务中可能有用

在两个数据集上的实验结果表明:软屏蔽BERT明显优于仅利用BERT的现有方法

未来工作

计划将Soft-Masked BERT扩展到其他问题,如语法错误纠正,并探索实现检测网络的其他可能性。

介绍

拼写检查任务

  • 在词级或字符级上,改正文章中的拼写错误 (Yu and Li, 2014; Y u et al., 2014; Zhang et al., 2015; Wang et al., 2018b; Hong et al., 2019; Wang et al., 2019)。

对很多自然语言应用起十分关键的作用,比如

  • 搜索 (Martins and Silva, 2004; Gao et al., 2010)
  • 光学字符识别 (Afliet al., 2016; Wang et al., 2018b)
  • 文章打分 (Burstein and Chodorow, 1999)

这篇文章在字符(character)级别上考虑中文拼写错误问题。

拼写错误纠正的难点

  1. 需要对世界的认识
  2. 一些错误需要推理

拼写错误纠正

  • 采用机器学习和深度学习 (Yu et al., 2014; Tseng et al., 2015; Wang et al., 2018b).

    • Zhang et al. (2015) 提供了一个CSC的统一框架:错误检测、候选词生成、最终候选选择(改错)使用传统机器学习。

    • Wang et al. (2019) 提供带有复制机制的seq2seq模型:输入句→拼写错误被纠正后的新句子

  • 使用BERT(Devlin et al., 2018)语言表示模型 (Hong et al

  • 3
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
自己做自己玩 为了好玩才做 namespace KOF { public partial class Form1 : Form { Int32 num; public Form1() { InitializeComponent(); } public Int32 random() { Random r = new Random(); Int32 d1 = r.Next(50); Int32 d2 = r.Next(50); Int32 d3 = r.Next(50); return (d1 + d2 + d3) / 3; } public String KUSANAGI(Int32 i) { if (i == 50) { return "最终决战奥义“无式”"; } if (i >= 45) { return "秘奥义里百八式·大蛇剃"; } if (i >= 40) { return "四百壹式·罪咏"; } if (i >= 35) { return "贰百拾贰式·琴月阳"; } if (i >= 30) { return "七拾七式·独乐屠"; } if (i >= 25) { return "百式·鬼烧"; } if (i >= 20) { return "百拾四式·荒咬"; } if (i >= 15) { return "重拳,重脚"; } if (i >= 10) { return "轻脚,轻拳"; } if (i > 0) { return "八神庵防住了你的招式!"; } else { return "八神庵完美的闪开你的招式!"; } } public String YAGAMI(Int32 i) { if (i == 50) { return "*禁千二百十一式·八稚女: ……哭吧,叫吧,然后就死吧! "; } if (i >= 45) { return "*里百八式·八酒杯: ……每逢看到月亮就会想起我!"; } if (i >= 40) { return "百二十七式·葵花"; } if (i >= 35) { return "二百十二式·琴月阴"; } if (i >= 30) { return "屑风"; } if (i >= 25) { return "百式·鬼燃烧"; } if (i >= 20) { return "百八式·暗勾手"; } if (i >= 15) { return "重拳,重脚"; } if (i >= 10) { return "轻脚,轻拳"; } if (i > 0) { return "草剃京防住了你的招式!"; } else { return "草剃京完美的闪开你的招式!"; } } private void button1_Click(object sender, EventArgs e) { if (Convert.ToInt32(label2.Text) != 0 && Convert.ToInt32(label1.Text) != 0) { if (num == 0) { Int32 r = random(); Int32 l2 = Convert.ToInt32(label2.Text) - r * 10; if (l2 < 0) { progressBar2.Value = 0; label2.Text = Convert.ToString(0); label4.Text = YAGAMI(r); button2.Visible = true; button2.Text = ("八神庵 WIN!"); } else { progressBar2.Value = l2; label2.Text = Convert.ToString(l2); label4.Text = YAGAMI(r); } num++; label5.Text = ""; } else { label5.Text = ("轮到草剃京出手了!"); } } else { MessageBox.Show("已经分出胜负!请进行下一场的比试吧。"); } } private void button3_Click(object sender, EventArgs e) { if (Convert.ToInt32(label2.Text) != 0 && Convert.ToInt32(label1.Text) != 0) { if (num == 1) { Int32 r = random(); Int32 l1 = Convert.ToInt32(label1.Text) - r * 10; if (l1 < 0) { progressBar1.Value = 0; label1.Text = Convert.ToString(0); label4.Text = KUSANAGI(r); button2.Visible = true; button2.Text = ("草剃京 WIN!"); } else { progressBar1.Value = l1; label1.Text = Convert.ToString(l1); label4.Text = KUSANAGI(r); } num--; label5.Text = ""; } else { label5.Text = ("轮到八神庵出手了!"); } } else { MessageBox.Show("已经分出胜负!请进行下一场的比试吧。"); } } private void button2_Click(object sender, EventArgs e) { progressBar1.Value = 1000; progressBar2.Value = 1000; label1.Text = Convert.ToString(1000); label2.Text = Convert.ToString(1000); button1.Visible = true; button2.Visible = false; button3.Visible = true; label4.Visible = true; label4.Text = "go!go!go!"; Random r1 = new Random(); num = (Int32)Math.Round(r1.NextDouble()); if (num == 1) { label5.Text = ("草剃京抢占了先机!"); } else { label5.Text = ("八神庵抢占了先机!"); } } } }

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值