Skip to main content

ERRor 注释工具包 (ERRANT)。自动提取和分类并行句子中的编辑。

项目描述

错误 v2.3.3

此存储库包含语法错误或注释工具包 (ERRANT),如下所述:

克里斯托弗·布莱恩特、马里亚诺·费利斯和泰德·布里斯科。2017.语法错误纠正的错误类型的自动注释和评估。在计算语言学协会第 55 届年会论文集(第 1 卷:长论文)。加拿大温哥华。

马里亚诺·费利斯、克里斯托弗·布莱恩特和泰德·布里斯科。2016.使用语言增强对齐自动提取 ESL 句子中的学习者错误。在 COLING 2016 论文集上,第 26 届计算语言学国际会议:技术论文。日本大阪。

如果您使用此代码,请引用上述论文。更多关于 ERRANT 的信息可以在这里找到。尤其是关于错误类型的定义,请参见第 5 章。

概述

ERRANT 的主要目的是用错误类型信息自动注释平行的英语句子。具体来说,给定一个原始和更正的句子对,ERRANT 将提取将前者转换为后者的编辑,并根据基于规则的错误类型框架对它们进行分类。这可用于标准化并行数据集或促进详细的错误类型评估。带注释的输出文件为 M2 格式,并提供了评估脚本。

例子:

原文:这是语法句。
更正:这是一个语法句子。
输出 M2 :
S 这是语法句子。
A 1 2|||R:动词:SVA|||是|||必需|||-无-|||0
A 2 2|||M:DET|||a|||必需|||- NONE-|||0
A 2 3|||R:SPELL|||语法|||必填|||-NONE-|||0
A -1 -1|||noop|||-NONE-|| |必填|||-无-|||1

在 M2 格式中,以 S 开头的行表示原始句子,而以 A 开头的行表示编辑注释。每个编辑行由编辑的开始和结束标记偏移量、错误类型和标记化的更正字符串组成。出于历史原因,包含了接下来的两个字段(请参阅 CoNLL-2014 共享任务),而最后一个字段是注释者 ID。

“noop”编辑是一种特殊类型的编辑,它明确表示注释者/系统未对原始句子进行任何更改。如果只有一个注释者,则 noop 编辑是可选的,否则只要 n 个注释者中至少有 1 个认为原始句子是正确的,则应包含 noop 编辑。这是在组合单个 M2 文件时需要注意的事情,因为缺少 noops 会影响评估。

安装

点安装

安装 ERRANT 及其依赖项的最简单方法是使用pip. 我们还建议将其安装在干净的虚拟环境中(例如使用venv)。最新版本的 ERRANT 仅支持 Python >= 3.6。

python3 -m venv errant_env
source errant_env/bin/activate
pip3 install -U pip setuptools wheel
pip3 install errant
python3 -m spacy download en

errant_env这将创建并激活在当前目录中调用的新 python3 环境。pip然后将更新一些设置工具并在此环境中安装 ERRANT、spaCypython-Levenshtein和 spaCy 的默认英文模型。您可以随时通过运行来停用环境deactivate,但必须记住在您想使用 ERRANT 时再次激活它。

错误和空洞

ERRANT 最初设计为与 spaCy v1.9.0 一起使用,并且在此版本中效果最佳。然而,SpaCy v1.9.0 不适用于 Python >= 3.7,因此我们被迫更新 ERRANT 以与 spaCy 2 兼容。由于 spaCy 2 使用神经系统来以速度换取准确性,这意味着 ERRANT v2.2 是~比 ERRANT v2.1慢 4 倍。我们还没有将 ERRANT 扩展到与 spaCy 3 一起工作,但初步测试表明 ERRANT 会变得更慢。

因此,如果速度是优先考虑的并且您可以使用 Python < 3.7,我们推荐 ERRANT v2.1.0。

pip3 install errant==2.1.0

BEA-2019 共享任务

ERRANT v2.0.0 旨在与BEA-2019 Shared Task完全兼容。如果您想直接与共享任务中的结果进行比较,则应确保安装 ERRANT v2.0.0,因为较新的版本可能会产生略有不同的分数。您还可以使用Codalab对共享任务数据集进行匿名评估。错误 v2.0.0 与 Python >= 3.7 不兼容。

pip3 install errant==2.0.0

源安装

如果您更喜欢从源代码安装 ERRANT,则可以改为运行以下命令:

git clone https://github.com/chrisjbryant/errant.git
cd errant
python3 -m venv errant_env
source errant_env/bin/activate
pip3 install -U pip setuptools wheel
pip3 install -e .
python3 -m spacy download en

这会将 github ERRANT 源代码克隆到当前目录,在其中构建并激活 python 环境,然后安装 ERRANT 及其所有依赖项。如果您想修改 ERRANT 代码,这是推荐的安装方式。

用法

命令行界面

ERRANT 提供了三个主要命令errant_parallelerrant_m2errant_compare。您可以从命令行的任何位置运行它们,而无需调用特定的 python 脚本。

  1. errant_parallel

    这是一个主要的注释命令,它以一个原始文本文件和至少一个并行更正的文本文件作为输入,并输出一个带注释的 M2 文件。默认情况下,假设原始和更正的文本文件是用每行一个句子进行单词标记的。
    例子:

    errant_parallel -orig <orig_file> -cor <cor_file1> [<cor_file2> ...] -out <out_m2>
    
  2. errant_m2

    这是errant_parallel对 M2 文件而不是并行文本文件进行操作的变体。这使得重新处理现有的 M2 文件变得更加容易。您还必须指定是要使用黄金还是自动编辑;ie-gold只会对现有的编辑进行分类,而-auto将提取和分类自动编辑。在这两种设置中,都会保留未更正的编辑和 noop。
    例子:

    errant_m2 {-auto|-gold} m2_file -out <out_m2>
    
  3. errant_compare

    这是将假设 M2 文件与参考 M2 文件进行比较的评估命令。默认行为根据基于跨度的校正对假设进行整体评估。该-cat {1,2,3}标志可用于在增加的粒度级别上评估错误类型,而-dsor-dt标志可用于评估基于跨度或基于令牌的检测(即忽略更正)。所有分数都以精度、召回率和 F 分数(默认值:F0.5)表示,并且还显示了真阳性 (TP)、假阳性 (FP) 和假阴性 (FN) 的计数。
    例子:

    errant_compare -hyp <hyp_m2> -ref <ref_m2> 
    errant_compare -hyp <hyp_m2> -ref <ref_m2> -cat {1,2,3}
    errant_compare -hyp <hyp_m2> -ref <ref_m2> -ds
    errant_compare -hyp <hyp_m2> -ref <ref_m2> -ds -cat {1,2,3}
    

所有这些脚本还具有可以使用-h标志显示的其他高级命令行选项。

API

从 v2.0.0 开始,ERRANT 现在还附带一个 API。

快速开始

import errant

annotator = errant.load('en')
orig = annotator.parse('This are gramamtical sentence .')
cor = annotator.parse('This is a grammatical sentence .')
edits = annotator.annotate(orig, cor)
for e in edits:
    print(e.o_start, e.o_end, e.o_str, e.c_start, e.c_end, e.c_str, e.type)

正在加载

errant. load (lang, nlp=None)
创建一个 ERRANT Annotator 对象。该lang参数目前只接受'en'英文,但我们希望将来可以将其扩展到其他语言。nlp如果您已经预加载了 spacy 并且不希望 ERRANT 再次加载它,则可以使用可选参数。

import errant
import spacy

nlp = spacy.load('en')
annotator = errant.load('en', nlp)

注释器对象

Annotator 对象是 ERRANT 的主要接口。

方法

annotator. parse (string, tokenise=False)
Lemmatise,POS 标记,并用 spacy 解析一个文本字符串。设置tokenise为 True 还可以使用 spacy 进行单词标记。返回一个 spacy Doc 对象。

annotator. align (orig, cor, lev=False)
对齐经过 spacy 解析的原始文本和更正文本。默认使用语言增强的 Damerau-Levenshtein 对齐方式,但该lev标志可用于标准 Levenshtein 对齐方式。返回一个对齐对象。

annotator. merge (alignment, merging='rules')
从 Alignment 对象中的最佳对齐中提取编辑。有四种不同的合并策略可用:

  1. 规则:使用基于规则的合并策略(默认)
  2. 全拆分:不合并:MSSDI -> M、S、S、D、I
  3. all-merge:合并相邻的不匹配:MSSDI -> M, SSDI
  4. all-equal:合并相邻的相同类型的非匹配项:MSSDI -> M, SS, D, I

返回编辑对象的列表。

annotator. 分类(编辑)对编辑进行分类
。在 Edit 对象中设置edit.type属性并返回相同的 Edit 对象。

annotator. annotate (orig, cor, lev=False, merging='rules')
运行完整的注释管道以对齐两个序列并提取和分类编辑。相当于 running annotator.alignannotator.merge并按annotator.classify顺序。返回编辑对象的列表。

import errant

annotator = errant.load('en')
orig = annotator.parse('This are gramamtical sentence .')
cor = annotator.parse('This is a grammatical sentence .')
alignment = annotator.align(orig, cor)
edits = annotator.merge(alignment)
for e in edits:
    e = annotator.classify(e)

annotator. import_edit (orig, cor, edit, min=True, old_cat=False)
从列表中加载 Edit 对象。orig并且cor必须是经过空间解析的 Doc 对象,并且编辑必须是以下形式:[o_start, o_end, c_start, c_end(, type)]. 这些值必须是与原始和更正 Doc 对象中的标记开始和结束偏移相对应的整数。该type值是一个可选字符串,表示编辑的错误类型(如果已知)。设置min为 True 以最小化编辑(例如 [ab -> ac] = [b -> c]),old_cat设置为 True 以保留旧的错误类型类别(即关闭分类器)。

import errant

annotator = errant.load('en')
orig = annotator.parse('This are gramamtical sentence .')
cor = annotator.parse('This is a grammatical sentence .')
edit = [1, 2, 1, 2, 'SVA'] # are -> is
edit = annotator.import_edit(orig, cor, edit)
print(edit.to_m2())

对齐对象

一个 Alignment 对象是从两个经过空间解析的文本序列创建的。

属性

alignment. 原版
alignment_ cor
经 spacy 解析的原始和更正的文本序列。

alignment. 成本矩阵
alignmentop_matrix
对齐产生的代价矩阵和运算矩阵。

alignment. align_seq
两个序列之间的第一个最便宜的比对。

编辑对象

Edit 对象表示两个文本序列之间的转换。

属性

edit. o_start
edito_end
edito_toks
edito_str原始
文本 中的开始和结束偏移量、spacy 标记以及用于编辑的字符串。

edit. c_start
editc_end
editc_toks
editc_str
开始和结束偏移量、spacy 标记以及用于在更正文本中进行编辑的字符串。

edit. type
错误类型字符串。

方法

edit. to_m2 (id=0)
格式化输出 M2 文件的编辑。id是注释者 ID。

其他语言的开发

如果你想为其他语言开发 ERRANT,你应该模仿errant/en目录结构。例如,ERRANT for French 应该导入一个merge fromerrant.fr.merger和一个classifier from errant.fr.classifier,它们分别具有等价的get_rule_editsclassify方法。您还需要添加'fr'到支持的语言列表中errant/__init__.py

接触

如果您有任何问题、建议或错误报告,可以通过以下方式联系作者:
cl.cam.ac.uk 的 christopher d0t bryant
cl.cam.ac.uk 的 mariano d0t felice

下载文件

下载适用于您平台的文件。如果您不确定要选择哪个,请了解有关安装包的更多信息。

源分布

errant-2.3.3.tar.gz (501.0 kB 查看哈希

已上传 source

内置分布

errant-2.3.3-py3-none-any.whl (499.5 kB 查看哈希

已上传 py3