รหัสการประเมินผลสำหรับตัวชี้วัดอัตโนมัติที่ไม่ได้รับการดูแลสำหรับ NLG (การสร้างภาษาธรรมชาติ) มันใช้เป็นอินพุตไฟล์สมมติฐานและไฟล์อ้างอิงอย่างน้อยหนึ่งไฟล์และค่าเอาต์พุตของตัวชี้วัด แถวข้ามไฟล์เหล่านี้ควรสอดคล้องกับตัวอย่างเดียวกัน
ติดตั้ง Java 1.8.0 (หรือสูงกว่า)
ติดตั้ง Python Dependencies, Run:
pip install git+https://github.com/Maluuba/nlg-eval.git@masterหากคุณใช้ MacOS High Sierra หรือสูงกว่าให้เรียกใช้สิ่งนี้เพื่ออนุญาตการมัลติเธรด:
export OBJC_DISABLE_INITIALIZE_FORK_SAFETY=YESการตั้งค่าอย่างง่าย (ดาวน์โหลดข้อมูลที่ต้องการ (เช่นรุ่น Embeddings) และไฟล์รหัสภายนอก), Run:
nlg-eval --setup หากคุณตั้งค่าสิ่งนี้จากซอร์สโค้ดหรือคุณอยู่ใน Windows และไม่ได้ใช้เทอร์มินัลทุบตีคุณอาจได้รับข้อผิดพลาดเกี่ยวกับ 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 หรือในบรรทัดคำสั่ง
ตัวอย่างของ Python API สามารถพบได้ใน 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
หากคุณมีปัญหากับดาวตกคุณสามารถลองลดตัวแปร mem ใน Meteor.py
ไซเดอร์โดยค่าเริ่มต้น (ด้วยพารามิเตอร์ IDF ตั้งค่าเป็นโหมด "คอร์ปัส") คำนวณค่า IDF โดยใช้ประโยคอ้างอิงที่มีให้ ดังนั้นคะแนนไซเดอร์สำหรับชุดข้อมูลอ้างอิงที่มีเพียง 1 ภาพ (หรือตัวอย่างสำหรับ 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] พร้อมคำถามหรือความคิดเห็นเพิ่มเติมใด ๆ
ดู License.md