Этот репозиторий содержит грамматическую аннотацию по ошибке инструментарии (ошибочный), описанный в:
Кристофер Брайант, Мариано Феличе и Тед Бриско. 2017. Автоматическая аннотация и оценка типов ошибок для грамматической коррекции ошибок . В материалах 55 -го ежегодного собрания Ассоциации вычислительной лингвистики (том 1: Долгие документы). Ванкувер, Канада.
Мариано Феличе, Кристофер Брайант и Тед Бриско. 2016. Автоматическое извлечение ошибок учащихся в предложениях ESL с использованием лингвистически улучшенных выравниваний . В материалах Coling 2016, 26 -я Международная конференция по вычислительной лингвистике: технические документы. Осака, Япония.
Если вы используете этот код, пожалуйста, укажите приведенные выше статьи. Более подробную информацию о ошибке можно найти здесь. В частности, см. Главу 5 для определений типов ошибок.
Обновление - 22.09.23 : Теперь вы можете попробовать ошибку в нашей онлайн -демонстрации!
Основная цель ошибки - автоматически аннотировать параллельные английские предложения с информацией о типе ошибки. В частности, с учетом исходной и исправленной пары предложений, Errant извлекает изменения, которые преобразуют первое в последнее, и классифицируют их в соответствии с основами на основе платформы типа ошибки. Это может использоваться для стандартизации параллельных наборов данных или облегчения подробной оценки типа ошибки. Аннотированные выходные файлы находятся в формате M2, и предоставляется сценарий оценки.
Оригинал : это грамамтическое предложение.
Исправлено : это грамматическое предложение.
Вывод M2 :
S Это грамамтическое предложение.
A 1 2 ||| r: глагол: SVA |||
A 2 2 ||| M: Det ||| a ||| Требуется ||| -none- ||| 0
A 2 3 ||| r: заклинание ||| Грамматическое |||
A -1 -1 ||| noop ||| -none- ||| требуется ||| -none- ||| 1
В формате M2 линия, которой предшествовала S, обозначает первоначальное предложение, в то время как линия, которой предшествует аннотация редактирования. Каждая линия редактирования состоит из смещения токена начала и конечного токена, типа ошибки и токеновой строки коррекции. Следующие два поля включены по историческим причинам (см. Общую задачу Conll-2014), а последнее поле-идентификатор аннотатора.
Редактирование «NOOP» - это особый вид редактирования, который явно указывает на аннотатор/систему, не внесенный в исходное предложение. Если есть только один аннотатор, редакторы NOOP являются необязательными, в противном случае редактирование NOOP должно быть включено, когда по крайней мере 1 из N Annotators считали, что первоначальное предложение является правильным. Это то, о чем следует знать при сочетании отдельных файлов M2, поскольку отсутствующие NOOP могут повлиять на оценку.
Самый простой способ установить ошибку и его зависимости - это использование pip
. Мы также рекомендуем установить его в чистой виртуальной среде (например, с venv
). Последняя версия ошибки только поддерживает Python> = 3.7.
python3 -m venv errant_env
source errant_env/bin/activate
pip install -U pip setuptools wheel
pip install errant
python3 -m spacy download en_core_web_sm
Это создаст и активирует новую среду Python3, называемую errant_env
в текущем каталоге. Затем pip
обновит некоторые инструменты настройки и установит ошибку, Spacy, Rapidfuzz и английскую модель Spacy по умолчанию в этой среде. Вы можете деактивировать среду в любое время, запустив deactivate
, но должны помнить, чтобы активировать ее снова, когда вы хотите использовать заблуждение.
Ошибочный v2.0.0 был разработан, чтобы быть полностью совместимым с общей задачей BEA-2019. Если вы хотите напрямую сравнить с результатами в общей задаче, вы можете установить ошибочную v2.0.0, так как новые версии могут привести к немного разным оценкам. Вы также можете использовать Codalab для анонимного оценивания в наборах данных общих задач. Ошибочный v2.0.0 не совместим с Python> = 3,7.
pip install errant==2.0.0
Если вы предпочитаете устанавливать ошибку из Source, вы можете вместо этого запустить следующие команды:
git clone https://github.com/chrisjbryant/errant.git
cd errant
python3 -m venv errant_env
source errant_env/bin/activate
pip install -U pip setuptools wheel
pip install -e .
python3 -m spacy download en_core_web_sm
Это будет клонировать ошибочный источник GitHub в текущий каталог, построить и активировать среду Python внутри него, а затем установит ошибку и все его зависимости. Если вы хотите изменить ошибочный код, это рекомендуемый способ его установить.
Три основные команды предоставляются с ошибкой: 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
извлекает и классифицирует автоматические изменения. В обеих настройках сохраняются некорректированные изменения и нокаумы.
Пример:
errant_m2 {-auto|-gold} m2_file -out <out_m2>
errant_compare
Это команда оценки, которая сравнивает гипотезу M2 -файл с эталонным файлом M2. Поведение по умолчанию оценивает общую гипотезу с точки зрения коррекции на основе SPAN. Флаг -cat {1,2,3}
может использоваться для оценки типов ошибок на повышении уровня гранулярности, в то время как флаг -ds
или -dt
можно использовать для оценки с точки зрения обнаружения на основе SPAN или токенов (то есть игнорируя коррекцию). Все оценки представлены в терминах точности, отзыва и 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
.
По состоянию на 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
. нагрузка (lang, nlp = нет)
Создайте ошибочный объект аннотатора. Параметр lang
в настоящее время принимает только 'en'
для английского, но мы надеемся расширить его для других языков в будущем. Необходимый параметр nlp
может быть использован, если у вас уже есть предварительно загруженная Spacy и не хотите, чтобы ошибочно загружали его снова.
import errant
import spacy
nlp = spacy.load('en_core_web_sm') # Or en_core_web_X for other spacy models
annotator = errant.load('en', nlp)
Объект аннотатора является основным интерфейсом для ошибок.
annotator
. Parse (String, tokenise = false)
Lemmatise, POS -тег и проанализируйте текстовую строку с помощью Spacy. Установите tokenise
, чтобы вернуть, а также токениза из Spacy. Возвращает объект Spacy Doc.
annotator
. Выровнять (Orig, Cor, Lev = false)
Выравнивать оригинальный и исправленный текст Spacy. По умолчанию используется лингвистическое выравнивание Damerau-levenshtein, но флаг lev
может быть использован для стандартного выравнивания Levenshtein. Возвращает объект выравнивания.
annotator
. слияние (выравнивание, слияние = 'правила')
Извлеките редакторы из оптимального выравнивания в объекте выравнивания. Доступны четыре различных стратегии слияния:
Возвращает список объектов редактирования.
annotator
. классифицировать (редактировать)
Классифицировать редактирование. Устанавливает атрибут edit.type
в объекте Edit и возвращает тот же объект Edit.
annotator
. Аннотируйте (Orig, Cor, Lev = false, слияние = 'правила')
Запустите полную конвейер аннотации, чтобы выровнять две последовательности, извлечь и классифицировать изменения. Эквивалент управлению 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)
Загрузите объект редактирования из списка. orig
и cor
должны быть посредническими объектами DOC, и редактирование должно быть в форме: [o_start, o_end, c_start, c_end(, type)]
. Значения должны быть целыми числами, которые соответствуют токенскому началу и заканчиванию смещений в исходных и исправленных объектах DOC. Значение type
- это необязательная строка, которая обозначает тип ошибки редактирования (если известно). Установите min
на True, чтобы минимизировать редактирование (например, [ab -> ac] = [b -> c]) и old_cat
, чтобы сохранить старую категорию типа ошибки (то есть выключить классификатор).
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
. коррекция
Оригинальные и скорректированные текстовые последовательности с помощью Spacy.
alignment
. COST_MATRIX
alignment
. OP_MATRIX
Матрица стоимости и операционная матрица, созданная выравниванием.
alignment
. align_seq
Первое самое дешевое выравнивание между двумя последовательностями.
Объект редактирования представляет собой преобразование между двумя текстовыми последовательностями.
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
. тип
Строка типа ошибки.
edit
. to_m2 (id = 0)
Форматируйте редактирование для выходного файла M2. id
- идентификатор аннотатора.
Если вы хотите развить ошибку для других языков, вы должны имитировать структуру каталогов errant/en
. Например, ошибки для французского должны импортировать слияние из errant.fr.merger
и классификатор от errant.fr.classifier
, который соответственно имеет эквивалентные методы get_rule_edits
и classify
методы. Вам также нужно будет добавить 'fr'
в список поддерживаемых языков в errant/__init__.py
.
Если у вас есть какие -либо вопросы, предложения или отчеты об ошибках, вы можете связаться с авторами по адресу:
Кристофер D0T Брайант в Cl.cam.ac.uk
Mariano D0T Felice на Cl.cam.ac.uk