يحتوي هذا المستودع على مجموعة أدوات شرح الخطأ النحوية (خطأ) الموضحة في:
كريستوفر براينت ، ماريانو فيليس ، وتيد بريسكو. 2017. التعليق التوضيحي التلقائي وتقييم أنواع الأخطاء لتصحيح الخطأ النحوي . في وقائع الاجتماع السنوي الخامس 55 لجمعية اللغويات الحاسوبية (المجلد 1: الأوراق الطويلة). فانكوفر ، كندا.
ماريانو فيليس ، كريستوفر براينت ، وتيد بريسكو. 2016. الاستخراج التلقائي لأخطاء المتعلم في جمل ESL باستخدام محاذاة محسّنة لغوية . في وقائع Coling 2016 ، المؤتمر الدولي السادس والعشرين حول اللغويات الحاسوبية: الأوراق الفنية. أوساكا ، اليابان.
إذا استفادت من هذا الرمز ، فيرجى الاستشهاد بالأوراق أعلاه. يمكن العثور على مزيد من المعلومات حول الخطأ هنا. على وجه الخصوص ، انظر الفصل 5 للاطلاع على تعريفات أنواع الأخطاء.
تحديث - 09/12/23 : يمكنك الآن تجربة ORRANT في العرض التوضيحي عبر الإنترنت!
الهدف الرئيسي للخطأ هو التعليق تلقائيًا على جمل اللغة الإنجليزية المتوازية مع معلومات نوع الخطأ. على وجه التحديد ، بالنظر إلى زوج جملة أصلي ومصحح ، فإن Orrant سوف يستخرج التعديلات التي تحول الأول إلى الأخير وتصنيفها وفقًا لإطار نوع الخطأ القائم على القواعد. يمكن استخدام هذا لتوحيد مجموعات البيانات المتوازية أو تسهيل تقييم نوع الخطأ المفصل. ملفات الإخراج المشروح في تنسيق M2 ويتم توفير برنامج نصي للتقييم.
الأصل : هذه جملة غرامية.
تصحيح : هذه جملة نحوية.
الإخراج M2 :
S هذه هي جملة غرامية.
A 1 2 ||| R: Verb: SVA ||| IS ||| مطلوب ||| -NONE- ||| 0
A 2 2 ||| M: det ||| a ||| مطلوب ||| -none- ||| 0
A 2 3 ||| R: Spell ||| النحوية ||| مطلوب ||| -NONE- ||| 0
a -1 -1 ||| noop ||| -none- ||| مطلوب ||| -none- ||| 1
بتنسيق M2 ، يشير الخط الذي يسبقه S إلى جملة أصلية بينما يشير الخط الذي يسبقه A إلى توضيح تحرير. يتكون كل سطر تحرير من إزاحة الرمز المميز للبدء والنهاية في التحرير ونوع الخطأ وسلسلة التصحيح المميز. يتم تضمين الحقلين التاليين لأسباب تاريخية (انظر المهمة المشتركة CONLL-2014) في حين أن الحقل الأخير هو معرف التعليق.
يعد تحرير "NOOP" نوعًا خاصًا من التحرير يشير صراحة إلى عدم وجود أي تغييرات على الجملة الأصلية. إذا كان هناك تعليق واحد فقط ، فإن تعديلات NOOP اختيارية ، وإلا يجب تضمين تحرير NOOP كلما اعتبرت واحدة على الأقل من المذيعين N أن تكون الجملة الأصلية صحيحة. هذا شيء يجب أن تكون على دراية به عند الجمع بين ملفات M2 الفردية ، حيث يمكن أن تؤثر NOOPs المفقودة على التقييم.
أسهل طريقة لتثبيت الخطأ وتبعياتها هي استخدام 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
سيؤدي ذلك إلى إنشاء وتنشيط بيئة Python3 جديدة تسمى errant_env
في الدليل الحالي. بعد ذلك ، ستقوم pip
بتحديث بعض أدوات الإعداد وتثبيت نموذج اللغة الإنجليزية الافتراضية لـ Errrant و Spacy و Rapidfuzz و Spacy في هذه البيئة. يمكنك إلغاء تنشيط البيئة في أي وقت عن طريق تشغيل deactivate
، ولكن يجب أن تتذكر تنشيطها مرة أخرى كلما أردت استخدام الخاطئ.
تم تصميم V2.0.0 Errant ليكون متوافقًا تمامًا مع المهمة المشتركة BEA-2019. إذا كنت ترغب في المقارنة مباشرة مع النتائج في المهمة المشتركة ، فقد ترغب في تثبيت V2.0.0 Orrant V2.0.0 لأن الإصدارات الأحدث قد تنتج درجات مختلفة قليلاً. يمكنك أيضًا استخدام Codalab لتقييم مجهول على مجموعات بيانات المهام المشتركة. خطأ 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 Errant في الدليل الحالي ، وإنشاء وتنشيط بيئة 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
باستخراج وتصنيف التعديلات التلقائية. في كلا الإعدادات ، يتم الحفاظ على التعديلات غير المصححة و NOOPS.
مثال:
errant_m2 {-auto|-gold} m2_file -out <out_m2>
errant_compare
هذا هو أمر التقييم الذي يقارن ملف الفرضية M2 مقابل ملف M2 المرجعي. يقيم السلوك الافتراضي الفرضية بشكل عام من حيث التصحيح القائم على Span. يمكن استخدام علامة -cat {1,2,3}
لتقييم أنواع الأخطاء عند زيادة مستويات التفاصيل ، في حين يمكن استخدام علامة -ds
أو -dt
للتقييم من حيث الكشف المستند إلى الرمز المميز أو الرمز المميز (أي تجاهل التصحيح). يتم تقديم جميع الدرجات من حيث الدقة ، والاستدعاء و F-Score (الافتراضي: 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 ، يأتي خطأ الآن مع واجهة برمجة التطبيقات.
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
. تحليل (سلسلة ، رمز = خطأ)
lemmatise ، علامة نقاط البيع ، وحوض سلسلة نصية مع Spacy. قم بتعيين tokenise
على True إلى رمز الكلمات مع Spacy. إرجاع كائن Doc Spacy.
annotator
. محاذاة (الأصل ، كو ، ليف = خطأ)
محاذاة نص أصلي وتصحيح spacy. يستخدم الافتراضي محاذاة Damerau-Levenshtein المحسنة لغويًا ، ولكن يمكن استخدام علامة lev
لمحاذاة Levenshtein القياسية. إرجاع كائن محاذاة.
annotator
. دمج (محاذاة ، دمج = "القواعد")
استخراج التعديلات من المحاذاة الأمثل في كائن محاذاة. تتوفر أربع استراتيجيات دمج مختلفة:
إرجاع قائمة الكائنات تحرير.
annotator
. تصنيف (تحرير)
تصنيف تحرير. يعين سمة edit.type
في كائن تحرير ويعيد نفس كائن التحرير.
annotator
. التعليقات التوضيحية (Orig ، cor ، lev = false ، merging = 'rules')
قم بتشغيل خط أنابيب التعليقات التوضيحية الكاملة لمحاذاة تسلسلين واستخراج وتصنيف التعديلات. أي ما يعادل تشغيل 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 ذات التكرار spacy ويجب أن يكون التحرير من النموذج: [o_start, o_end, c_start, c_end(, type)]
. يجب أن تكون القيم أعداد صحيحة تتوافق مع إزاحة الرمز المميز وإنهاء في كائنات DOC الأصلية والمصحة. قيمة type
هي سلسلة اختيارية تشير إلى نوع الخطأ في التحرير (إذا كان معروفًا). قم بتعيين min
to 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())
يتم إنشاء كائن محاذاة من تسلسلات نصية من spacy.
alignment
. أصول
alignment
. كور
تسلسل النص الأصلي والتصحيح spacy.
alignment
. cost_matrix
alignment
. op_matrix
مصفوفة التكلفة ومصفوفة التشغيل التي تنتجها المحاذاة.
alignment
. align_seq
أول أرخص محاذاة بين التسلسل.
يمثل كائن التحرير تحولًا بين تسلسل نصين.
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
هو معرف التعليق.
إذا كنت ترغب في تطوير خاطئ للغات الأخرى ، فيجب عليك تقليد بنية الدليل errant/en
. على سبيل المثال ، يجب على Errant for French استيراد عملية دمج من errant.fr.merger
ومصنف من errant.fr.classifier
التي لديها على التوالي get_rule_edits
classify
الأساليب. ستحتاج أيضًا إلى إضافة 'fr'
إلى قائمة اللغات المدعومة في errant/__init__.py
.
إذا كان لديك أي أسئلة أو اقتراحات أو تقارير أخطاء ، فيمكنك الاتصال بالمؤلفين على:
كريستوفر D0T Bryant في cl.cam.ac.uk
Mariano D0T Felice في cl.cam.ac.uk