Kode evaluasi untuk berbagai metrik otomatis yang tidak diawasi untuk NLG (pembuatan bahasa alami). Dibutuhkan sebagai input file hipotesis, dan satu atau lebih referensi file dan output nilai metrik. Baris di seluruh file ini harus sesuai dengan contoh yang sama.
Instal Java 1.8.0 (atau lebih tinggi).
Instal dependensi Python, jalankan:
pip install git+https://github.com/Maluuba/nlg-eval.git@masterJika Anda menggunakan MacOS High Sierra atau lebih tinggi, maka jalankan ini untuk memungkinkan multithreading:
export OBJC_DISABLE_INITIALIZE_FORK_SAFETY=YESPengaturan Sederhana (Unduh Data yang Diperlukan (misalnya model, embeddings) dan file kode eksternal), jalankan:
nlg-eval --setup Jika Anda mengatur ini dari kode sumber atau Anda berada di Windows dan tidak menggunakan terminal bash, maka Anda mungkin mendapatkan kesalahan tentang nlg-eval yang tidak ditemukan. Anda perlu menemukan skrip nlg-eval . Lihat di sini untuk detailnya.
# 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}(Contoh -contoh ini dibuat dengan bash git di jendela)
Semua file data seharusnya diunduh, Anda harus melihat ukuran seperti:
$ 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
Anda juga dapat memverifikasi beberapa checksum:
$ 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
Jika Anda memastikan bahwa pengaturan berhasil, Anda dapat menjalankan tes:
pip install pytest
pytestMungkin butuh beberapa menit dan Anda mungkin melihat peringatan tetapi mereka harus lewat.
Setelah pengaturan selesai, metrik dapat dievaluasi dengan API Python atau di baris perintah.
Contoh API Python dapat ditemukan di test_nlgeval.py.
nlg-eval --hypothesis=examples/hyp.txt --references=examples/ref1.txt --references=examples/ref2.txt
Di mana setiap baris dalam file hipotesis adalah kalimat yang dihasilkan dan baris yang sesuai di seluruh file referensi adalah kalimat referensi kebenaran untuk hipotesis yang sesuai.
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 ) Di mana references adalah daftar string teks referensi kebenaran tanah dan hypothesis adalah string teks hipotesis.
from nlgeval import NLGEval
nlgeval = NLGEval () # loads the models
metrics_dict = nlgeval . compute_individual_metrics ( references , hypothesis ) Di mana references adalah daftar string teks referensi kebenaran tanah dan hypothesis adalah string teks hipotesis.
from nlgeval import NLGEval
nlgeval = NLGEval () # loads the models
metrics_dict = nlgeval . compute_metrics ( references , hypothesis ) Di mana references adalah daftar daftar string teks referensi kebenaran tanah dan hypothesis adalah daftar string teks hipotesis. Setiap daftar dalam dalam references adalah satu set referensi untuk hipotesis (daftar string referensi tunggal untuk setiap kalimat dalam hypothesis dalam urutan yang sama).
Jika Anda menggunakan kode ini sebagai bagian dari penelitian yang dipublikasikan, silakan kutip makalah berikut:
Shikhar Sharma, Layla El Asri, Hannes Schulz, dan Jeremie Zumer. "Relevansi metrik yang tidak diawasi dalam dialog berorientasi tugas untuk mengevaluasi generasi bahasa alami" 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 }
}Berlari
nlg-eval --hypothesis=examples/hyp.txt --references=examples/ref1.txt --references=examples/ref2.txt
memberi
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
Jika Anda memiliki masalah dengan Meteor maka Anda dapat mencoba menurunkan variabel mem di meteor.py
Cider secara default (dengan parameter IDF diatur ke mode "corpus") menghitung nilai IDF menggunakan kalimat referensi yang disediakan. Dengan demikian, skor sari untuk dataset referensi dengan hanya 1 gambar (atau contoh untuk NLG) akan menjadi nol. Saat mengevaluasi menggunakan satu (atau sedikit) gambar, atur IDF ke "Coco-Val-DF" sebagai gantinya, yang menggunakan IDF dari dataset vaildation MSCOCO untuk hasil yang dapat diandalkan. Ini belum diadaptasi dalam kode ini. Untuk kasus penggunaan ini, oleskan tambalan dari vrama91/coco-caption.
Untuk memasang direktori data yang sudah disiapkan ke wadah Docker atau membaginya di antara pengguna, Anda dapat mengatur variabel lingkungan NLGEVAL_DATA untuk memberi tahu NLG-eval di mana menemukan model dan datanya. Misalnya
NLGEVAL_DATA=~/workspace/nlg-eval/nlgeval/data
Variabel ini mengesampingkan nilai yang disediakan selama pengaturan (disimpan dalam ~/.config/nlgeval/rc.json )
Proyek ini telah mengadopsi kode perilaku open source Microsoft. Untuk informasi lebih lanjut, lihat FAQ Kode Perilaku atau hubungi [email protected] dengan pertanyaan atau komentar tambahan.
Lihat lisensi.md.