Propara中ProStruct源码的调试问题

0. 前言

  1. 论文:Reasoning about Actions and State Changes by Injecting Commonsense Knowledge, Niket Tandon et al., EMNLP 2018.
  2. 项目地址:Propara (我只跑了其中的ProStruct模型)

1. 遇到的问题

1.1 安装环境

requirements.txt中,它要求的是allennlp==0.4.3,记住安装完后检查一下pytorch的版本

import torch
print(__torch.version__)

正常的输出是'0.3.1',我的不知道啥原因,第一次输出的竟然是'1.0.1.post2',但是退出再进环境测试了一下就正常了,所以你们特别要注意一下,不然后面报错搞得你怀疑人生,无语~~

如果没问题的话,就切换到项目路径,然后执行:

export PYTHONPATH=.

1.2 predictor

这里的问题就有点多了,具体看下面的:
(1)命令:
EMNLP18-README.md中,给的运行参数是:

python propara/run.py predict --output-file /tmp/prostruct1/test.pred.json --predictor "prostruct_prediction" /tmp/prostruct1/model.tar.gz data/emnlp18/grids.v1.test.json

很不幸,当你运行完后会出现错误:

...
allennlp.common.checks.ConfigurationError: 'prostruct_prediction is not a registered name for Predictor'

好吧,我以前没用过allennlp这个框架,也不懂怎么搞,就去看了看官方的tutorial,发现要加一条包括那个文件的包名,要加上--

python propara/run.py predict --include-package propara --output-file /tmp/prostruct1/test.pred.json --predictor prostruct_prediction /tmp/prostruct1/model.tar.gz data/emnlp18/grids.v1.test.json

(2) 源码错误
等你执行上面那个命令后又报错了:

...
    from processes.utils.propara_metadata import ProparaMetadata
ModuleNotFoundError: No module named 'processes'

看报错信息,在propara/utils/gold_to_grid.py这个文件里,看看它第一行代码,

from processes.utils.propara_metadata import ProparaMetadata

严重怀疑这里是写错了,可是作者怎么能编译通过呢,小朋友你是否有很多问号????好吧,改成下面的:

# from processes.utils.propara_metadata import ProparaMetadata
from propara.utils.propara_metadata import ProparaMetadata

别急,还有一个地方也得改呢,那就是propara/utils/prostruct_predicted_json_to_tsv_grid.py这个文件的第5行也是如此,改吧:

# from processes.data.propara_dataset_reader import Action
from propara.data.propara_dataset_reader import Action

到这里问题基本就解决了,如果你可以运行,那就不用看下面的内容了。(不过也要注意,EMNLP18-README.mdjson–>tsv格式的命令行也有问题,就是那个文件名的路径和名字,看下面1.3部分)

(3) 运行错误:
如果你运行的时候又出现了../../tests/fixture/..啥文件NOT FOUND,那可能是项目根路径的问题,所以建议你用Pycharm远程连服务器运行,然后在run.py那里配置参数,看图:
run.py参数配置

  • 运行一下propara/run.py,它会报错,因为缺少参数,但是在Pycharm的右上角添加了run(也就是上图中 1 的位置),点击进去编辑;
  • 图中2中填的内容:
predict --output-file /tmp/prostruct1/test.pred.json --include-package propara --predictor prostruct_prediction /tmp/prostruct1/model.tar.gz data/emnlp18/grids.v1.test.json
  • 图中3的地方要填项目的根目录。

1.3 将预测生成的json格式转换成tsv格式

EMNLP18-README.md中这步给的命令是:

python propara/utils/prostruct_predicted_json_to_tsv_grid.py /tmp/pl1/predictions/pred.test.json /tmp/pl1/predictions/pred.test.tsv

这里的路径和上面的是不一样的,上面predictor生成的文件存放在/tmp/prostruct1/test.pred.json(尤其是后面那部分坑死了pred.test.json v.s. test.pred.json,你细品~~),所以命令改成:

python propara/utils/prostruct_predicted_json_to_tsv_grid.py /tmp/prostruct1/test.pred.json /tmp/prostruct1/test.pred.json

总算么得问题了,接下来就去下载evaluator进行评测啦,看github上的步骤就可以了。下面是我跑的结果,和原文还是有点差距的:
ProStruct_result


我遇到的问题总体上就是上面那些啦,如果你还遇到啥问题可以在下方留言和我讨论哦~~~~

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值