رمز التقييم لمختلف المقاييس الآلية غير الخاضعة للإشراف لـ NLG (توليد اللغة الطبيعية). يستغرق إدخال ملف فرضية ، وواحد أو أكثر من الملفات وإخراج قيم المقاييس. يجب أن تتوافق الصفوف عبر هذه الملفات مع نفس المثال.
تثبيت Java 1.8.0 (أو أعلى).
تثبيت تبعيات Python ، تشغيل:
pip install git+https://github.com/Maluuba/nlg-eval.git@masterإذا كنت تستخدم MacOS High Sierra أو أعلى ، فقم بتشغيل هذا للسماح بمتعددات الترابط:
export OBJC_DISABLE_INITIALIZE_FORK_SAFETY=YESالإعداد البسيط (تنزيل البيانات المطلوبة (نماذج مثل التضمينات) وملفات التعليمات البرمجية الخارجية) ، قم بتشغيل:
nlg-eval --setup إذا كنت تقوم بإعداد هذا من الكود المصدري أو كنت على Windows وعدم استخدام محطة Bash ، فقد تحصل على أخطاء حول عدم العثور على nlg-eval . ستحتاج إلى العثور على السيناريو nlg-eval . انظر هنا للحصول على التفاصيل.
# If you don't like the default path (~/.cache/nlgeval) for the downloaded data,
# then specify a path where you want the files to be downloaded.
# The value for the data path is stored in ~/.config/nlgeval/rc.json and can be overwritten by
# setting the NLGEVAL_DATA environment variable.
nlg-eval --setup ${data_path}(تم صنع هذه الأمثلة مع Git Bash على Windows)
يجب تنزيل جميع ملفات البيانات ، يجب أن ترى أحجامًا مثل:
$ ls -l ~/.cache/nlgeval/
total 6003048
-rw-r--r-- 1 ... 289340074 Sep 12 2018 bi_skip.npz
-rw-r--r-- 1 ... 689 Sep 12 2018 bi_skip.npz.pkl
-rw-r--r-- 1 ... 2342138474 Sep 12 2018 btable.npy
-rw-r--r-- 1 ... 7996547 Sep 12 2018 dictionary.txt
-rw-r--r-- 1 ... 21494787 Jan 22 2019 glove.6B.300d.model.bin
-rw-r--r-- 1 ... 480000128 Jan 22 2019 glove.6B.300d.model.bin.vectors.npy
-rw-r--r-- 1 ... 663989216 Sep 12 2018 uni_skip.npz
-rw-r--r-- 1 ... 693 Sep 12 2018 uni_skip.npz.pkl
-rw-r--r-- 1 ... 2342138474 Sep 12 2018 utable.npy
يمكنك أيضًا التحقق من بعض الاختبارات:
$ cd ~/.cache/nlgeval/
$ md5sum *
9a15429d694a0e035f9ee1efcb1406f3 *bi_skip.npz
c9b86840e1dedb05837735d8bf94cee2 *bi_skip.npz.pkl
022b5b15f53a84c785e3153a2c383df6 *btable.npy
26d8a3e6458500013723b380a4b4b55e *dictionary.txt
f561ab0b379e23cbf827a054f0e7c28e *glove.6B.300d.model.bin
be5553e91156471fe35a46f7dcdfc44e *glove.6B.300d.model.bin.vectors.npy
8eb7c6948001740c3111d71a2fa446c1 *uni_skip.npz
e1a0ead377877ff3ea5388bb11cfe8d7 *uni_skip.npz.pkl
5871cc62fc01b79788c79c219b175617 *utable.npy
$ sha256sum *
8ab7965d2db5d146a907956d103badfa723b57e0acffb75e10198ba9f124edb0 *bi_skip.npz
d7e81430fcdcbc60b36b92b3f879200919c75d3015505ee76ae3b206634a0eb6 *bi_skip.npz.pkl
4a4ed9d7560bb87f91f241739a8f80d8f2ba787a871da96e1119e913ccd61c53 *btable.npy
4dc5622978a30cddea8c975c871ea8b6382423efb107d27248ed7b6cfa490c7c *dictionary.txt
10c731626e1874effc4b1a08d156482aa602f7f2ca971ae2a2f2cd5d70998397 *glove.6B.300d.model.bin
20dfb1f44719e2d934bfee5d39a6ffb4f248bae2a00a0d59f953ab7d0a39c879 *glove.6B.300d.model.bin.vectors.npy
7f40ff16ff5c54ce9b02bd1a3eb24db3e6adaf7712a7a714f160af3a158899c8 *uni_skip.npz
d58740d46cba28417cbc026af577f530c603d81ac9de43ffd098f207c7dc4411 *uni_skip.npz.pkl
790951d4b08e843e3bca0563570f4134ffd17b6bd4ab8d237d2e5ae15e4febb3 *utable.npy
إذا كنت تتأكد من نجاح الإعداد ، فيمكنك إجراء الاختبارات:
pip install pytest
pytestقد يستغرق الأمر بضع دقائق وقد ترى تحذيرات ولكن يجب أن تمر.
بمجرد الانتهاء من الإعداد ، يمكن تقييم المقاييس باستخدام Python API أو في سطر الأوامر.
يمكن العثور على أمثلة على API Python في test_nlgeval.py.
nlg-eval --hypothesis=examples/hyp.txt --references=examples/ref1.txt --references=examples/ref2.txt
عندما يكون كل سطر في ملف الفرضية عبارة عن جملة تم إنشاؤها والخطوط المقابلة عبر الملفات المرجعية هي جمل مرجعية للحقيقة الأرضية للفرضية المقابلة.
from nlgeval import compute_metrics
metrics_dict = compute_metrics ( hypothesis = 'examples/hyp.txt' ,
references = [ 'examples/ref1.txt' , 'examples/ref2.txt' ]) from nlgeval import compute_individual_metrics
metrics_dict = compute_individual_metrics ( references , hypothesis ) عندما تكون references قائمة بسلاسل النص المرجعية الحقيقة الأرضية hypothesis هي سلسلة نص الفرضية.
from nlgeval import NLGEval
nlgeval = NLGEval () # loads the models
metrics_dict = nlgeval . compute_individual_metrics ( references , hypothesis ) عندما تكون references قائمة بسلاسل النص المرجعية الحقيقة الأرضية hypothesis هي سلسلة نص الفرضية.
from nlgeval import NLGEval
nlgeval = NLGEval () # loads the models
metrics_dict = nlgeval . compute_metrics ( references , hypothesis ) عندما تكون references قائمة بقوائم السلاسل hypothesis المرجعية الحقيقة المرجعية ، هي قائمة بأوتار نصية الفرضية. كل قائمة داخلية في references هي مجموعة واحدة من المراجع للفرضية (قائمة السلاسل المرجعية الفردية لكل جملة في hypothesis بنفس الترتيب).
إذا كنت تستخدم هذا الرمز كجزء من أي بحث منشور ، فيرجى الاستشهاد بالورقة التالية:
Shikhar Sharma ، Layla El Asri و Hannes Schulz و Jeremie Zumer. "أهمية المقاييس غير الخاضعة للإشراف في الحوار الموجهة نحو المهمة لتقييم توليد اللغة الطبيعية" Arxiv preprint Arxiv: 1706.09799 (2017)
@article { sharma2017nlgeval ,
author = { Sharma, Shikhar and El Asri, Layla and Schulz, Hannes and Zumer, Jeremie } ,
title = { Relevance of Unsupervised Metrics in Task-Oriented Dialogue for Evaluating Natural Language Generation } ,
journal = { CoRR } ,
volume = { abs/1706.09799 } ,
year = { 2017 } ,
url = { http://arxiv.org/abs/1706.09799 }
}جري
nlg-eval --hypothesis=examples/hyp.txt --references=examples/ref1.txt --references=examples/ref2.txt
يعطي
Bleu_1: 0.550000
Bleu_2: 0.428174
Bleu_3: 0.284043
Bleu_4: 0.201143
METEOR: 0.295797
ROUGE_L: 0.522104
CIDEr: 1.242192
SPICE: 0.312331
SkipThoughtsCosineSimilarity: 0.626149
EmbeddingAverageCosineSimilarity: 0.884690
VectorExtremaCosineSimilarity: 0.568696
GreedyMatchingScore: 0.784205
إذا كانت لديك مشكلات مع Meteor ، فيمكنك محاولة خفض متغير mem في meteor.py
Cider بشكل افتراضي (مع تعيين معلمة IDF إلى وضع "Corpus") يحسب قيم جيش الدفاع الإسرائيلي باستخدام الجمل المرجعية المقدمة. وبالتالي ، فإن درجة عصير التفاح لمجموعة بيانات مرجعية مع صورة واحدة فقط (أو مثال لـ NLG) ستكون صفرًا. عند التقييم باستخدام صور واحدة (أو قليلة) ، قم بتعيين IDF على "Coco-Val-DF" بدلاً من ذلك ، والذي يستخدم IDF من مجموعة بيانات mscoco vaildation للحصول على نتائج موثوقة. لم يتم تكييف هذا في هذا الرمز. لهذه الحالة الاستخدام ، قم بتطبيق التصحيحات من VRAMA91/COCO-Caption.
لتركيب دليل بيانات تم إعداده بالفعل إلى حاوية Docker أو مشاركتها بين المستخدمين ، يمكنك تعيين متغير بيئة NLGEVAL_DATA للسماح لـ NLG-Eval بمعرفة مكان العثور على نماذج وبياناته. على سبيل المثال
NLGEVAL_DATA=~/workspace/nlg-eval/nlgeval/data
هذا المتغير يتجاوز القيمة المقدمة أثناء الإعداد (المخزن في ~/.config/nlgeval/rc.json )
اعتمد هذا المشروع رمز سلوك المصدر المفتوح Microsoft. لمزيد من المعلومات ، راجع مدونة الشهادة الأسئلة الشائعة أو الاتصال بـ [email protected] مع أي أسئلة أو تعليقات إضافية.
انظر الترخيص.