拼写纠正系列

NLP 中文拼写检测实现思路

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

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

NLP 中文拼写检测纠正 Paper

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

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

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

NLP 开源项目

nlp-hanzi-similar 汉字相似度

word-checker 中英文拼写检测

pinyin 汉字转拼音

opencc4j 繁简体转换

sensitive-word 敏感词

前言

大家好,我是老马。

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

摘要

本文介绍了NLPTEA 2020中文语法错误诊断(CGED)共享任务,该任务旨在识别学习中文作为外语的学生在书写中出现的语法错误类型、错误发生的范围以及推荐的纠正措施。

我们描述了任务定义、数据准备、性能评估指标以及评估结果。在注册参加该共享任务的30支队伍中,17支队伍开发了系统并提交了总共43个实验结果。

系统的表现取得了显著进展,检测层面的F1得分达到了91%,位置层面的得分为40%,纠正层面的得分为28%。

所有带有标准答案的数据集和评分脚本都已公开,供研究人员使用。

1 引言

自动化语法检查在英语作为外语的学习者中已取得显著进展。

帮助我们的学习者(HOO)是一系列纠正文本错误的共享任务(Dale 和 Kilgarriff,2011;Dale 等,2012)。

2013年和2014年的CoNLL共享任务集中于语法错误修正,增加了教育应用研究在自然语言处理(NLP)社区中的可见度(Ng 等,2013;2014)。

这些学习技术大多集中在英语作为外语(EFL)学习者上,而相对较少有语法检查应用程序是为了支持中文作为外语(CFL)学习者开发的。

现有的一些应用程序使用了多种技术,例如统计学习(Chang 等,2012;Wu 等,2010;Yu 和 Chen,2012)、基于规则的分析(Lee 等,2013)、神经网络建模(Zheng 等,2016;Fu 等,2018)和混合方法(Lee 等,2014;Zhou 等,2017)。

为了应对CFL学习者数据在机器学习和语言学分析中的有限可用性,ICCE-2014关于教育应用的自然语言处理技术(NLP-TEA)研讨会组织了一个针对CFL语法错误诊断的共享任务(Yu 等,2014)。

该共享任务的第二版本在NLP-TEA与ACL-IJCNLP-2015(Lee 等,2015)和COLING-2016(Lee 等,2016)同时举办。

从那时起,它的名称被确定为中文语法错误诊断(CGED)。

作为IJCNLP 2017的一部分,该共享任务再次组织(Rao 等,2017)。

在与ACL 2018的NLP-TEA研讨会联合举办时,CGED再次被组织(Rao 等,2018)。

这些共享任务的主要目的是提供一个共同的设置,使得使用不同语言因素和计算技术的方法研究者能够比较他们的结果。这种技术评估使得研究人员能够交换经验,推动该领域的发展,最终为这一共享任务开发出最优的解决方案。

本文其余部分组织如下:第2节详细描述任务,第3节介绍构建的数据集,第4节提出评估指标,第5节报告参与者方法的结果,最后在第6节得出结论。

2 任务描述

本共享任务的目标是开发自然语言处理(NLP)技术,自动诊断(并进一步修正)中文语法错误,这些错误出现在中文作为外语(CFL)学习者写作的句子中。

此类错误定义为PADS:冗余词(用大写字母“R”表示)、缺失词(“M”)、词语选择错误(“S”)和词语顺序错误(“W”)。

输入句子可能包含一个或多个此类错误。

开发的系统应指示给定单元(包含1至5个句子)中嵌入了哪些错误类型以及错误出现的位置。

每个输入单元都有一个唯一的编号“sid”。如果输入没有语法错误,系统应返回:“sid, correct”。如果输入单元包含语法错误,则输出格式应包括四个项目:“sid, start_off, end_off, error_type”,其中start_off和end_off分别表示语法错误发生的起始和结束字符的位置,error_type应为定义的错误之一:“R”、“M”、“S”或“W”。每个字符或标点符号占用一个位置进行计数。

示例句子及相应注释如表1所示。今年,我们只有一个HSK的评测任务轨道。

表1:示例句子及相应注释

汉语水平考试(HSK)

示例 1
输入: (sid=00038800481) 我根本不能了解这妇女辞职回家的现象。在这个时代,为什么放弃自己的工作,就回家当家庭主妇?
输出:
00038800481, 6, 7, S
00038800481, 8, 8, R
(注释:“了解”应改为“理解”。另外,“这”是冗余词。)

示例 2
输入: (sid=00038800464) 我真不明白。她们可能是追求一些前代的浪漫。
输出:
00038800464, correct

示例 3
输入: (sid=00038801261) 人战胜了饥饿,才努力为了下一代作更好的、更健康的东西。
输出:
00038801261, 9, 9, M
00038801261, 16, 16, S
(注释:“能”缺失,单词“作”应改为“做”。正确句子应为“才能努力为了下一代做更好的”)

示例 4
输入: (sid=00038801320) 饥饿的问题也是应该解决的。世界上每天由于饥饿很多人死亡。
输出:
00038801320, 19, 25, W
(注释:“由于饥饿很多人”应改为“很多人由于饥饿”)

3 数据集

我们共享任务中使用的学习者语料来自汉语水平考试(HSK,Hanyu Shuiping Kaoshi,中文水平测试)的写作部分(Cui 等,2011;Zhang 等,2013)。母语为中文的讲者被训练为手动标注语法错误,并提供与每个错误相应的修正。

然后,数据被分成两个互斥的子集,如下所示:

  1. 训练集:该集合中的所有单元用于训练语法错误诊断系统。每个单元包含1到5个句子,标注了语法错误及其相应的修正。所有单元以SGML格式表示,如表2所示。我们提供了1129个训练单元,总共有2909个语法错误,错误类型包括冗余(678个实例)、缺失(801个)、词语选择(1228个)和词语顺序(201个)。除了提供的数据集,参与的研究团队还被允许使用其他公共数据进行系统开发和实施。使用其他数据的情况应在最终的系统报告中说明。
  • Table 3: The statistics of correct sentences in testing set.
  [plaintext]
1
2
#Units #Correct #Erroneous 1,457 (100%) 307 (21.07%) 1,150 (78.93%)

测试集:该集合由用于评估系统性能的测试单元组成。

表3展示了今年测试集的统计数据。根据HSK写作部分的抽样,超过40%的句子没有错误。

这一情况在测试集中进行了模拟,以测试系统在识别假阳性(false positive)时的表现。错误类型的分布(见表4)与训练集相似。正确句子的比例来自HSK在线动态语料库的样本数据。

表4:测试集中错误类型的分布

错误类型

  • 冗余(#R):769(21.05%)
  • 缺失(#M):864(23.65%)
  • 词语选择错误(#S):1694(46.36%)
  • 词语顺序错误(#W):327(8.95%)
  • 总错误数(#Error):3654(100%)

4 性能评估指标

表5展示了用于评估系统性能的混淆矩阵。

在这个矩阵中,

  • TP(真正,True Positive):被开发的系统正确识别的语法错误的句子数量。
  • FP(假正,False Positive):系统错误地将不存在的语法错误识别为错误的句子数量。
  • TN(真负,True Negative):没有语法错误的句子,系统正确地识别为没有错误的数量。
  • FN(假负,False Negative):包含语法错误的句子,系统错误地识别为正确的数量。

判断正确性的标准在三个层次上进行如下定义:

  1. 检测层次(Detection-level):对给定句子的二元分类(即正确或错误),应与黄金标准完全一致。所有错误类型都被视为错误。
  2. 识别层次(Identification-level):该层次可以视为一个多类分类问题。所有错误类型应被明确识别。正确的情况应与给定错误类型的黄金标准完全一致。
  3. 位置层次(Position-level):除了识别错误类型外,这一层次还判断语法错误的发生范围。也就是说,系统结果应与黄金标准中的四元组完全一致。
  4. 修正层次(Correction-level):自2018年起,修正层次被引入CGED。在选择错误(Selection)和缺失错误(Missing)类型的错误中,要求提供推荐的修正建议。每个S和M类型的错误最多允许提供3个推荐的修正。在这一层次中,修正建议的数量会影响该层次的精度和F1分数。推荐的可信度将被测试。子任务TOP1只计算一个推荐的修正,而TOP3如果在三个推荐修正中有一个命中黄金标准,则计为一次命中,忽略排名。

以下指标在所有层次上通过混淆矩阵进行衡量:

  • 假正率(False Positive Rate) = FP / (FP + TN)
  • 准确率(Accuracy) = (TP + TN) / (TP + FP + TN + FN)
  • 精确率(Precision) = TP / (TP + FP)
  • 召回率(Recall) = TP / (TP + FN)
  • F1分数(F1) = 2 * Precision * Recall / (Precision + Recall)

例如,对于4个测试输入,其黄金标准分别为:“00038800481, 6, 7, S”、“00038800481, 8, 8, R”、“00038800464, correct”、“00038801261, 9, 9, M”、“00038801261, 16, 16, S” 和 “00038801320, 19, 25, W”,系统可能输出结果为:“00038800481, 2, 3, S”,“00038800481, 4, 5, S”,“00038800481, 8, 8, R”,“00038800464, correct”,“00038801261, 9, 9, M”,“00038801261, 16, 19, S”和“00038801320, 19, 25, M”。根据这些输出,评分脚本将得出以下性能:

  • 假正率(FPR) = 0 (=0/1)
  • 检测层次(Detection-level)
    • 精确率 = 1 (=3/3)
    • 召回率 = 1 (=3/3)
    • F1 = 1 (= (2 * 1 * 1) / (1 + 1))
  • 识别层次(Identification-level)
    • 精确率 = 0.8 (=4/5)
    • 召回率 = 0.8 (=4/5)
    • F1 = 0.8 (= (2 * 0.8 * 0.8) / (0.8 + 0.8))
  • 位置层次(Position-level)
    • 精确率 = 0.3333 (=2/6)
    • 召回率 = 0.4 (=2/5)
    • F1 = 0.3636 (= (2 * 0.3333 * 0.4) / (0.3333 + 0.4))
  • Table 2: A training sentence denoted in SGML format.
  [xml]
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
<DOC> <TEXT id="200307109523200140_2_2x3"> 因为养农作物时不用农药的话,生产率较低。那肯定价格要上升,那有钱的人想吃多少,就吃多少。左边的文中已提出了世界上的有几亿人因缺少粮食而挨饿。 </TEXT> <CORRECTION> 因为种植农作物时不用农药的话,生产率较低。那价格肯定要上升,那有钱的人想吃多少,就吃多少。左边的文中已提出了世界上有几亿人因缺少粮食而挨饿。 </CORRECTION> <ERROR start_off="3" end_off="3" type="S"></ERROR> <ERROR start_off="22" end_off="25" type="W"></ERROR> <ERROR start_off="57" end_off="57" type="R"></ERROR> </DOC> <DOC> <TEXT id="200210543634250003_2_1x3"> 对于“安乐死”的看法,向来都是一个极具争议性的题目,因为毕竟每个人对于死亡的观念都不一样,怎样的情况下去判断,也自然产生出很多主观和客观的理论。每个人都有着生存的权利,也代表着每个人都能去决定如何结束自己的生命的权利。在我的个人观点中,如果一个长期受着病魔折磨的人,会是十分痛苦的事,不仅是病人本身,以致病者的家人和朋友,都是一件难受的事。 </TEXT> <CORRECTION> 对于“安乐死”的看法,向来都是一个极具争议性的题目,因为毕竟每个人对于死亡的观念都不一样,无论在怎样的情况下去判断,都自然产生出很多主观和客观的理论。每个人都有着生存的权利,也代表着每个人都能去决定如何结束自己的生命。在我的个人观点中,如果一个长期受着病魔折磨的人活着,会是十分痛苦的事,不仅是病人本身,对于病者的家人和朋友,都是一件难受的事。 </CORRECTION> <ERROR start_off="46" end_off="46" type="M"></ERROR> <ERROR start_off="56" end_off="56" type="S"></ERROR> <ERROR start_off="106" end_off="108" type="R"></ERROR> <ERROR start_off="133" end_off="133" type="M"></ERROR> <ERROR start_off="151" end_off="152" type="S"></ERROR> </DOC>

表5:用于评估的混淆矩阵

混淆矩阵

系统结果 正例(错误) 负例(正确)
黄金标准    
正例(错误) TP(真正,True Positive) FN(假负,False Negative)
负例(正确) FP(假正,False Positive) TN(真负,True Negative)

5 评估结果

表6总结了17个参与团队的提交统计数据。

在官方测试阶段,每个参与团队最多可以提交三次运行结果。

在17个团队中,11个团队在修正层次(Correction-level)提交了测试结果,共计43次提交。

表6:所有参与者的提交统计

参与者(按名称排序)提交统计

参与者 提交次数(#Runs) 修正层次(Correction-level)
Boli 2
CYUT 2 -
DumbCat 1
Flying 3
LDU 3 -
NJU-NLP 3 -
OrangePlus 3
PCJG 3
SDU_MLA 1 -
SPPD 3 -
TextCC-CloudPoineer 3
TMU-NLP 1
UNIPUS-Flaubert 3
XHJZ 3
YD_NLP 3
ZZUNLP-HAN 3
ZZUNLP-YAN 3 -

评估结果(表7到表11)

表7至表11展示了CGED2020在6个不同层次(假正率FPR、检测层级、识别层级、位置层级和修正层级)上的测试结果(两种设置:top1和top3)。

所有最高F1得分的运行结果在表中被突出显示。以下是各个层次的简要总结:

  • 假正率(FPR):CYUT获得了最低的假正率0.0163,约为CGED 2018最低假正率的三分之一。
  • 检测层级:检测层级的评估旨在检测一个句子是否包含语法错误。一个简单的基准方法是报告所有包含错误的测试句子。根据测试数据的分布,基准系统的准确率为0.7893。然而,并非所有系统的表现都超过了基准系统。NJU-NLP提交的系统在检测层级取得了最佳F1得分0.9122,首次突破0.9的标志。
  • 识别层级:在识别层级的评估中,系统需要识别给定单元中的错误类型。Flying和OrangePlus开发的系统在语法错误识别上分别提供了0.6736和0.6726的F1得分,取得了最高成绩。
  • 位置层级:在位置层级评估中,Flying系统的F1得分为0.4041,首次突破0.4大关。OrangePlus则达到了0.394。完美地识别错误类型及其对应位置非常困难,因为错误传播问题较为严重。
  • 修正层级:在修正层级的评估中,UNIPUS-Flaubert在top1设置下达到了最佳F1得分0.1891,而YD_NLP在top3设置下达到了0.1885。

在CGED 2020中,像BERT这样的预训练模型的应用在多个层次上取得了显著的进展。过去在CGED2017和2018中使用的“标准管道”biLSTM+CRF被替代了,许多团队提出了基于预训练模型的混合方法。ResNet、图卷积网络(GCN)和数据增强技术首次出现在解决方案中。然而,对于数据构建(包括伪数据生成)和特征选择的重新思考并没有引起参与者的关注。

尽管如此,假正率(FPR)和其他层次的平衡问题没有取得显著进展。混合方法中的粗糙合并策略和生成模型的过度生成可能导致假正率的下降。从组织者的角度来看,一个好的系统应该具备高F1得分和低假正率。总体而言,没有一个提交的系统能够在不同的指标上提供全面的卓越表现,这表明开发有效的语法错误诊断系统,特别是在CFL(中文作为外语)环境下,仍然存在困难。

值得注意的是,在检测层级中,F1得分超过0.9的系统接近实际应用场景的要求。在高度关注的“位置”和“修正”层级,多个团队的表现领先,且与过去的CGED相比,表现出现了新的变化。这一现象非常激动人心,表明该任务的吸引力迅速增加。

Table7. CGED 2020 假正率 (FPR) 结果

以下是CGED 2020中各参与团队在假正率(FPR)方面的测试结果。每个团队提交的多个运行结果按假正率(FPR)从低到高排序:

TEAM Name Run 1 FPR Run 2 FPR Run 3 FPR
CYUT 0.0163 0.0749 0.5472
LDU 0.0423 0.0489 0.0391
SPPD 0.1498 0.1107 -
Flying 0.1010 0.2573 0.4104
TextCC-CloudPoineer 0.2476 - -
DumbCat 0.2052 0.2834 -
TMU-NLP 0.1726 - 0.3257
UNIPUS-Flaubert 0.2508 - -
OrangePlus 0.2443 0.2345 0.2182
ZZUNLP-HAN 0.6645 - -
PCJG 0.5440 0.6775 0.7394
ZZUNLP-YAN 0.8078 - -
SDU_MLA 0.5179 0.7557 0.6938
Boli 0.7590 0.7687 -
NJU-NLP 0.6124 0.7752 0.7068
XHJZ 0.8762 - -
YD_NLP 0.2052 - -

关键观察:

  • 最低假正率CYUT 在运行1中取得了最低的假正率 0.0163,表现非常出色。
  • LDU:在所有三个运行中都表现稳定,FPR都保持在低位(约 0.04 到 0.05)。
  • 较高假正率:像 ZZUNLP-HAN, ZZUNLP-YAN, 和 XHJZ 这样的团队的假正率较高,其中 XHJZ 达到了 0.8762。

该表展示了各团队在假正率(FPR)上的表现差异,团队的目标是在保证高准确度的同时,尽量减少假正率。

Table8. CGED 2020 检测级别(Detection Level)结果

以下是CGED 2020中各参与团队在检测级别(Detection Level)上按精准率(Precision)、召回率(Recall)和F1得分的测试结果。

TEAM Name Run 1 Precision Run 1 Recall Run 1 F1 Run 2 Precision Run 2 Recall Run 2 F1 Run 3 Precision Run 3 Recall Run 3 F1
Boli 0.8149 0.8922 0.8518 0.8140 0.8983 0.8541 - - -
SPPD 0.9541 0.8313 0.8885 0.9649 0.8139 0.8830 - - -
CYUT 0.9875 0.3443 0.5106 0.8117 0.6296 0.7091 - - -
TextCC-CloudPoineer 0.9265 0.7565 0.8329 - - - - - -
DumbCat 0.9078 0.5391 0.6765 0.9182 0.7809 0.8440 - - -
Flying 0.9649 0.7409 0.8382 0.9273 0.6213 0.6736 0.8784 0.7913 0.8326
TMU-NLP 0.9404 0.7270 0.8200 - - - 0.9101 0.8800 0.8948
UNIPUS-Flaubert 0.9214 0.7852 0.8479 - - - - - -
LDU 0.9851 0.7496 0.8514 0.9828 0.7452 0.8477 0.9851 0.6887 0.8106
XHJZ 0.8062 0.9730 0.8818 - - - - - -
NJU-NLP 0.8565 0.9757 0.9122 0.9303 0.8478 0.8872 0.9739 0.5513 0.7041
YD_NLP 0.9387 0.8383 0.8857 - - - - - -
OrangePlus 0.9282 0.8435 0.8838 0.9319 0.8565 0.8926 0.9357 0.8478 0.8896
ZZUNLP-HAN 0.8262 0.8435 0.8348 - - - - - -
PCJG 0.8225 0.6730 0.7403 0.8145 0.7939 0.8041 0.8698 0.6852 0.7665
ZZUNLP-YAN 0.8118 0.9304 0.8671 - - - - - -
SDU_MLA 0.8138 0.5965 0.6884 0.8182 0.9078 0.8607 0.8254 0.8757 0.8498

关键观察:

  • 最好的检测级别CYUTRun 1 中取得了非常高的精准率(0.9875),但召回率较低(0.3443),F1得分为0.5106。
  • 最佳F1得分NJU-NLPRun 1 中表现出色,F1得分为 0.9122。
  • 较高F1得分的团队
    • SPPDFlying 的 F1得分都很高,分别为 0.88850.8382
    • LDUPCJG 在多个运行中都取得了很高的成绩,尤其是 LDU 的第三个运行,F1得分达到 0.8966

这些结果显示,在检测级别,许多团队通过优化模型获得了较高的精准度和召回率,但仍然面临提升召回率和减少假正率的挑战。

Table 9. CGED 2020 识别级别(Identification Level)结果

以下是CGED 2020中各参与团队在识别级别(Identification Level)上的精准率(Precision)、召回率(Recall)和F1得分的测试结果。

TEAM Name Run 1 Precision Run 1 Recall Run 1 F1 Run 2 Precision Run 2 Recall Run 2 F1 Run 3 Precision Run 3 Recall Run 3 F1
Boli 0.5883 0.5347 0.5602 0.5872 0.5389 0.5620 - - -
SPPD 0.7166 0.5892 0.6467 0.7600 0.5676 0.6499 - - -
CYUT 0.6412 0.1660 0.2637 0.4902 0.2768 0.3538 - - -
TextCC-CloudPoineer 0.7090 0.4982 0.5852 - - - - - -
DumbCat 0.7002 0.3929 0.5034 0.7034 0.5285 0.6035 - - -
Flying 0.7769 0.4738 0.5886 0.7356 0.6213 0.6736 0.7320 0.6011 0.6601
TMU-NLP 0.6980 0.4228 0.5266 - - - 0.7320 0.6011 0.6601
UNIPUS-Flaubert 0.7415 0.4890 0.5893 - - - - - -
LDU 0.5714 0.6897 0.6250 0.7515 0.4710 0.5791 0.6507 0.6420 0.6463
XHJZ 0.5669 0.6714 0.6147 - - - - - -
NJU-NLP 0.5571 0.8432 0.6709 0.7018 0.5779 0.6339 0.7939 0.2975 0.4328
YD_NLP 0.7788 0.5503 0.6449 - - - - - -
OrangePlus 0.7223 0.6121 0.6627 0.7623 0.5678 0.6508 0.7711 0.5577 0.6473
ZZUNLP-HAN 0.5856 0.4416 0.5035 - - - - - -
PCJG 0.6136 0.3154 0.4166 0.5053 0.4127 0.4543 0.6499 0.3687 0.4705
ZZUNLP-YAN 0.5899 0.5126 0.5485 - - - - - -
SDU_MLA 0.5411 0.2813 0.3701 0.6150 0.5076 0.5562 0.6400 0.5214 0.5746

关键观察:

  • 最佳F1得分SPPDRun 2 中取得了最高的F1得分 0.6499,显示出其在识别级别的强劲表现。
  • 高精度和召回率的团队
    • CYUTRun 1 中的精度为 0.6412,但召回率相对较低,导致F1得分仅为 0.2637
    • FlyingRun 1Run 3 分别取得了 0.58860.6601 的F1得分,表现稳定。
  • F1得分在0.6以上的团队
    • DumbCatRun 2 中的F1得分为 0.6035,在各运行中表现良好。
    • YD_NLPOrangePlus 也展示了较为稳定的F1得分,分别为 0.64490.6627

这些结果显示,在识别级别,团队在精准度和召回率之间存在一定的折衷。精确度和召回率的平衡对提升F1得分至关重要。

Table 10. CGED 2020 位置级别(Position Level)结果

以下是CGED 2020中各参与团队在位置级别(Position Level)上的精准率(Precision)、召回率(Recall)和F1得分的测试结果。

TEAM Name Run 1 Precision Run 1 Recall Run 1 F1 Run 2 Precision Run 2 Recall Run 2 F1 Run 3 Precision Run 3 Recall Run 3 F1
Boli 0.2284 0.1719 0.1962 0.2284 0.1755 0.1985 - - -
SPPD 0.3595 0.2671 0.3065 0.4225 0.2822 0.3384 - - -
CYUT 0.0134 0.0033 0.0053 0.0136 0.0068 0.0091 - - -
TextCC-CloudPoineer 0.3612 0.2392 0.2878 - - - - - -
DumbCat 0.3565 0.1828 0.2417 0.3518 0.2518 0.2935 - - -
Flying 0.4970 0.2529 0.3352 0.4320 0.3514 0.3876 0.3577 0.2318 0.2813
TMU-NLP 0.3460 0.1639 0.2224 0.4715 0.3536 0.4041 - - -
UNIPUS-Flaubert 0.4758 0.2343 0.3140 - - - - - -
LDU 0.1397 0.1612 0.1497 0.4606 0.2288 0.3057 0.3147 0.2739 0.2929
XHJZ 0.2368 0.2849 0.2586 - - - - - -
NJU-NLP 0.2097 0.4648 0.2890 0.2610 0.2663 0.2636 0.2993 0.2655 0.2814
YD_NLP 0.5145 0.2965 0.3762 - - - - - -
OrangePlus 0.4366 0.3372 0.3805 0.4822 0.3011 0.3707 0.5011 0.2995 0.3749
ZZUNLP-HAN 0.2502 0.1472 0.1854 - - - - - -
PCJG 0.0885 0.0342 0.0494 0.0996 0.0665 0.0798 0.0670 0.0613 0.0640
ZZUNLP-YAN 0.2900 0.1941 0.2326 - - - - - -
SDU_MLA 0.0708 0.0276 0.0398 0.2874 0.1892 0.2282 0.2783 0.2042 0.2356

关键观察:

  • 最高F1得分FlyingRun 1Run 2 中分别获得了F1得分 0.33520.3876,表现较为出色。
  • 表现最差的团队
    • CYUT 在所有三次运行中,F1得分都非常低(如Run 1为 0.0053),显示出该团队在位置级别上的识别效果不佳。
    • PCJG 的所有运行都显示了较低的精度和召回率,尤其是 Run 1 的F1得分仅为 0.0494,表现较差。
  • F1得分稳定的团队
    • OrangePlus 在各次运行中都有相对稳定的F1得分,Run 10.3805Run 30.3749,显示出较好的稳定性。
    • SPPDRun 2Run 3 的F1得分较高,分别为 0.33840.3876

这些结果表明,在位置级别的任务中,精度、召回率与F1得分之间存在显著的差异,而部分团队的表现稳定较好,特别是在多个运行中都取得了较高的F1得分。

Table 11. CGED 2020 修正级别(Correction Level)结果

以下是CGED 2020中各参与团队在修正级别(Correction Level)上的 TOP 1TOP 3 的精准率(Precision)、召回率(Recall)和F1得分的测试结果。

TEAM Name Run 1 Precision (TOP 1) Run 1 Recall (TOP 1) Run 1 F1 (TOP 1) Run 1 Precision (TOP 3) Run 1 Recall (TOP 3) Run 1 F1 (TOP 3) Run 2 Precision (TOP 1) Run 2 Recall (TOP 1) Run 2 F1 (TOP 1) Run 2 Precision (TOP 3) Run 2 Recall (TOP 3) Run 2 F1 (TOP 3) Run 3 Precision (TOP 1) Run 3 Recall (TOP 1) Run 3 F1 (TOP 1) Run 3 Precision (TOP 3) Run 3 Recall (TOP 3) Run 3 F1 (TOP 3)
Boli 0.079 0.0629 0.0700 0.079 0.0629 0.0700 0.0768 0.0629 0.0692 0.0768 0.0629 0.0692 - - - - - -
DumbCat 0.2502 0.1126 0.1553 0.2502 0.1126 0.1553 - - - - - - - - -      
Flying 0.246 0.1149 0.1567 0.246 0.1149 0.1567 0.2105 0.154 0.1779 0.2105 0.154 0.1779 0.229 0.1575 0.1867 0.229 0.1575 0.1867
OrangePlus 0.1356 0.1095 0.1211 0.0766 0.1837 0.1081 0.1886 0.1247 0.1502 0.0961 0.1767 0.1245 0.178 0.1536 0.1649 0.0934 0.2283 0.1325
PCJG 0.0492 0.0233 0.0307 0.0492 0.0223 0.0307 - - - - - - - - -      
TextCC-CloudPoineer 0.1737 0.1247 0.1452 0.0983 0.1454 0.1173 0.1696 0.1341 0.1498 0.0973 0.156 0.1198 - - - - - -
TMU-NLP 0.2258 0.1032 0.1417 0.2258 0.1032 0.1417 - - - - - - - - -      
UNIPUS-Flaubert 0.2848 0.1415 0.1891 0.2276 0.1595 0.1876 0.2587 0.1372 0.1793 0.1582 0.1646 0.1613 0.2014 0.1603 0.1785 0.1339 0.188 0.1564
XHJZ 0.1293 0.1763 0.1492 0.1293 0.1763 0.1492 0.1465 0.1646 0.1550 0.1465 0.1646 0.1550 0.1764 0.1646 0.1703 0.1764 0.1646 0.1703
YD_NLP 0.3238 0.1290 0.1845 0.2982 0.1372 0.1879 0.3293 0.1263 0.1826 0.3132 0.1337 0.1874 0.3386 0.1259 0.1836 0.3217 0.1333 0.1885
ZZUNLP-HAN 0.0027 0.0012 0.0017 0.0018 0.0020 0.0019 0.0009 0.0004 0.0006 0.0007 0.0008 0.0007 - - - - - -

关键观察:

  • BoliTOP 1TOP 3 的精度、召回率和F1得分较为一致,得分较低,主要集中在 0.0700 左右,表明在修正任务中的表现较为有限。
  • DumbCatFlying 的表现有相似之处, FlyingRun 1Run 2 中精度和召回率较高, Run 3 则表现略有下滑,但整体F1值保持稳定,说明该团队的模型在修正级别任务中具有一定的鲁棒性。
  • OrangePlusRun 1 精度(0.1356)较低,但 Run 2Run 3 中有所改进,尤其在 TOP 3 中表现较好,F1得分分别为 0.15020.1649,显示出较强的修正能力。
  • PCJG 表现最差,其精度和召回率都非常低,特别是 TOP 1TOP 3 的F1得分都接近 0.0307,这可能表明该团队在修正任务中的模型质量不高。
  • ZZUNLP-HANZZUNLP-YAN 都表现得非常弱,精度和召回率均极低,F1得分接近零,表明这些团队在修正任务上几乎没有效果。

这些结果反映出不同团队在修正任务中的差异,一些团队在多个运行中的表现较为稳定,而另一些团队则显得表现较差,尤其是 PCJGZZUNLP-HAN 等。

6 结论

本研究描述了2020年NLP-TEA共享任务,用于中文语法错误诊断,包括任务设计、数据准备、性能指标和评估结果。

无论实际表现如何,所有提交都为开发中文语法错误诊断系统做出了共同努力,会议记录中的个别报告为计算机辅助语言学习(CFL)提供了有价值的见解。

我们希望为此次共享任务收集和标注的数据集能够促进并加速该研究领域的未来发展。

因此,所有带有金标准的数据集和评分脚本都可以在以下网站上公开获取:http://www.cged.science

致谢

我们感谢所有参与者参加我们的共享任务。

Lung-Hao Lee在咨询和投标方面提供了大量帮助。

Xiangyu Chi、Mengyao Suo、Yuhan Wang和Shufan Zhou在数据审查方面做出了重要贡献。

本研究得到了国家语言委员会项目(YB135-90)的支持。

参考资料

https://github.com/wdimmy/Automatic-Corpus-Generation/blob/master/README.md