Bewertungscode für verschiedene unbeaufsichtigte automatisierte Metriken für NLG (natürliche Sprachgenerierung). Es dauert als Eingabe einer Hypothesendatei und eine oder mehrere Referenzen Dateien und Ausgabewerte von Metriken. Zeilen über diese Dateien sollten demselben Beispiel entsprechen.
Installieren Sie Java 1.8.0 (oder höher).
Installieren Sie die Python -Abhängigkeiten, führen Sie aus:
pip install git+https://github.com/Maluuba/nlg-eval.git@masterWenn Sie MacOS High Sierra oder höher verwenden, führen Sie dies aus, um Multithreading zu ermöglichen:
export OBJC_DISABLE_INITIALIZE_FORK_SAFETY=YESEinfache Setup (Download -Daten (z. B. Modelle, Einbettungen) und externe Codedateien herunterladen), Ausführen:
nlg-eval --setup Wenn Sie dies aus dem Quellcode einrichten oder sich unter Windows befinden und keine Bash-Terminal verwenden, erhalten Sie möglicherweise Fehler darüber, dass nlg-eval nicht gefunden wird. Sie müssen das nlg-eval -Skript finden. Weitere Informationen finden Sie hier.
# 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}(Diese Beispiele wurden mit Git Bash unter Windows gemacht)
Alle Datendateien sollten heruntergeladen werden, Sie sollten Größen wie folgt sehen:
$ 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
Sie können auch einige Prüfsummen überprüfen:
$ 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
Wenn Sie sicherstellen, dass das Setup erfolgreich war, können Sie die Tests ausführen:
pip install pytest
pytestEs könnte ein paar Minuten dauern und Sie könnten Warnungen sehen, aber sie sollten vergehen.
Sobald die Einrichtung abgeschlossen ist, können die Metriken mit einer Python -API oder in der Befehlszeile bewertet werden.
Beispiele für die Python -API finden Sie in test_nlgeval.py.
nlg-eval --hypothesis=examples/hyp.txt --references=examples/ref1.txt --references=examples/ref2.txt
wobei jede Zeile in der Hypothesendatei ein generierter Satz ist und die entsprechenden Zeilen über die Referenzdateien über die Referenzsätze der Grundwahrheit für die entsprechende Hypothese sind.
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 ) Wo references eine Liste von Grundwahrheitsreferenz -Text -Zeichenfolgen und hypothesis sind, ist die Hypothesentextzeichenfolge.
from nlgeval import NLGEval
nlgeval = NLGEval () # loads the models
metrics_dict = nlgeval . compute_individual_metrics ( references , hypothesis ) Wo references eine Liste von Grundwahrheitsreferenz -Text -Zeichenfolgen und hypothesis sind, ist die Hypothesentextzeichenfolge.
from nlgeval import NLGEval
nlgeval = NLGEval () # loads the models
metrics_dict = nlgeval . compute_metrics ( references , hypothesis ) Wenn references eine Liste von Listen von Grundwahrheitsreferenz -Textzeichenfolgen und hypothesis sind, ist eine Liste von Hypothesen -Text -Saiten. Jede innere Liste in references ist ein Satz von Referenzen für die Hypothese (eine Liste einzelner Referenzzeichen für jeden Satz in hypothesis in derselben Reihenfolge).
Wenn Sie diesen Code als Teil einer veröffentlichten Forschung verwenden, geben Sie bitte das folgende Papier an:
Shikhar Sharma, Layla El Asri, Hannes Schulz und Jeremie Zumer. "Relevanz von unbeaufsichtigten Metriken im aufgabenorientierten Dialog zur Bewertung der Erzeugung der natürlichen Sprache" 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 }
}Läuft
nlg-eval --hypothesis=examples/hyp.txt --references=examples/ref1.txt --references=examples/ref2.txt
gibt
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
Wenn Sie Probleme mit Meteor haben, können Sie versuchen, die mem -Variable in Meteor.py zu senken
Der Apfelwein standardmäßig (mit IDF -Parameter auf den "Corpus" -Modus festgelegt) berechnet die IDF -Werte mithilfe der angegebenen Referenzsätze. Somit ist die Apfelweinerstellung für einen Referenzdatensatz mit nur 1 Bild (oder Beispiel für NLG) Null. Setzen Sie bei der Bewertung der Verwendung eines (oder wenigen) Bilders IDF stattdessen auf "Coco-Val-DF", das IDF aus dem Datensatz von MSCOCO VAILDATION für zuverlässige Ergebnisse verwendet. Dies wurde in diesem Code nicht angepasst. Wenden Sie für diesen Anwendungsfall Patches von Vrama91/Coco-Kapion an.
Um ein bereits vorbereitetes Datenverzeichnis an einem Docker-Container zu montieren oder zwischen Benutzern zu teilen, können Sie die Umgebungsvariable NLGEVAL_DATA festlegen, um NLG-Eval zu informieren, wo Sie seine Modelle und Daten finden können. Z.B
NLGEVAL_DATA=~/workspace/nlg-eval/nlgeval/data
Diese Variable überschreibt den während des Setups bereitgestellten Werts (gespeichert in ~/.config/nlgeval/rc.json )
Dieses Projekt hat den Microsoft Open Source -Verhaltenscode übernommen. Weitere Informationen finden Sie im FAQ oder wenden Sie sich an [email protected] mit zusätzlichen Fragen oder Kommentaren.
Siehe Lizenz.MD.