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、spaCy、python-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_parallel:errant_m2和errant_compare。您可以从命令行的任何位置运行它们,而无需调用特定的 python 脚本。
-
errant_parallel这是一个主要的注释命令,它以一个原始文本文件和至少一个并行更正的文本文件作为输入,并输出一个带注释的 M2 文件。默认情况下,假设原始和更正的文本文件是用每行一个句子进行单词标记的。
例子:errant_parallel -orig <orig_file> -cor <cor_file1> [<cor_file2> ...] -out <out_m2> -
errant_m2这是
errant_parallel对 M2 文件而不是并行文本文件进行操作的变体。这使得重新处理现有的 M2 文件变得更加容易。您还必须指定是要使用黄金还是自动编辑;ie-gold只会对现有的编辑进行分类,而-auto将提取和分类自动编辑。在这两种设置中,都会保留未更正的编辑和 noop。
例子:errant_m2 {-auto|-gold} m2_file -out <out_m2> -
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 对象中的最佳对齐中提取编辑。有四种不同的合并策略可用:
- 规则:使用基于规则的合并策略(默认)
- 全拆分:不合并:MSSDI -> M、S、S、D、I
- all-merge:合并相邻的不匹配:MSSDI -> M, SSDI
- all-equal:合并相邻的相同类型的非匹配项:MSSDI -> M, SS, D, I
返回编辑对象的列表。
annotator. 分类(编辑)对编辑进行分类
。在 Edit 对象中设置edit.type属性并返回相同的 Edit 对象。
annotator. annotate (orig, cor, lev=False, merging='rules')
运行完整的注释管道以对齐两个序列并提取和分类编辑。相当于 running annotator.align,annotator.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. 成本矩阵
alignment。op_matrix
对齐产生的代价矩阵和运算矩阵。
alignment. align_seq
两个序列之间的第一个最便宜的比对。
编辑对象
Edit 对象表示两个文本序列之间的转换。
属性
edit. o_start
edit。o_end
edit。o_toks
edit。o_str原始
文本
中的开始和结束偏移量、spacy 标记以及用于编辑的字符串。
edit. c_start
edit。c_end
edit。c_toks
edit。c_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_edits和classify方法。您还需要添加'fr'到支持的语言列表中errant/__init__.py。
接触
如果您有任何问题、建议或错误报告,可以通过以下方式联系作者:
cl.cam.ac.uk 的 christopher d0t bryant
cl.cam.ac.uk 的 mariano d0t felice
项目详情
下载文件
下载适用于您平台的文件。如果您不确定要选择哪个,请了解有关安装包的更多信息。