Skip to content

قياس الأفضل والأسوأ

شغّل قياس الأفضل والأسوأ في Potato: يختار المُعلّقون العنصر الأفضل والعنصر الأسوأ في كل مجموعة، ثم يحوّل العدّ أو برادلي-تيري أو بلاكيت-لوس هذه الاختيارات إلى درجات.

جديد في الإصدار 2.3.0

يعرض قياس الأفضل والأسوأ (BWS)، المعروف أيضًا باسم MaxDiff، على المُعلّق مجموعة من العناصر، أربعة في العادة، ويطلب منه اختيار الأفضل والأسوأ وفق معيار ما. تعطي نقرتان على كل مجموعة معلومات أكثر مما يعطيه تقييم واحد، ولأن الحكم مقارن فهو يتجنب مشكلة أن الدرجة 7 عند مُعلّق قد تساوي 5 عند مُعلّق آخر.

يستحق BWS عناء الإعداد حين:

  • تعاني التقييمات الرقمية المباشرة من اختلاف المُعلّقين في استخدام المقياس
  • تحتاج إلى ترتيب موثوق لمئات أو آلاف العناصر
  • يكون بُعد الجودة نسبيًّا بطبيعته، مثل معرفة أي ترجمة تُقرأ بسلاسة أكبر

واجهة التعليق بقياس الأفضل والأسوأواجهة قياس الأفضل والأسوأ للتعليق المقارن في Potato

الإعداد

لمهمة BWS جزءان. يحدد المخطط ما يُسأل عنه المُعلّق، ويحدد قسم bws_config في المستوى الأعلى كيف تُبنى المجموعات وكيف تُحسب درجاتها.

yaml
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.methodcounting أو bradley_terry أو plackett_luce

رفع قيمة min_item_appearances يجعل درجة كل عنصر أدق، على حساب مقارنات أكثر. وهو الإعداد الذي يُعدَّل حين تخرج الدرجات مشوَّشة.

صيغة البيانات

كل سطر في ملف البيانات عنصر واحد، ويسحب Potato المجموعات من هذه العناصر.

json
{"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 هذا التوزيع قابلًا لإعادة الإنتاج.

التسجيل

يجري حساب الدرجات بعد جمع التعليقات، من سطر الأوامر:

bash
python -m potato.bws_scoring --config config.yaml --method counting

تُكتب النتيجة في bws_scores.tsv داخل مجلد المخرجات، ما لم يحدد --output مسارًا آخر. والخيارات الثلاثة هي --config و--method و--output.

العدّ

الطريقة الافتراضية والأوضح. درجة العنصر هي نسبة المرات التي اختير فيها الأفضل ناقص نسبة المرات التي اختير فيها الأسوأ، لذا تتراوح الدرجات من -1.0 إلى +1.0. لا تحتاج إلى أي اعتماديات إضافية، وهي الطريقة التي تُذكر في التقرير حين تريد أن يتمكن القارئ من إعادة حسابها يدويًّا.

bash
python -m potato.bws_scoring --config config.yaml --method counting --output scores.tsv

برادلي-تيري

تلائم نموذجًا على المقارنات الزوجية التي تستلزمها كل مجموعة: العنصر الأفضل يتفوق على كل عنصر آخر في مجموعته، وكل عنصر آخر يتفوق على الأسوأ. وتتعامل مع البيانات المتفرقة أفضل من العدّ.

bash
python -m potato.bws_scoring --config config.yaml --method bradley_terry

بلاكيت-لوس

يعامل كل حكم على أنه اختياران: الأفضل من المجموعة كلها، ثم الأسوأ من العناصر المتبقية، وهذا هو نموذج MaxDiff لكيفية إصدار أحكام الأفضل والأسوأ. ويلائم منفعةً لكل عنصر بطريقة الأرجحية العظمى. قبل 2.10.2 كان يلائم الأزواج نفسها التي يلائمها برادلي-تيري ويُرجع الدرجات نفسها، لذا أعد حساب الدرجات بالإصدار 2.10.2 أو أحدث إن كنت قد نشرت نتائجه.

bash
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 على العناصر نفسها يجمعان حكمين لكل مجموعة، وهذا يكلّف زوجًا إضافيًّا من النقرات بدلًا من المرور على المدوّنة كلها مرة ثانية:

yaml
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"

محتوى المخرجات

يسجّل كل مخطط العنصر الذي اختير أفضلَ والعنصر الذي اختير أسوأ:

json
{
  "fluency": {"best": "sys_d", "worst": "sys_c"},
  "adequacy": {"best": "sys_a", "worst": "sys_c"}
}

الدرجات ليست في هذا الملف. يحسبها potato.bws_scoring لاحقًا، وهذا ما يتيح إعادة حساب درجات دراسة منتهية بطريقة أخرى دون إعادة جمع أي شيء.

المتابعة

تتضمن لوحة تحكم المشرف تبويبًا لـ BWS يعرض تقدّم التعليق ودرجات العناصر الحالية، فتستطيع أن ترى هل استقر الترتيب قبل أن تقرر إيقاف الجمع.

مثال كامل

yaml
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

اجمع التعليقات، ثم احسب الدرجات:

bash
potato start config.yaml -p 8000
python -m potato.bws_scoring --config config.yaml --method bradley_terry

قراءات إضافية

للاطلاع على تفاصيل التنفيذ، انظر التوثيق المصدري.