قياس الأفضل والأسوأ
شغّل قياس الأفضل والأسوأ في Potato: يختار المُعلّقون العنصر الأفضل والعنصر الأسوأ في كل مجموعة، ثم يحوّل العدّ أو برادلي-تيري أو بلاكيت-لوس هذه الاختيارات إلى درجات.
جديد في الإصدار 2.3.0
يعرض قياس الأفضل والأسوأ (BWS)، المعروف أيضًا باسم MaxDiff، على المُعلّق مجموعة من العناصر، أربعة في العادة، ويطلب منه اختيار الأفضل والأسوأ وفق معيار ما. تعطي نقرتان على كل مجموعة معلومات أكثر مما يعطيه تقييم واحد، ولأن الحكم مقارن فهو يتجنب مشكلة أن الدرجة 7 عند مُعلّق قد تساوي 5 عند مُعلّق آخر.
يستحق BWS عناء الإعداد حين:
- تعاني التقييمات الرقمية المباشرة من اختلاف المُعلّقين في استخدام المقياس
- تحتاج إلى ترتيب موثوق لمئات أو آلاف العناصر
- يكون بُعد الجودة نسبيًّا بطبيعته، مثل معرفة أي ترجمة تُقرأ بسلاسة أكبر
واجهة قياس الأفضل والأسوأ للتعليق المقارن في Potato
الإعداد
لمهمة BWS جزءان. يحدد المخطط ما يُسأل عنه المُعلّق، ويحدد قسم bws_config في المستوى الأعلى كيف تُبنى المجموعات وكيف تُحسب درجاتها.
bws_config:
tuple_size: 4 # items shown at once
min_item_appearances: 8 # how often each item must appear across tuples
seed: 42
scoring:
method: counting # counting | bradley_terry | plackett_luce
annotation_schemes:
- annotation_type: bws
name: fluency
description: "Select the BEST and WORST translation by fluency"
tuple_size: 4
best_description: "Most Fluent"
worst_description: "Least Fluent"
sequential_key_binding: true
label_requirement:
required: trueيقبل المخطط tuple_size وbest_description وworst_description وsequential_key_binding وlabel_requirement، ولا يقبل شيئًا غيرها. وكل ما يتعلق بتوليد المجموعات أو حساب درجاتها مكانه bws_config.
مخطط bws بلا قسم bws_config يعرض سؤالًا على قائمة عناصر فارغة، وهذا هو السبب المعتاد لظهور مهمة BWS فارغة.
خيارات bws_config
| الخيار | الوصف |
|---|---|
tuple_size | عدد العناصر في المجموعة الواحدة |
num_tuples | العدد الإجمالي للمجموعات المطلوب توليدها |
min_item_appearances | الحد الأدنى لعدد المجموعات التي يظهر فيها كل عنصر |
seed | يثبّت أخذ العينات حتى يمكن إعادة إنتاج التشغيل |
scoring.method | counting أو bradley_terry أو plackett_luce |
رفع قيمة min_item_appearances يجعل درجة كل عنصر أدق، على حساب مقارنات أكثر. وهو الإعداد الذي يُعدَّل حين تخرج الدرجات مشوَّشة.
صيغة البيانات
كل سطر في ملف البيانات عنصر واحد، ويسحب Potato المجموعات من هذه العناصر.
{"id": "sys_a", "text": "Le chat s'est assis sur le tapis."}
{"id": "sys_b", "text": "Le chat a assis sur le tapis."}
{"id": "sys_c", "text": "Le chat etait assis sur le mat."}
{"id": "sys_d", "text": "Le chat se tenait sur le tapis."}يوازن توليد المجموعات بين العناصر: يظهر كل عنصر عددًا متقاربًا من المرات، وتجتمع الأزواج التي تحتاج إلى مقارنة بقدر كافٍ لتكون الدرجات قابلة للمقارنة. ويجعل ضبط seed هذا التوزيع قابلًا لإعادة الإنتاج.
التسجيل
يجري حساب الدرجات بعد جمع التعليقات، من سطر الأوامر:
python -m potato.bws_scoring --config config.yaml --method countingتُكتب النتيجة في bws_scores.tsv داخل مجلد المخرجات، ما لم يحدد --output مسارًا آخر. والخيارات الثلاثة هي --config و--method و--output.
العدّ
الطريقة الافتراضية والأوضح. درجة العنصر هي نسبة المرات التي اختير فيها الأفضل ناقص نسبة المرات التي اختير فيها الأسوأ، لذا تتراوح الدرجات من -1.0 إلى +1.0. لا تحتاج إلى أي اعتماديات إضافية، وهي الطريقة التي تُذكر في التقرير حين تريد أن يتمكن القارئ من إعادة حسابها يدويًّا.
python -m potato.bws_scoring --config config.yaml --method counting --output scores.tsvبرادلي-تيري
تلائم نموذجًا على المقارنات الزوجية التي تستلزمها كل مجموعة: العنصر الأفضل يتفوق على كل عنصر آخر في مجموعته، وكل عنصر آخر يتفوق على الأسوأ. وتتعامل مع البيانات المتفرقة أفضل من العدّ.
python -m potato.bws_scoring --config config.yaml --method bradley_terryبلاكيت-لوس
يعامل كل حكم على أنه اختياران: الأفضل من المجموعة كلها، ثم الأسوأ من العناصر المتبقية، وهذا هو نموذج MaxDiff لكيفية إصدار أحكام الأفضل والأسوأ. ويلائم منفعةً لكل عنصر بطريقة الأرجحية العظمى. قبل 2.10.2 كان يلائم الأزواج نفسها التي يلائمها برادلي-تيري ويُرجع الدرجات نفسها، لذا أعد حساب الدرجات بالإصدار 2.10.2 أو أحدث إن كنت قد نشرت نتائجه.
python -m potato.bws_scoring --config config.yaml --method plackett_luceاختيار الطريقة
| الطريقة | السرعة | المعلومات المستخدمة | الأنسب لـ |
|---|---|---|---|
counting | سريعة | عدد مرات اختيار العنصر أفضلَ وأسوأ | التحليل الاستكشافي، والنتائج التي تريد أن يسهل التحقق منها |
bradley_terry | متوسطة | المقارنات الزوجية الضمنية | الخيار الافتراضي المعتاد |
plackett_luce | أبطأ | كل اختيار للأفضل والأسوأ، بالترتيب الذي جرى به | نموذج أرجحية للحكم نفسه |
يحتاج bradley_terry إلى pip install choix. أما plackett_luce فيستخدم scipy، الذي يثبّته Potato مسبقًا.
عدة أبعاد في وقت واحد
مخططا BWS على العناصر نفسها يجمعان حكمين لكل مجموعة، وهذا يكلّف زوجًا إضافيًّا من النقرات بدلًا من المرور على المدوّنة كلها مرة ثانية:
annotation_schemes:
- annotation_type: bws
name: fluency
description: "Select the BEST and WORST by fluency"
tuple_size: 4
best_description: "Most Fluent"
worst_description: "Least Fluent"
- annotation_type: bws
name: adequacy
description: "Select the BEST and WORST by meaning preservation"
tuple_size: 4
best_description: "Most Accurate"
worst_description: "Least Accurate"محتوى المخرجات
يسجّل كل مخطط العنصر الذي اختير أفضلَ والعنصر الذي اختير أسوأ:
{
"fluency": {"best": "sys_d", "worst": "sys_c"},
"adequacy": {"best": "sys_a", "worst": "sys_c"}
}الدرجات ليست في هذا الملف. يحسبها potato.bws_scoring لاحقًا، وهذا ما يتيح إعادة حساب درجات دراسة منتهية بطريقة أخرى دون إعادة جمع أي شيء.
المتابعة
تتضمن لوحة تحكم المشرف تبويبًا لـ BWS يعرض تقدّم التعليق ودرجات العناصر الحالية، فتستطيع أن ترى هل استقر الترتيب قبل أن تقرر إيقاف الجمع.
مثال كامل
annotation_task_name: "MT System Ranking (BWS)"
task_dir: "."
data_files:
- "data/mt_systems.jsonl"
item_properties:
id_key: id
text_key: text
bws_config:
tuple_size: 4
min_item_appearances: 8
seed: 42
scoring:
method: bradley_terry
annotation_schemes:
- annotation_type: bws
name: overall_quality
description: "Select the BEST and the WORST translation"
tuple_size: 4
best_description: "Best Translation"
worst_description: "Worst Translation"
sequential_key_binding: true
label_requirement:
required: true
output_annotation_dir: "annotation_output/"
export_annotation_format: jsonl
user_config:
allow_all_users: trueاجمع التعليقات، ثم احسب الدرجات:
potato start config.yaml -p 8000
python -m potato.bws_scoring --config config.yaml --method bradley_terryقراءات إضافية
- المقارنة الزوجية - حالة العنصرين
- مقاييس ليكرت - التقييم المباشر بدلًا من المقارنة
- صيغ التصدير - إخراج التعليقات
للاطلاع على تفاصيل التنفيذ، انظر التوثيق المصدري.