最近在跑一个对话生成的代码,其中用到了NLG-Eval来进行模型评估,开始没在意,心想直接pip就好了
pip install NLG-Eval
但当我开始用它的时候:
nlg-eval --hypothesis=./predictions.txt --references=./reference.txt --no-skipthoughts --no-glove
1、报错了
Could not determine location of data.
Run `nlg-eval --setup DATA_DIR’ to download or set $NLGEVAL_DATA to an existing location
既然如此,那我执行就好了吧
nlg-eval --setup
结果有两个文件下不下来,还一直报错
于是我就根据报错中提到的网址,把文件下载了,然后上传到指定路径。
(受大小限制,数据包不能全部上传,这里只放了几个经常下不下来的,大家自取https://download.csdn.net/download/didadifish/86873006)
这下总该可以了吧,执行还是报同样的错!
难道是我没有设置DATA_DIR,重新来一次
nlg-eval --setup /自己的下载路径
还是不行。。。
2、问题查找
只能上官网看看了https://github.com/Maluuba/nlg-eval
查看bin目录里面的setup文件
如果设定了路径,那数据就是下载都到设定的路径,如果没有,就是下载到默认路径~/.cache/nlgeval
那问题出在哪儿了呢?继续往下看
找到这个get_data_dir()函数,终于找到了问题所在!
如果在环境变量中找到了NLGEVAL_DATA,并且这个路径确实存在,就会返回这个路径,但前面的setup()函数中并没有设置这个环境变量的值(大家可以通过os.environ.keys()
查看系统中是否存在这个变量)
如果环境变量中没有这个值,就会从~/.config/nlgeval/rc.json
这个文件中读取路径的值,我以为这是设置了DATA_DIR时,会保存下来的,但我查看目录里却没有找到这个文件,
所以才会报错,执行了except中的语句
3、问题解决
(1)最直接的,修改utils里的get_data_dir函数,直接返回我们数据保存的路径(utils文件在路径 nlg_eval安装环境/lib/pythonx.x/site-packages/nlgeval/ 下)
(2)添加环境变量NLGEVAL_DATA,并将值设置为数据保存的路径,如何设置环境变量,可以参考这篇博客https://www.cnblogs.com/Robert-huge/p/5546427.html
4、成功终于解决了困扰我两天的问题