Repositori ini berisi toolkit anotasi kesalahan tata bahasa (kesalahan) yang dijelaskan dalam:
Christopher Bryant, Mariano Felice, dan Ted Briscoe. 2017. Anotasi otomatis dan evaluasi jenis kesalahan untuk koreksi kesalahan tata bahasa . Dalam Prosiding Pertemuan Tahunan ke -55 Asosiasi Linguistik Komputasi (Volume 1: Long Papers). Vancouver, Kanada.
Mariano Felice, Christopher Bryant, dan Ted Briscoe. 2016. Ekstraksi otomatis kesalahan pelajar dalam kalimat ESL menggunakan keberpihakan yang ditingkatkan secara linguistik . Dalam Prosiding Coling 2016, Konferensi Internasional ke -26 tentang Linguistik Komputasi: Makalah Teknis. Osaka, Jepang.
Jika Anda menggunakan kode ini, silakan kutip kertas di atas. Informasi lebih lanjut tentang kesalahan dapat ditemukan di sini. Secara khusus, lihat Bab 5 untuk definisi tipe kesalahan.
UPDATE - 09/12/23 : Anda sekarang dapat mencoba kesalahan dalam demo online kami!
Tujuan utama dari kesalahan adalah untuk secara otomatis membuat anotasi kalimat bahasa Inggris paralel dengan informasi tipe kesalahan. Secara khusus, diberikan pasangan kalimat asli dan diperbaiki, Errant akan mengekstrak suntingan yang mengubah yang pertama menjadi yang terakhir dan mengklasifikasikannya sesuai dengan kerangka kerja tipe kesalahan berbasis aturan. Ini dapat digunakan untuk menstandarkan kumpulan data paralel atau memfasilitasi evaluasi tipe kesalahan terperinci. File keluaran beranotasi berada dalam format M2 dan skrip evaluasi disediakan.
Asli : Ini adalah kalimat gramtik.
Dikoreksi : Ini adalah kalimat tata bahasa.
Output m2 :
Ini ini adalah kalimat gramik.
A 1 2 ||| r: kata kerja: sva ||| is ||| diperlukan ||| -none- ||| 0
A 2 2 ||| m: det ||| a ||| diperlukan ||| -none- ||| 0
A 2 3 ||| r: mantra ||| tata bahasa ||| diperlukan ||| -none- ||| 0
A -1 -1 ||| noop ||| -none- ||| diperlukan ||| -none- ||| 1
Dalam format M2, garis yang didahului oleh S menunjukkan kalimat asli sementara garis yang didahului oleh A menunjukkan anotasi edit. Setiap baris edit terdiri dari Offset Token Mulai dan Akhir dari Edit, Jenis Kesalahan, dan String Koreksi Tokenisasi. Dua bidang berikutnya dimasukkan karena alasan historis (lihat tugas bersama CONLL-2014) sedangkan bidang terakhir adalah ID Annotator.
Sunting "NOOP" adalah jenis edit khusus yang secara eksplisit menunjukkan annotator/sistem tidak membuat perubahan pada kalimat asli. Jika hanya ada satu annotator, pengeditan NOOP adalah opsional, jika tidak, edit NOOP harus dimasukkan setiap kali setidaknya 1 dari N annotator yang dianggap sebagai kalimat asli benar. Ini adalah sesuatu yang perlu diperhatikan ketika menggabungkan file M2 individu, karena NOOP yang hilang dapat memengaruhi evaluasi.
Cara termudah untuk menginstal kesalahan dan ketergantungannya adalah menggunakan pip
. Kami juga merekomendasikan untuk menginstalnya di lingkungan virtual yang bersih (misalnya dengan venv
). Versi terbaru dari Errant hanya mendukung 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
Ini akan membuat dan mengaktifkan lingkungan Python3 baru yang disebut errant_env
di direktori saat ini. pip
kemudian akan memperbarui beberapa alat pengaturan dan menginstal model bahasa Inggris yang salah, spacy, rapidfuzz dan spacy di lingkungan ini. Anda dapat menonaktifkan lingkungan kapan saja dengan menjalankan deactivate
, tetapi harus ingat untuk mengaktifkannya lagi kapan pun Anda ingin menggunakan kesalahan.
Errant V2.0.0 dirancang untuk sepenuhnya kompatibel dengan tugas bersama BEA-2019. Jika Anda ingin secara langsung membandingkan dengan hasil dalam tugas bersama, Anda mungkin ingin menginstal kesalahan V2.0.0 karena versi yang lebih baru dapat menghasilkan skor yang sedikit berbeda. Anda juga dapat menggunakan Codalab untuk mengevaluasi secara anonim pada set data tugas bersama. Errant V2.0.0 tidak kompatibel dengan python> = 3.7.
pip install errant==2.0.0
Jika Anda lebih suka menginstal errant dari sumber, Anda dapat menjalankan perintah berikut:
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
Ini akan mengkloning sumber github errant ke dalam direktori saat ini, membangun dan mengaktifkan lingkungan Python di dalamnya, dan kemudian menginstal kesalahan dan semua ketergantungannya. Jika Anda ingin memodifikasi kode yang salah, ini adalah cara yang disarankan untuk menginstalnya.
Tiga perintah utama disediakan dengan errant: errant_parallel
, errant_m2
dan errant_compare
. Anda dapat menjalankannya dari mana saja di baris perintah tanpa harus memohon skrip python tertentu.
errant_parallel
Ini adalah perintah anotasi utama yang mengambil file teks asli dan setidaknya satu file teks yang dikoreksi paralel sebagai input, dan menghasilkan file M2 yang beranotasi. Secara default, diasumsikan bahwa file teks asli dan yang dikoreksi dikenakan dengan satu kalimat per baris.
Contoh:
errant_parallel -orig <orig_file> -cor <cor_file1> [<cor_file2> ...] -out <out_m2>
errant_m2
Ini adalah varian dari errant_parallel
yang beroperasi pada file M2 alih -alih file teks paralel. Ini membuatnya lebih mudah untuk memproses ulang file M2 yang ada. Anda juga harus menentukan apakah Anda ingin menggunakan edit emas atau otomatis; IE -gold
hanya akan mengklasifikasikan pengeditan yang ada, sementara -auto
akan mengekstrak dan mengklasifikasikan pengeditan otomatis. Di kedua pengaturan, pengeditan yang tidak dikoreksi dan NOOPS dilestarikan.
Contoh:
errant_m2 {-auto|-gold} m2_file -out <out_m2>
errant_compare
Ini adalah perintah evaluasi yang membandingkan file m2 hipotesis terhadap file referensi m2. Perilaku default mengevaluasi hipotesis secara keseluruhan dalam hal koreksi berbasis rentang. Bendera -cat {1,2,3}
dapat digunakan untuk mengevaluasi tipe kesalahan pada peningkatan tingkat granularitas, sedangkan bendera -ds
atau -dt
dapat digunakan untuk mengevaluasi dalam hal deteksi berbasis rentang atau token (IE mengabaikan koreksi). Semua skor disajikan dalam hal presisi, penarikan kembali dan f-score (default: f0.5), dan hitungan untuk positif sejati (TP), false positive (fp) dan false negative (FN) juga ditampilkan.
Contoh:
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}
Semua skrip ini juga memiliki opsi baris perintah canggih tambahan yang dapat ditampilkan menggunakan bendera -h
.
Pada v2.0.0, kesalahan sekarang juga dilengkapi dengan 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
. muat (lang, nlp = tidak ada)
Buat objek Annotator yang salah. Parameter lang
saat ini hanya menerima 'en'
untuk bahasa Inggris, tetapi kami berharap dapat memperpanjangnya untuk bahasa lain di masa depan. Parameter nlp
opsional dapat digunakan jika Anda telah melakukan spacy yang sudah dimuat sebelumnya dan tidak ingin kesalahan memuatnya lagi.
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)
Objek Annotator adalah antarmuka utama untuk kesalahan.
annotator
. parse (string, tokenise = false)
Lemmatise, POS Tag, dan parse string teks dengan spacy. Atur tokenise
ke True untuk juga kata tokenise dengan spacy. Mengembalikan objek Doc Spacy.
annotator
. align (orig, cor, lev = false)
Sejajarkan teks asli dan dikoreksi yang dikoreksi spacy. Default menggunakan perataan Damerau-levenshtein yang ditingkatkan secara linguistik, tetapi bendera lev
dapat digunakan untuk penyelarasan levenshtein standar. Mengembalikan objek penyelarasan.
annotator
. gabungan (penyelarasan, penggabungan = 'aturan')
Ekstrak sunting dari penyelarasan optimal dalam objek penyelarasan. Empat strategi penggabungan yang berbeda tersedia:
Mengembalikan daftar objek edit.
annotator
. clopify (edit)
Mengklasifikasikan sunting. Mengatur atribut edit.type
dalam objek edit dan mengembalikan objek edit yang sama.
annotator
. Annotate (Orig, cor, Lev = false, gabungan = 'aturan')
Jalankan pipa anotasi penuh untuk menyelaraskan dua urutan dan mengekstrak dan mengklasifikasikan pengeditan. Setara dengan menjalankan annotator.align
, annotator.merge
dan annotator.classify
secara berurutan. Mengembalikan daftar objek edit.
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)
Muat objek edit dari daftar. orig
dan cor
harus menjadi objek DOC yang di-pars dan edit harus dari bentuk: [o_start, o_end, c_start, c_end(, type)]
. Nilai -nilai harus bilangan bulat yang sesuai dengan start token dan akhir offset dalam objek DOC asli dan dikoreksi. Nilai type
adalah string opsional yang menunjukkan jenis kesalahan edit (jika diketahui). Setel min
ke true untuk meminimalkan edit (misalnya [ab -> ac] = [b -> c]) dan old_cat
ke true untuk melestarikan kategori tipe kesalahan lama (yaitu mematikan classifier).
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())
Objek penyelarasan dibuat dari dua urutan teks yang diarahkan spacy.
alignment
. Orig
alignment
. Cor
Urutan teks asli dan dikoreksi yang dikoreksi spacy.
alignment
. cost_matrix
alignment
. op_matrix
Matriks biaya dan matriks operasi yang dihasilkan oleh penyelarasan.
alignment
. align_seq
Penyelarasan termurah pertama antara dua urutan.
Objek Edit mewakili transformasi antara dua urutan teks.
edit
. o_start
edit
. o_end
edit
. o_toks
edit
. o_str
Offset start and end, token spacy, dan string untuk diedit dalam teks asli .
edit
. c_start
edit
. c_end
edit
. c_toks
edit
. c_str
Offset start and end, token spacy, dan string untuk diedit dalam teks yang dikoreksi .
edit
. jenis
String tipe kesalahan.
edit
. to_m2 (id = 0)
Format Edit untuk file M2 Output. id
adalah ID Annotator.
Jika Anda ingin mengembangkan keliru untuk bahasa lain, Anda harus meniru struktur direktori errant/en
. Misalnya, Errant untuk Prancis harus mengimpor penggabungan dari errant.fr.merger
dan classifier dari errant.fr.classifier
yang masing -masing memiliki get_rule_edits
yang setara dan classify
metode. Anda juga perlu menambahkan 'fr'
ke daftar bahasa yang didukung dalam errant/__init__.py
.
Jika Anda memiliki pertanyaan, saran, atau laporan bug, Anda dapat menghubungi penulis di:
Christopher D0t Bryant di Cl.Cam.ac.uk
Mariano D0t Felice di Cl.cam.ac.uk