NLG(自然言語生成)のさまざまな監視されていない自動化されたメトリックの評価コード。仮説ファイルを入力し、1つ以上の参照ファイルとメトリックの値を出力します。これらのファイル全体の行は、同じ例に対応する必要があります。
Java 1.8.0(またはそれ以上)をインストールします。
Python依存関係をインストールし、実行します。
pip install git+https://github.com/Maluuba/nlg-eval.git@masterMacOS 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}(これらの例は、WindowsでGit Bashで作成されました)
すべてのデータファイルがダウンロードされる必要があります。次のようなサイズが表示されます。
$ 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の各内部リストは、仮説の参照の1つのセットです(同じ順序でhypothesisの各文の単一参照文字列のリスト)。
このコードを公開された調査の一部として使用する場合は、次の論文を引用してください。
シカル・シャルマ、レイラ・エル・アスリ、ハンヌ・シュルツ、ジェレミー・ズマー。 「自然言語生成を評価するためのタスク指向の対話における監視されていないメトリックの関連性」 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に問題がある場合は、Meteor.pyのmem変数を下げることを試みることができます
デフォルトでは(IDFパラメーターが「コーパス」モードに設定されている場合)、指定された参照文を使用してIDF値を計算します。したがって、1つの画像(またはNLGの例)のみを持つ参照データセットのサイダースコアはゼロになります。 1つの(または少数)画像を使用して評価する場合、代わりにIDFを「CoCo-Val-DF」に設定します。これは、信頼できる結果を得るためにMSCOCO Vaildation DatasetのIDFを使用します。これは、このコードには適応されていません。このユースケースでは、vrama91/coco-captionのパッチを適用します。
すでに準備されたデータディレクトリをDockerコンテナに取り付けたり、ユーザー間で共有したりするには、 NLGEVAL_DATA環境変数を設定して、NLG-Evalにモデルとデータを見つける場所を知らせます。例えば
NLGEVAL_DATA=~/workspace/nlg-eval/nlgeval/data
この変数は、セットアップ中に提供される値をオーバーライドします( ~/.config/nlgeval/rc.jsonに保存)
このプロジェクトは、Microsoftのオープンソース行動規範を採用しています。詳細については、FAQのコードを参照するか、追加の質問やコメントについては[email protected]にお問い合わせください。
license.mdを参照してください。