このリポジトリには、次のような文法エラーアノテーションツールキット(Errant)が含まれています。
クリストファー・ブライアント、マリアーノ・フェリス、テッド・ブリスコー。 2017。文法エラー補正のためのエラータイプの自動注釈と評価。計算言語学会協会の第55回年次総会(第1巻:長い論文)の議事録。カナダのバンクーバー。
マリアーノ・フェリス、クリストファー・ブライアント、テッド・ブリスコー。 2016年。言語的に強化されたアライメントを使用したESL文の学習者エラーの自動抽出。 Coling 2016の議事録、計算言語学に関する第26回国際会議:技術論文。大阪、日本。
このコードを使用する場合は、上記の論文を引用してください。誤った詳細については、こちらをご覧ください。特に、エラータイプの定義については、第5章を参照してください。
更新-09/12/23 :オンラインデモで誤りを試すことができます!
誤りの主な目的は、エラータイプ情報で並行英語文に自動的に注釈を付けることです。具体的には、元の文と修正された文のペアを与えられた場合、Errantは前者を後者に変換する編集を抽出し、ルールベースのエラータイプフレームワークに従って分類します。これを使用して、並列データセットを標準化したり、詳細なエラータイプ評価を容易にしたりできます。注釈付き出力ファイルはM2形式で、評価スクリプトが提供されます。
オリジナル:これはグラマティカルな文です。
修正:これは文法的な文です。
出力M2 :
sこれはグラマティカルな文です。
A 1 2 ||| r:動詞:SVA ||| IS |||必須||| -NONE- ||| 0
a 2 2 ||| m:det ||| a ||| rebuly ||| -none- ||| 0
A 2 3 ||| r:呪文|||文法|||必須||| -none- ||| 0
a -1 -1 ||| noop ||| -none- |||必須||| -none- ||| 1
M2形式では、Sが先行する行は元の文を示し、Aの前には編集アノテーションが示されます。各編集行は、編集の開始および終了トークンオフセット、エラータイプ、およびトークン化された修正文字列で構成されています。次の2つのフィールドは、歴史的な理由で含まれています(CONLL-2014共有タスクを参照)、最後のフィールドはアノテーターIDです。
「NOOP」編集は、アノテーター/システムが元の文を変更しなかったことを明示的に示す特別な種類の編集です。アノテーターが1つしかない場合、NOOP編集はオプションです。そうしないと、NOOPの編集は、少なくとも1つのNアノテーターが元の文を正しいと見なした場合はいつでも含める必要があります。これは、個々のM2ファイルを組み合わせる際に注意すべきことです。NOPSが欠けている可能性があるため、評価に影響を与える可能性があります。
誤ったインストールとその依存関係をインストールする最も簡単な方法は、 pip
を使用することです。また、クリーンな仮想環境( venv
を使用するなど)にインストールすることをお勧めします。 Errantの最新バージョンは、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
これにより、現在のディレクトリにerrant_env
と呼ばれる新しいPython3環境が作成およびアクティブになります。 pip
、いくつかのセットアップツールを更新し、この環境に誤った、スペイシー、Rapidfuzz、Spacyのデフォルトの英語モデルをインストールします。実行することでいつでも環境を無効にすることはできますが、 deactivate
ときはいつでも再度アクティブ化することを忘れないでください。
Errant V2.0.0は、BEA-2019共有タスクと完全に互換性があるように設計されています。共有タスクの結果と直接比較する場合は、新しいバージョンがわずかに異なるスコアを作成する可能性があるため、誤ったV2.0.0をインストールすることをお勧めします。 Codalabを使用して、共有タスクデータセットで匿名で評価することもできます。 Errant V2.0.0は、Python> = 3.7と互換性がありません。
pip install errant==2.0.0
ソースからエラーをインストールする場合は、代わりに次のコマンドを実行できます。
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
:3つの主要なコマンドが誤って提供されます。特定のPythonスクリプトを呼び出すことなく、コマンドラインのどこからでも実行できます。
errant_parallel
これは、元のテキストファイルと少なくとも1つの並列修正されたテキストファイルを入力として取得し、注釈付きM2ファイルを出力するメインアノテーションコマンドです。デフォルトでは、元のテキストファイルと修正されたテキストファイルは、1行ごとに1つの文でワードトークン化されていると想定されています。
例:
errant_parallel -orig <orig_file> -cor <cor_file1> [<cor_file2> ...] -out <out_m2>
errant_m2
これは、並列テキストファイルの代わりにM2ファイルで動作するerrant_parallel
のバリアントです。これにより、既存のM2ファイルを簡単に再処理できます。また、金の編集か自動編集を使用するかを指定する必要があります。 IE -gold
既存の編集のみを分類しますが、 -auto
自動編集を抽出して分類します。両方の設定で、補正されていない編集とNOOPが保存されています。
例:
errant_m2 {-auto|-gold} m2_file -out <out_m2>
errant_compare
これは、仮説M2ファイルを参照M2ファイルと比較する評価コマンドです。デフォルトの動作は、スパンベースの修正の観点から、全体的な仮説を評価します。 -cat {1,2,3}
フラグを使用して、粒度のレベルの増加時にエラータイプを評価できますが、 -ds
または-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
フラグを使用して表示できる追加の高度なコマンドラインオプションもあります。
v2.0.0の時点で、誤って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)
誤ったアノテーターオブジェクトを作成します。 lang
パラメーターは現在、英語の'en'
のみを受け入れていますが、将来他の言語のために拡張したいと考えています。スパシーをすでにプリロードしており、誤って再度ロードすることを望まない場合、オプションのnlp
パラメーターを使用できます。
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タグ、およびスパシーでテキスト文字列を解析します。 tokenise
真実に設定します。 Spacy Docオブジェクトを返します。
annotator
。 align (orig、cor、lev = false)
Spacy-Parsed OriginalおよびCorrected Textを調整します。デフォルトでは、言語的に強化されたDamerau-Levenshteinアライメントを使用しますが、 lev
フラグは標準のLevenshteinアライメントに使用できます。アライメントオブジェクトを返します。
annotator
。マージ(alignment、merging = 'ルール')
アライメントオブジェクトの最適なアライメントから編集を抽出します。 4つの異なるマージ戦略が利用可能です。
編集オブジェクトのリストを返します。
annotator
。分類(編集)
編集を分類します。編集オブジェクトにedit.type
属性を設定し、同じ編集オブジェクトを返します。
annotator
。 Annotate (orig、cor、lev = false、merging = 'ルール')
完全なアノテーションパイプラインを実行して、2つのシーケンスを整列させ、編集を抽出して分類します。 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
Spacy-parsed docオブジェクトでなければならず、編集は[o_start, o_end, c_start, c_end(, type)]
の形式でなければなりません。値は、トークンの起動と終了のオフセットに対応する整数でなければなりません。 type
値は、編集のエラータイプ(既知の場合)を示すオプションの文字列です。 min
をtrueに設定して、編集([ab-> ac] = [b-> c])を最小限に抑え、古いエラータイプカテゴリ(つまり、分類器をオフにする)を保持するためにtrueにtrueになり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())
アラインメントオブジェクトは、2つのスペイシー型テキストシーケンスから作成されます。
alignment
。起源alignment
。 cor
Spacy-Parsed Original and Corpected Textシーケンス。
alignment
。 cost_matrix
alignment
。 op_matrix
アライメントによって生成されるコストマトリックスと操作マトリックス。
alignment
。 align_seq
2つのシーケンス間の最初の最も安いアライメント。
編集オブジェクトは、2つのテキストシーケンス間の変換を表します。
edit
。 o_start
edit
。 o_end
edit
。 o_toks
edit
。 O_STR
オフセット、スパシートークン、元のテキストの編集用の文字列。
edit
。 c_start
edit
。 C_END
edit
。 C_TOKS
edit
。 C_STR
開始と終了のオフセット、スペイシートークン、修正されたテキストの編集用の文字列。
edit
。タイプ
エラータイプ文字列。
edit
。 to_m2 (id = 0)
出力M2ファイルの編集をフォーマットします。 id
はアノテーターIDです。
他の言語の誤りを開発したい場合は、 errant/en
ディレクトリ構造を模倣する必要があります。たとえば、フランス語の誤りは、 errant.fr.merger
から合併を輸入し、 errant.fr.classifier
get_rule_edits
の分類器をclassify
する必要があります。また、 errant/__init__.py
でサポートされている言語のリストに'fr'
を追加する必要があります。
質問、提案、またはバグレポートがある場合は、著者に連絡できます。
Cl.cam.ac.ukのChristopher D0t Bryant
Cl.cam.ac.ukのMariano D0t Felice