NLP 中文拼写检测纠正论文-08-Combining ResNet and Transformer

拼写纠正系列

NLP 中文拼写检测实现思路

NLP 中文拼写检测纠正算法整理

NLP 英文拼写算法,如果提升 100W 倍的性能?

NLP 中文拼写检测纠正 Paper

java 实现中英文拼写检查和错误纠正?可我只会写 CRUD 啊!

一个提升英文单词拼写检测性能 1000 倍的算法?

单词拼写纠正-03-leetcode edit-distance 72.力扣编辑距离

NLP 开源项目

nlp-hanzi-similar 汉字相似度

word-checker 中英文拼写检测

pinyin 汉字转拼音

opencc4j 繁简体转换

sensitive-word 敏感词

前言

大家好,我是老马。

下面学习整理一些其他优秀小伙伴的设计、论文和开源实现。

摘要

本文介绍了我们在NLPTEA2020任务——中文语法错误诊断(CGED)中的系统。CGED旨在诊断四种类型的语法错误:缺失词(M)、冗余词(R)、错误选词(S)和词序错乱(W)。

自动化的CGED系统包含两个部分:错误检测和错误修正。

对于错误检测,我们的系统基于多层双向Transformer编码器模型,并将ResNet集成到编码器中以提高性能。我们还探索了从模型库中逐步集成选择,以提高单一模型的表现。

对于错误修正,我们设计了两个模型,分别推荐S类型和M类型错误的修正。在官方评估中,我们的系统在错误检测的识别级别和位置级别获得了最高的F1分数,在修正级别获得了第二高的F1分数。

1 引言

中文通常被认为是最复杂的语言之一。与英语相比,中文没有单复数变化,也没有动词时态变化。

此外,由于中文没有明确的词边界,通常需要在深入分析之前进行分词处理。

这些问题使得中文学习对新学习者来说具有很大的挑战性。近年来,越来越多来自不同语言和知识背景的人开始对学习中文作为第二语言产生兴趣。

为了帮助这些人识别和纠正中文写作中的语法错误,开发一个自动化的中文语法错误诊断(CGED)工具变得非常必要。

为了促进中文学习中自动语法错误诊断技术的发展,2014年起,自然语言处理教育应用技术(NLP-TEA)将CGED作为共享任务之一,提出了多种方法来解决CGED任务。

在这项工作中,我们介绍了我们在NLPTEA-2020 CGED任务中的系统。

在错误检测方面,我们的系统基于多层双向Transformer编码器模型,并将ResNet集成到编码器中以提升性能

我们还探索了从模型库中逐步集成选择,以提高单一模型的表现。

在错误修正方面,我们设计了两个模型,分别针对S类型和M类型错误推荐修正。

更具体地,我们使用RoBERTa(Liu et al., 2019)和n-gram语言模型来修正S类型错误,结合预训练的掩码语言模型和统计语言模型生成M类型错误的可能修正结果

在官方评估中,我们的系统在错误检测的识别级别和位置级别获得了最高的F1分数,在修正级别获得了第二高的F1分数。

本文组织结构如下:第2节简要介绍CGED共享任务,第3节介绍我们的研究方法,第4节展示实验结果,第5节介绍相关工作,最后第6节总结了结论并展望未来工作。

2 中文语法错误诊断

NLPTEA CGED任务的目标是指出中文作为外语学习者写作中的语法错误。

句子中可能包含四种类型的语法错误,包括缺失词(M)、冗余词(R)、选词错误(S)和词序错误(W)。

输入的句子可能包含一种或多种错误。

给定一个句子,系统需要完成以下任务:

(1)判断句子是否正确;

(2)指出句子包含的错误类型;

(3)标明错误的具体位置;

(4)对S类型和M类型错误提供可能的修正。

表1展示了一些典型示例。

T1+F1

3 方法论

3.1 错误检测

我们将错误检测问题视为序列标注问题。具体而言,给定一个句子 ( x ),我们使用BIO编码(Kim 等,2004)生成相应的标签序列 ( y )。然后,我们结合ResNet和Transformer编码器来解决标注问题。

集成ResNet

深度神经网络在每一层学习不同的表示。

例如,Belinkov 等(2017)表明,在机器翻译任务中,网络的低层学习表示单词结构,而高层则更关注单词的意义。

对于强调语法特征的任务(如中文语法错误检测),低层的网络信息被认为非常重要。

在本工作中,我们使用残差学习框架(He 等,2016)将单词嵌入信息与深层信息结合起来。给定序列 ( S = w_0, ..., w_N ) 作为输入,ResBERT的公式如下:

公式(6)表示残差学习框架,其中 ( h_L^i ) 的隐藏输出与输入嵌入一起用于逼近残差函数。然后,我们将 ( h_L^i ) 和 ( R_i ) 的连接结果传递给输出层。

逐步集成选择(Stepwise Ensemble Selection)

我们发现,不同的随机种子和dropout值可能导致每次训练结束时不同的性能。

为了提高性能,我们合并不同模型的结果。我们并不是通过加权平均来合并所有单一模型,而是使用来自模型库的逐步集成选择(Caruana 等,2004)来找到一个子集的模型,该子集在加权平均时能获得最优性能。模型库是通过使用不同的随机种子和dropout值生成的。

基本的集成选择过程如下:

  1. 从空集开始。
  2. 向集成中添加模型库中最大化集成性能的模型,以提高中文语法错误检测指标在验证集上的表现。
  3. 重复步骤2,直到达到固定的迭代次数或所有模型都已使用完。
  4. 返回在验证集上具有最大性能的嵌套集成结果。

在每一步选择最佳模型时,使用的是跨跨度(span-level)的投票机制,具体如下:

  1. 每个单一模型标注的错误文本跨度都会为该跨度投一票(例如,如果某个位置的词“是”被某个模型标记为R类型,那么它就获得一票)。需要注意的是,只有在某个单一模型标记为错误类型的文本跨度才被认为是候选的错误文本。
  2. 如果某个候选错误文本跨度收集到的投票数达到最小阈值(例如30% * 模型子集数量),则该文本被标记为真实错误。

所呈现的简单的前向模型选择过程是有效的,但有时会导致过拟合验证集,从而降低集成在测试集上的表现。为了减少过拟合,我们对选择过程做了三项改进,如Caruana 等(2004)所述:

  • 有替换的选择:如果没有替换地进行模型选择,性能会随着最佳模型的加入而提高,直到达到峰值,然后迅速下降。通过有替换的选择可以大大减少这个问题。有替换的选择允许同一个模型多次加入集成,这样可以通过加权模型来微调集成:被多次加入集成的模型会获得更大的权重。

  • 排序集成初始化:简单的前向模型选择过程从空集开始。前向选择在集成较小的时候容易过拟合。为防止过拟合,我们根据模型的表现对模型库中的模型进行排序,并将最好的 ( N ) 个模型放入集成中。我们设置 ( N = 5 )。

  • 袋装集成选择:随着模型库中模型数量的增加,找到会导致过拟合验证集的模型组合的可能性也增加。袋装方法可以最小化这个问题。我们通过从模型库中随机抽样一部分模型来减少模型的数量,并从该样本中选择模型。如果某个特定组合的 ( M ) 个模型发生过拟合,那么它们出现在随机袋中的概率会小于 ( (1 - p)^M ),其中 ( p ) 是袋中模型的比例。我们使用 ( p = 0.5 ),并进行20次袋装集成选择,以确保最好的模型有多次被选中的机会。最终的集成结果是这20个集成的平均值。

3.2 错误修正

该系统还需要为S型和M型错误推荐修正。

在本工作中,我们设计了两个不同的模型,分别为S型和M型错误推荐修正。下面分别描述这两个模型。

S型修正

对于S型错误的修正,我们主要使用RoBERTa(Liu 等,2019)和n-gram语言模型。

首先,我们对语言模型进行领域适配。我们使用之前比赛的CGED训练集对RoBERTa-wwm进行微调,并将CGED数据与新闻语料结合,训练一个5-gram语言模型。

S型修正包括单字符修正和多字符修正。

对于单字符修正,我们考虑RoBERTa生成的前20个候选结果和L2学习者语料库中最常见的3500个字符作为候选项。

我们根据RoBERTa的预测概率、n-gram语言模型的预测概率、视觉相似性和语音相似性(Hong 等,2019)对候选项进行打分。随后,选择得分最高的字符作为修正结果。

对于多字符修正,我们同样选取RoBERTa在每个位置生成的前20个字符。然后,我们将这些字符组合成词,并保留词汇表中出现的词作为候选项。除了单字符修正时使用的四种特征外,我们还考虑了错误词和候选词之间的Levenshtein距离。

数据统计

错误类型RMSW
训练集52,31211,54813,93123,014
验证集4,8711,0601,2692,156

M型修正

特别地,我们将M型错误的修正视为完形填空任务,并利用预训练的掩码语言模型和统计语言模型的组合来生成可能的修正结果。

给定怀疑为缺失的位置,我们将M型错误的修正过程分为两个步骤:首先提供可能的修正,然后评估并选择最合理的修正。

使用预训练的掩码语言模型时,我们首先通过基于BERT的序列标注模型预测疑似M型错误位置的缺失字符数。

然后,我们在该位置前插入与预测缺失字符数相同数量的[MASK]符号。接着,使用BERT预测每个[MASK]符号最可能的字符,将其作为修正候选项。

使用统计语言模型时,我们准备了一个L2学习者的中文高频词汇表,并将所有可能的中文词汇从该词汇表补充到疑似M型错误位置,生成一系列修正候选项。

为了评估每个候选项的概率,我们使用这些候选项构造修改后的句子,并计算原句和所有修改句子的困惑度(perplexity),困惑度由在L2学习者语料库上预训练的统计语言模型计算。

如果修改句子的困惑度显著低于原句的困惑度(这个阈值由人工设置),我们就将该候选项视为预测的修正结果。

相关工作

研究人员使用了多种不同的方法来研究英语语法错误修正任务,并取得了良好的结果(Ng et al., 2014)。

与英语相比,中文语法错误诊断系统的研究起步较晚,数据集和有效方法较为匮乏。

早期工作:

  • Chen 等人(2013)仍然使用 n-gram 作为主要方法,并通过加入 Web 资源来提高检测性能。
  • Lin 和 Chu(2015)建立了一个基于 n-gram 的评分系统,从而获得了更好的修正选项。

近年来的进展:

  • 随着 NLPTEA CGED 任务的引入,中文语法错误诊断逐渐成为共享任务,提出了许多方法来解决这一任务(Yu 等人,2014;Lee 等人,2015,2016)。

  • Zheng 等人(2016)提出了基于字符嵌入和 bigram 嵌入的 BiLSTM-CRF 模型。

  • Shiue 等人(2017)结合了机器学习和传统的 n-gram 方法,使用 Bi-LSTM 检测错误位置,并加入了额外的语言学信息,如 POSn-gram

  • Li 等人(2017)使用 Bi-LSTM 生成每个字符的概率,并使用两种策略来判断字符是否正确。

  • Liao 等人(2017)使用 LSTM-CRF 模型来检测输出之间的依赖关系,从而更好地检测错误信息。

  • Yang 等人(2017)在 LSTM-CRF 模型中加入了更多的语言学信息,如 POSn-gramPMI 分数和依赖特征。该系统在 CGED2017 任务中达到了最佳的 F1-scores,分别在识别层次和位置层次上表现优异。

  • Fu 等人(2018)在 BiLSTM-CRF 模型中加入了更多特征,如 词汇分割Gaussian ePMIPOSPMI 的结合,并采用了概率集成方法来提高系统性能。该系统在 CGED2018 任务中取得了识别层次和位置层次的最佳 F1-score

结论与未来工作

本文描述了我们在 NLPTEA-2020 CGED 任务中的系统,该系统结合了 ResNetBERT 用于中文语法错误诊断。

我们还设计了两种不同的集成策略,以最大化模型的能力。

性能亮点:

  • 我们的系统在 识别层次位置层次 上取得了最佳的 F1 分数。
  • 我们还在 修正 top1 层次 上取得了第二高的 F1 分数,在 检测层次 上取得了第三高的 F1 分数。

未来工作:

  • 我们计划通过使用更多的训练数据来构建一个更强大的语法错误诊断系统,并尝试通过使用不同的跨领域语料库来提高系统的能力。

致谢

我们感谢 CGED 2020 任务的组织者们为本任务做出的巨大贡献。

我们也感谢匿名评审员提供的有见地的评论和建议。

本工作得到了 中国国家重点研发计划(项目编号 2018YFB1005100)和 国家自然科学基金(项目编号 61976072, 61632011, 61772153)的资助。

参考资料

https://aclanthology.org/2020.nlptea-1.5.pdf

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/66000.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

儿童坐姿矫正器是如何实现语音提示功能?

儿童坐姿不正确,不仅影响他们的体态美观,更关乎其身体健康与成长发育。长期以往,可能会导致脊柱侧弯、近视加深等一系列健康问题。家长应当对此给予足够重视,及时纠正孩子们的坐姿习惯。 为了改善这一状况,可以从这方…

【蓝桥杯——物联网设计与开发】Part1:GPIO

目录 一、GPIO输出——LED (1)资源介绍 🔅原理图 🔅驱动原理 (2)STM32CubeMX 软件配置 (3)代码编写 🟢️main 函数 (4)实验现象 二…

小程序发版后,强制更新为最新版本

为什么要强制更新为最新版本? 在小程序的开发和运营过程中,强制用户更新到最新版本是一项重要的策略,能够有效提升用户体验并保障系统的稳定性与安全性。以下是一些主要原因: 1. 功能兼容 新功能或服务通常需要最新版本的支持&…

Servlet解析

概念 Servlet是运行在服务端的小程序(Server Applet),可以处理客户端的请求并返回响应,主要用于构建动态的Web应用,是SpringMVC的基础。 生命周期 加载和初始化 默认在客户端第一次请求加载到容器中,通过反射实例化…

太速科技-633-4通道2Gsps 14bit AD采集PCie卡

4通道2Gsps 14bit AD采集PCie卡 一、板卡概述 二、性能指标 板卡功能 参数 内容 ADC 芯片型号 AD9689 路数 4路ADC, 采样率 2Gsps 数据位 14bit 数字接口 JESD204B 模拟接口 交流耦合 模拟输入 1V 连接器 6路 SMA 输入阻抗 50Ω 模拟指…

戴尔/Dell 电脑按什么快捷键可以进入 Bios 设置界面?

BIOS(基本输入输出系统)是计算机硬件与操作系统之间的桥梁,它负责初始化和测试系统硬件组件,并加载启动操作系统。在某些情况下,如调整启动顺序、更改系统时间或日期、修改硬件配置等,您可能需要进入BIOS进…

分类模型评估利器-混淆矩阵

相关文章 地理时空动态模拟工具介绍(上) 地理时空动态模拟工具介绍(下)地理时空动态模拟工具的使用方法 前言 混淆矩阵(Confusion Matrix)是机器学习领域中用于评估分类模型性能的一种工具。它通过矩阵的…

贪心算法概述

贪心算法总是作出当前看来最好的选择,是局部最优 可以使用贪心算法的问题一般具有两个重要的性质 贪心选择性质最优子结构性质 贪心选择性质是指所求问题的整体最优解可以通过一系列局部最优的选择来达到 其与动态规划的问题区别在于,动态规划算法通…

Unity-Mirror网络框架-从入门到精通之Basic示例

文章目录 前言Basic示例场景元素预制体元素代码逻辑BasicNetManagerPlayer逻辑SyncVars属性Server逻辑Client逻辑 PlayerUI逻辑 最后 前言 在现代游戏开发中,网络功能日益成为提升游戏体验的关键组成部分。Mirror是一个用于Unity的开源网络框架,专为多人…

wx015基于springboot+vue+uniapp的经济新闻资讯的设计与实现

开发语言:Java框架:springbootuniappJDK版本:JDK1.8服务器:tomcat7数据库:mysql 5.7(一定要5.7版本)数据库工具:Navicat11开发软件:eclipse/myeclipse/ideaMaven包&#…

CSS 中 content换行符实现打点 loading 正在加载中的效果

我们动态加载页面内容的时候,经常会使用“正在加载中…”这几个字,基本上,后面的 3 个点都是静态的。静态的问题在于,如果网络不流畅,加载时间比较长,就会给人有假死的 感觉,但是,如…

ESLint+Prettier的配置

ESLintPrettier的配置 安装插件 ​​​​​​ 在settings.json中写下配置 {// tab自动转换标签"emmet.triggerExpansionOnTab": true,"workbench.colorTheme": "Default Dark","editor.tabSize": 2,"editor.fontSize": …

Windows系统下载、部署Node.js与npm环境的方法

本文介绍在Windows电脑中,下载、安装并配置Node.js环境与npm包管理工具的方法。 Node.js是一个基于Chrome V8引擎的JavaScript运行时环境,其允许开发者使用JavaScript编写命令行工具和服务器端脚本。而npm(Node Package Manager)则…

Ubuntu 24.04 LTS 解决网络连接问题

1. 问题描述 现象:ens33 网络接口无法获取 IPv4 地址,导致网络不可用。初步排查: 运行 ip a,发现 ens33 接口没有分配 IPv4 地址。运行 ping www.baidu.com,提示“网络不可达”。查看 NetworkManager 日志&#xff0c…

Tauri2+Leptos开发桌面应用--Sqlite数据库操作

在之前工作(使用Tauri Leptos开发带系统托盘桌面应用-CSDN博客)的基础上,继续尝试对本地Sqlite数据库进行读、写、删除操作,开发环境还是VS CodeRust-analyzer。 最终程序界面如下: 主要参考文章:Building…

每日一些题

题解开始之前,给大家安利一个上班偷偷学习的好搭档,idea中的插件有一个叫 LeetCode with labuladong,可以在idea中直接刷力扣的题目。 朋友们上班没事的时候,可以偷偷摸几题。看八股的话,可以用面试鸭,也是…

Docker--Docker Container(容器) 之 操作实例

容器的基本操作 容器的操作步骤其实很简单,根据拉取的镜像,进行启动,后可以查看容器,不用时停止容器,删除容器。 下面简单演示操作步骤 1.创建并运行容器 例如,创建一个名为"my-nginx"的交互…

高频 SQL 50 题(基础版)_1068. 产品销售分析 I

销售表 Sales: (sale_id, year) 是销售表 Sales 的主键(具有唯一值的列的组合)。 product_id 是关联到产品表 Product 的外键(reference 列)。 该表的每一行显示 product_id 在某一年的销售情况。 注意: price 表示每…

linux进阶

目录 变量 shell变量 环境变量 预定义变量 位置变量 其他 管道与重定向 管道 重定向 shell脚本 分支结构 循环结构 数组 脚本实例 变量 shell变量 shell变量:shell程序在内存中存储数据的容器 shell变量的设置:colorred 将命令的结果赋值…

“TypeScript版:数据结构与算法-初识算法“

引言 在算法与编程的广阔世界里,总有一些作品以其独特的魅力和卓越的设计脱颖而出,成为我们学习和研究的典范。今天,我非常荣幸地向大家分享一个令人印象深刻的算法——Hello算法。 Hello算法不仅展现了作者深厚的编程功底,更以…