作者 | 王嘉宁

整理 | NewBeeNLP

大家好,这里是NewBeeNLP。中文拼写纠错在搜索引擎、问答系统中作为入口模块,对其有着至关重要的作用。拼写纠错,即,给定一个自然语言的句子,识别出其中出错的汉字或词语,并对其进行纠正。如下所示,

今天分享来自复旦大学的论文

  • 论文:SpellBERT:A Lightweight Pretrained Model for Chinese Spelling Checking

  • https://aclanthology.org/2021.emnlp-main.287v2.pdf

  • 代码:https://github.com/benbijituo/SpellBERT/

一、动机

  • 中文含有超过3500个词组成的词表,搜索空间太大,且错误分布不均匀;

  • 中文的错误一般包含形似(Graphical)和音似(Phonetic)两种情况,如图所示:

  • 先前的工作关注于confusion set的构建,而confusion set的质量会对纠错效果起到影响;

Confusion set是指混淆集,简单地认为是一个字典,key表示目标字符,value则为一系列与Key存在字形或字音相似的字符集合。例如“自”的混淆集可以是“白”、“曰”等。

  • 本文依然利用视觉和语音方面信息,不同于先前工作,视觉部分,采用部首偏旁信息,语音部分,则将整个pinyin视为整体,而非序列;

二、方法

提出SpellBERT模型,将CSC(Chinese Spelling Check)视为序列标注问题,即输入一个文本序列,输出等长的文本序列。模型如下图所示:

2.1 MLM

backbone采用基于MLM的预训练语言模型(例如BERT)。BERT输入为一个待纠错的文本序列,输出部分是每个token对应的隐状态向量:

其中 表示第 个token的隐状态向量,将其与所有word embedding计算相似度,得到当前token预测的概率分布:

2.2 Visual & Phonetic Fusion

视觉和语音信息是CSC中的关键,而confusion set无法完全包含所有的错误,本部分则探究如何将这视觉和语音方面的信息与word embedding进行融合;

  • Visual errors have similar shapes as correct characters while phonetic errors have similar pronunciation. 中文的拼写错误通常来源于相似字形或相似读音所导致。

  • These models relied on confusion set to filter candidates but the confusion set might be out-of-date or out-of-domain. 现有的工作直接构建固定的混淆集,使得很难确保所有的错误都能被涵盖;

  • Chinese characters can be decomposed into components namely radicals and visual errors often have overlap radicals with the correct character. Pinyin is a sequence of pronunciation descriptions for Chinese characters and phonetic errors often have overlap pinyin.

因此,本文引入图网络实现信息融合,具体地说,采用Relational Graph Convolutional Network(R-GCN)。

(1)图的构建:

  • 对于一个文本,每个汉字(character)、偏旁部首以及pinyin都可以视为一个节点。如果某个偏旁或pinyin属于某个汉字,则它们之间有边相连

  • 如果两个汉字(character)相邻,则二者存在一条边;

  • 另外对于每个汉字,添加自环

因此,整个图存在四种类型的边:

  • 字符与偏胖部首:如果一个字符包含某一个偏旁部首,则之间存在边;

  • 字符与拼音:如果一个字符存在某一个发音,则之间存在边;

  • 相邻字符:如果两个字符在一定窗口内共现,则之间存在边;

  • 自环:每个字符均与自己本身存在环边;

(2)节点初始化:

  • 每个汉字(character)节点,直接使用BERT word embedding;

  • 对于偏旁部首和汉字节点,将所有与之相关的character emebdding进行平均;

(3)迭代表征:

其中  表示汉字 ,  表示与 相邻的所有节点,最终得到的 表示融合pinyin和graphy信息的word embedding。

基于R-GCN的表征,喂入BERT中:

2.3 Enhance Pre-training Tasks for CSC

因为添加了一些新的模块,作者认为需要进行预训练来提高模型的泛化能力。因此新增 radical predictionpinyin prediction 两个预训练任务。

对于构建的图,随机mask掉汉字(character)节点与偏旁部首或pinyin相连的边,然后预测它们之间是否存在边,即相当于reconstruction connection。

Through reconstructing connections, the model can learn a better representation that contains not only contextual information but also visual and phonetic information.

随机挑选15%的character,其中:

  • 10%概率保持不变,预测character、radical和pinyin;

  • 60%被替换为[MASK],与其相连的所有边随机mask80%的边。预测被mask掉的character、radical和pinyin;

  • 30%概率从confusion set中随机采样一个错误的character,同时与其相连的所有边随机mask80%的边,预测被替换的character、radical和pinyin;

因为图中的边没有embedding,因此将radical prediction和pinyin prediction视为token classification任务:

  • 对于某个character,取对应的某个radical和pinyin作为groud truth,并再取其他radical和pinyin作为负样本;

  • radical和pinyin embedding与character的BERT表征后的向量计算相似度。

2.4 Reducing Parameter

作者认为,模型中既包含BERT,又包含GCN,参数量可能会很大,因此提出Reducing操作,即只使用4层的BERT作为backbone。实验也说明只需要4层的backbone就能达到很好效果。

三、实验

backbone:4层BERT

pre-training语料:https://zenodo.org/record/3402023#.YZs2n5BBy3K,随机挑选1M训练,max_len=128,batch_size=1024,lr=5e-5,step=10K,训练2天时间。

fine-tuning

数据集:SIGHAN14、SIGHAN15、OCR
(1)SIGHAN14、SIGHAN15
直接使用https://github.com/ACL2020SpellGCN/SpellGCN/tree/master/data提供的数据,其中:

  • merged:表示SIGHAN13、SIGHAN14和SIGHAN15混合训练集(10K):

  • SIGHAN13、SIGHAN14、SIGHAN15:分别表示测试集

同时获取《A Hybrid Approach to Automatic Corpus Generation for Chinese Spelling Check》
评价脚本:

(2)OCR
  使用《FASPell: A Fast, Adaptable, Simple, Powerful Chinese Spell Checker Based On DAE-Decoder Paradigm》构建的数据集:https://github.com/iqiyi/FASPell,总共4575句子

实验结果:

一起交流

想和你一起学习进步!『NewBeeNLP』目前已经建立了多个不同方向交流群(机器学习 / 深度学习 / 自然语言处理 / 搜索推荐 / 图网络 / 面试交流 / 等),名额有限,赶紧添加下方微信加入一起讨论交流吧!(注意一定o要备注信息才能通过)

SpellBERT:预训练模型与中文拼写纠错相关推荐

  1. 基于 BK 树的中文拼写纠错候选召回

    最近在研究中文拼写纠错,在查阅资料的时候看到了这篇文章<从编辑距离.BK树到文本纠错 - JadePeng - 博客园>,觉得 BK 树挺有意思的,决定深入研究一下,并在其基础上重新整理一 ...

  2. 中文拼写纠错_[NLP]中文拼写检纠错

    一.基于统计语言模型的中文拼写纠错 1.流程图 2.实验结果 局部方法的实验结果: 全局方法的实验结果: 3.初步结论 缺点: a.SLM对训练语料的规模和质量敏感. b.错词检测策略灵活,变化较多. ...

  3. 使用google的bert结合哈工大预训练模型进行中文/英文文本二分类,基于pytorch和transformer

    使用bert的哈工大预训练模型进行中文/英文文本二分类,基于pytorch和transformer 前提 简要介绍 开始 导入必要的包和环境 准备并读取数据 导入模型的tokenizer 对数据进行t ...

  4. 中文拼写纠错_中英文拼写纠错开源框架梳理

    一.中文: 1.Pycorrector:https://github.com/shibing624/pycorrector 当前主流的中文纠错框架,支持规则和端到端模型 2.FASPell:https ...

  5. 中文拼写纠错_58搜索拼写纠错

    在搜索引擎中,用户希望得到和输入查询词相关的并且质量较好的网页或文档.但是往往出于各种原因,用户输入的查询词本身质量不高或是错误的,如果搜索引擎不对这种错误进行修正弥补,会导致召回错误的结果,或者结果 ...

  6. N-LTP:基于预训练模型的中文自然语言处理平台

    2021-05-03 18:12:52 论文名称:N-LTP: A Open-source Neural Chinese Language Technology Platform with Pretr ...

  7. bert中文预训练模型_HFL中文预训练系列模型已接入Transformers平台

    哈工大讯飞联合实验室(HFL)在前期陆续发布了多个中文预训练模型,目前已成为最受欢迎的中文预训练资源之一.为了进一步方便广大用户的使用,借助Transformers平台可以更加便捷地调用已发布的中文预 ...

  8. bert中文预训练模型_[中文医疗预训练模型] MC-BERT

    Conceptualized Representation Learning for Chinese Biomedical Text Mining 作者:Ningyu Zhang, Qianghuai ...

  9. 【NLP】N-LTP:基于预训练模型的中文自然语言处理平台

    论文名称:N-LTP: A Open-source Neural Chinese Language Technology Platform with Pretrained Models 论文作者:车万 ...

最新文章

  1. SringMVC从入门到源码,这一篇就够
  2. [bzoj1061] [NOI2008]志愿者招募
  3. python展示数据库视图_在Django的视图中使用数据库查询的方法
  4. java实用教程——组件及事件处理——布局管理(五种)
  5. 直线的端点画垂线的lisp_【以课说法】线段、射线、直线
  6. DirtyCow漏洞复现(脏牛、大脏牛、Linux、Android、提权)
  7. Hadoop节点热拔插
  8. Object(包装对象)
  9. (103)FPGA面试题-画出程序所描述的电路原理图(一)
  10. Python 2 退休
  11. 如何在SQL Server 2016中使用并行插入以提高查询性能
  12. 开创交互式电脑绘图先河,虚拟现实之父传奇
  13. NEAT(NeuroEvolution of Augmenting Topologies)算法详解与实践(基于NEAT-Python)
  14. java集合 线程安全
  15. 在Spring Boot中使用Spring Security实现权限控制
  16. 很好的c++和Python混合编程文章
  17. 对数幅度谱图像matlab,幅度谱 fft2绘制图像的对数幅度谱,比较图像旋转、平移和缩放后的频谱...
  18. pandas 按列 tolist
  19. 江南大学c语言课程绩点评分,江南大学本科生学分绩点制实施办法.doc
  20. RJ45隔离变压器作用

热门文章

  1. 6、Hello World官网教程(TX2)第一部分
  2. 商家转账到零钱快速开通方法
  3. stm32控制半导体制冷器实现饮水机保温制冷功能
  4. 破解“低代码”的4大误区,拥抱低门槛高效率的软件开发新选择
  5. 数字电子技术《优先编码器74LS148》仿真
  6. centos下申请阿里云泛域名证书并自动更新
  7. markdown左对齐
  8. 建模大佬都不会外传的角色手办制作流程
  9. ApacheCN 深度学习译文集 2020.9
  10. php输出甲子年,甲子年是哪一年?甲子年生人今年多大?