XingYing-stack / MILR

EMNLP 2022 paper: Boosting Document-Level Relation Extraction by Mining and Injecting Logical Rules
8 stars 1 forks source link

index out of sequence length #1

Open wucui5 opened 1 year ago

wucui5 commented 1 year ago

Hello, I encountered an "index out of sequence length" issue while trying to replicate your code using the Docred dataset. Have you encountered such an issue before, and any help would be greatly appreciated. image

KaiserLord commented 1 year ago

兄弟,请问下你是否遇到过这个问题: rule_dwie.txt的加载报错UnpicklingError: invalid load key, '['.

wucui5 commented 1 year ago

这里的txt文件不行,应该是pl文件,要重新生成,代码里面有生成的地方,不过被注释掉了

KaiserLord commented 1 year ago

感谢你的回复,我已经在代码里面找到了相应的地方,并成功train了MILR。但在执行MILR_evaluate_DWIE.sh的时候报错: Traceback (most recent call last): File "train.py", line 376, in main() File "train.py", line 365, in main dev_score, dev_output = evaluate(args, model, dev_features, tag="dev", use_ILP=args.GI) File "train.py", line 122, in evaluate loss, loss_dict, pred = model(inputs) File "D:\anaconda\envs\mile2\lib\site-packages\torch\nn\modules\module.py", line 727, in _call_impl result = self.forward(*input, *kwargs) File "I:\SYC\MILR-main\model.py", line 146, in forward output = ( self.srr.global_inference(logits=logits,hts=hts, use_prior=True, tau=tau,k=k )[-1],) File "I:\SYC\MILR-main\soft_rule_regularization.py", line 403, in global_inference pred_label_ILP = self.ILP_hard(neg_log_porbability.cpu().numpy(), File "I:\SYC\MILR-main\soft_rule_regularization.py", line 350, in ILP_hard prob.solve(solver=cp.GUROBI, IterationLimit=20000, verbose=False, QCPDual=0, ignore_dpp=True) File "D:\anaconda\envs\mile2\lib\site-packages\cvxpy\problems\problem.py", line 473, in solve return solve_func(self, args, kwargs) File "D:\anaconda\envs\mile2\lib\site-packages\cvxpy\problems\problem.py", line 979, in _solve self.unpack_results(solution, solving_chain, inverse_data) File "D:\anaconda\envs\mile2\lib\site-packages\cvxpy\problems\problem.py", line 1294, in unpack_results solution = chain.invert(solution, inverse_data) File "D:\anaconda\envs\mile2\lib\site-packages\cvxpy\reductions\chain.py", line 84, in invert solution = r.invert(solution, inv) File "D:\anaconda\envs\mile2\lib\site-packages\cvxpy\reductions\solvers\qp_solvers\gurobi_qpif.py", line 83, in invert opt_val = model.objVal + inverse_data[s.OFFSET] File "src\gurobipy\model.pxi", line 353, in gurobipy.Model.getattr File "src\gurobipy\model.pxi", line 1884, in gurobipy.Model.getAttr File "src\gurobipy\attrutil.pxi", line 100, in gurobipy.__getattr AttributeError: Unable to retrieve attribute 'objVal'

我检索了一些解决方法,暂时推测是否为模型的train结果并非最优导致。不知道你是否遇到这个问题,或者知道是哪里出了问题吗,不胜感激

wucui5 commented 1 year ago

我没有在dwie上evaluate,只train过,我主要是想用docred数据集,如果你在docred上运行成功了可以告诉我一下

KaiserLord commented 1 year ago

好的好的,我试试

KaiserLord commented 1 year ago

Traceback (most recent call last): File "i:/SYC/MILR-main/prepro.py", line 11, in docred_fact_in_train = json.load(open('./dataset_docred/ref/train_annotated.fact', 'r'))
FileNotFoundError: [Errno 2] No such file or directory: './dataset_docred/ref/train_annotated.fact'

我试了下docred中没有这个fact文件,难道也是生成的吗?我没看到哪里生成这个文件

wucui5 commented 1 year ago

这个文件我有,我也忘了当初是生成的还是去哪下载的,不过我今天服务器连不上,没法看是怎么来的,文件在服务器上

wucui5 commented 1 year ago

Traceback (most recent call last): File "i:/SYC/MILR-main/prepro.py", line 11, in docred_fact_in_train = json.load(open('./dataset_docred/ref/train_annotated.fact', 'r')) FileNotFoundError: [Errno 2] No such file or directory: './dataset_docred/ref/train_annotated.fact'

我试了下docred中没有这个fact文件,难道也是生成的吗?我没看到哪里生成这个文件

image

应该是在这里生成的

KaiserLord commented 1 year ago

我现在也遇到跟你一样的问题了,害

KaiserLord commented 1 year ago

我的一个想法是,部分docred数据太长了,所以限制一下加载到模型的数据样本,是否可以解决这个问题。

wucui5 commented 1 year ago

我记得是选序列的时候好像有选十来个,里面有好几个超过了131,然后我强制把那些超过的改到小于131,后面还是会出现别的问题,你是想要复现这篇代码吗

KaiserLord commented 1 year ago

是啊。不过你这个做法我也试过,不行的.虽然不知道131咋来的,但是最好写一个脚本把训练集中过长的样本剔除你再试试。这个我也还没试过

wucui5 commented 1 year ago

我不试了,都过好久我都快忘了,反正作者给的代码就跑不通,可能本身逻辑就有问题

KaiserLord commented 1 year ago

我不试了,都过好久我都快忘了,反正作者给的代码就跑不通,可能本身逻辑就有问题

兄弟我跑起来并测试成功了,方法就是不能用他的sh脚本文件,就在arg的参数那里修改参数值,而且docred的测试文件要用re-dcred做测试文件

wucui5 commented 1 year ago

我不试了,都过好久我都快忘了,反正作者给的代码就跑不通,可能本身逻辑就有问题

兄弟我跑起来并测试成功了,方法就是不能用他的sh脚本文件,就在arg的参数那里修改参数值,而且docred的测试文件要用re-dcred做测试文件

跑起来效果怎么样,是用test_revised文件作为测试文件吗

wucui5 commented 1 year ago

我不试了,都过好久我都快忘了,反正作者给的代码就跑不通,可能本身逻辑就有问题

兄弟我跑起来并测试成功了,方法就是不能用他的sh脚本文件,就在arg的参数那里修改参数值,而且docred的测试文件要用re-dcred做测试文件

我也可以训练起来了,就是训练的时候最后和测试的时候出现Traceback (most recent call last): File "/home/wucui/MILR-main/train.py", line 380, in main() File "/home/wucui/MILR-main/train.py", line 372, in main test_score, test_output = evaluate(args, model, test_features, tag="test", use_ILP=args.GI) File "/home/wucui/MILR-main/train.py", line 140, in evaluate bestf1, , best_f1ign, = official_evaluate(ans, args.data_dir, tag, dataset=dataset) File "/home/wucui/MILR-main/evaluation.py", line 98, in official_evaluate for label in x['labels']: KeyError: 'labels' 这个错误,你有没有遇到过呀,不管这个测试文件是用test.json还是用test_revised.json文件都有这个问题

KaiserLord commented 1 year ago

你这个错误就是因为训练到最后的时候,模型计算测试的结果时,docred的test文件没有label标签导致的。所以我才说要用re-Docred的test文件替换docred的test文件

wucui5 commented 1 year ago

你这个错误就是因为训练到最后的时候,模型计算测试的结果时,docred的test文件没有label标签导致的。所以我才说要用re-Docred的test文件替换docred的test文件

对,我发现了,test.json里面没有labels标签,只有test_revised里面有,所以这个测试只能用re-docred,这个不能用他的脚本你是怎么发现的呀

KaiserLord commented 1 year ago

调试的时候发现的

KaiserLord commented 1 year ago

对你而言,过去很久了,不知道还能否帮到你,嘿嘿

wucui5 commented 1 year ago

对你而言,过去很久了,不知道还能否帮到你,嘿嘿

帮到我啦,非常感谢,我打算用里面的规则,本来跑不通我就不打算做这个了,现在又可以接着做了,以后咱俩可以多交流,做的是同一个方向。

KaiserLord commented 1 year ago

哈哈,好啊

KaiserLord commented 12 months ago

请问你使用过别的数据集吗,除了docred和dwie之外的数据集,如semeval。我处理了semeval的数据集格式,但是总是在fact后,train的时候,报出错误。

Traceback (most recent call last): File "MILR-main/train.py", line 381, in main() File "MILR-main\model.py", line 35, in init self.srr = SRR(rule_path=rule_path, prior_path=prior_path, minC=minC, temperature=temperature, File "MILR-main\soft_rule_regularization.py", line 59, in init self.eliminate_anti_rule_for_ILP() File "MILR-main\soft_rule_regularization.py", line 247, in eliminate_anti_rule_for_ILP self.confidence_1_hop = torch.stack(confi_1_hop, dim=0) # stack expects a non-empty TensorList RuntimeError: stack expects a non-empty TensorList

也不知道是什么原因导致的,在fact构建的时候还是正常的

wucui5 commented 12 months ago

这个代码上我没用过别的数据集,我还用过cdr和gda

KaiserLord commented 12 months ago

这么说你跑的都是文档级的数据集,对于句子级的数据并未尝试吗?我这边倒是尝试了下句子级的发现,挖掘的规则虽然有,但是不匹配它的代码,导致后续变量长度为0

wucui5 @.***> 于2023年11月28日周二 20:40写道:

这个代码上我没用过别的数据集,我还用过cdr和gda

— Reply to this email directly, view it on GitHub https://github.com/XingYing-stack/MILR/issues/1#issuecomment-1829764067, or unsubscribe https://github.com/notifications/unsubscribe-auth/AJJNQW7QDFCR74724RTOP5LYGXLTTAVCNFSM6AAAAAA4WD7AVSVHI2DSMVQWIX3LMV43OSLTON2WKQ3PNVWWK3TUHMYTQMRZG43DIMBWG4 . You are receiving this because you commented.Message ID: @.***>