Towards Generative Aspect-Based Sentiment Analysis 论文复现

Towards Generative Aspect-Based Sentiment Analysis 论文复现,第1张

论文地址: https://aclanthology.org/2021.acl-short.64.pdf
论文代码地址:https://github.com/IsakZhang/Generative-ABSA

1.安装pytorch pytorch官网

假设你已经进入创建好的的虚拟环境中:

pip3 install torch torchvision torchaudio --extra-index-url https://download.pytorch.org/whl/cu113
2.根据read.md安装对应环境
pip install transformers==4.0.0
pip install sentencepiece==0.1.91
pip install pytorch_lightning==0.8.1
3.运行文件main.py测试代码: 问题1:
main.py: error: the following arguments are required: --task, --dataset, --paradigm

参考博客:https://blog.csdn.net/qq_45056135/article/details/123991879

解决方法:

找到这三个required=true的属性的default, 如下图

default分别为uabsa, rest14, annotation
1.复制代码:

--task "uabsa" --dataset "rest14" --paradigm "annotation"

Run---->Edit configuratioins–>找到main.py---->Parammeters—>将复制好的代码填入配置 点击ok保存退出


配置成功;继续运行main.py文件

问题2:
ImportError: cannot import name 'SAVE_STATE_WARNING' from 'torch.optim.lr_scheduler' (/home/wjg/anaconda3/envs/ABSA/lib/python3.7/site-packages/torch/optim/lr_scheduler.py)
解决方法:

解决方法参考博客:https://blog.csdn.net/qq_43060870/article/details/117194738
**方法1:**更新transformers版本,运行如下代码(你也可以更新其他版本的比这个高就行)

pip install transformers==4.3.0

**方法2:**说是pytorch版本太高(太麻烦不推荐)
降低torch的版本为1.7.1即可

问题3:
ModuleNotFoundError: No module named 'editdistance'
解决方法:
pip install editdistance

继续运行main.py代码显示正常测试部分是没问题了:

4. 训练模型:

将args.do_train置为true模型:
代码第35行:ture改成false启动训练方法

parser.add_argument("--do_train", action='store_true', help="Whether to run training.")

改成:

parser.add_argument("--do_train", action='store_false', help="Whether to run training.")

之后运行代码:

问题4:
TypeError: object of type 'int' has no len()
问题原因: self.hparams.n_gpu是一个int类型没有len方法 解决方法:

找到报错代码行

将代码

len(self.hparams.n_gpu)

改为:

self.hparams.n_gpu

此时即可正常运行:
但是默认使用cpu运行:
如果想使用gpu找到如下代码42行(或者是附近)

  parser.add_argument("--n_gpu", default=0)

将default值改为大于0即可推荐为1:(不然可能汇报其他错误)

5.验证模型

将刚刚训练的部分 action='store_true’将要测试的部分action='store_false’如下图所示

训练模型:

将代码

parser.add_argument("--do_eval", action='store_true', help="Whether to run training.")

改为:

parser.add_argument("--do_eval", action='store_false', help="Whether to run training.")
验证模型:

同样将代码:

parser.add_argument("--do_eval", action='store_true', help="Whether to run eval on the dev/test set.")

改为:

parser.add_argument("--do_eval", action='store_false', help="Whether to run eval on the dev/test set.")

修改完后运行代码

问题5:
TypeError: evaluate() missing 1 required positional argument: 'sents'

找到报错行332:

大概意思是缺一个参数sents:
经过观察发现下面377行附近有类似的获取sents的方法:

解决方法

所以将源代码;

dev_result = evaluate(dev_loader, model, args.paradigm, args.task)

改为:

sents, _ = read_line_examples_from_file(f'data/{args.task}/{args.dataset}/dev.txt')
dev_result = evaluate(dev_loader, model, args.paradigm, args.task, sents)

继续运行main.py代码
如下有结果了, 说明离成功不远了 但是还是有错误:

问题6:
Traceback (most recent call last):
  File "/home/wjg/workspace/GAS/main.py", line 334, in <module>
    if dev_result['f1'] > best_f1:
TypeError: tuple indices must be integers or slices, not str

大概意思是说dev_result是一个元组类型而不是字典, dev_result['f1']这样是错的

解决思路:

打印一下dev_result看看

确实是一个元组类型不能直接取f1;

({'precision': 0.6371681415929203, 'recall': 0.6545454545454545, 'f1': 0.6457399103139014}, {'precision': 0.6430678466076696, 'recall': 0.6606060606060606, 'f1': 0.6517189835575485})

先查看一下evaluate的返回值有两个 而dev_result, 返回值有两个, 就不可能是字典类型;

解决方法:类似于问题5的处理

通过观察发现do_direct_eval(386行附近)里面的代码是这样处理的:

所以将我们代码:

dev_result = evaluate(dev_loader, model, args.paradigm, args.task, sents)

改为:

_, dev_result = evaluate(dev_loader, model, args.paradigm, args.task, sents) #_可以换成其他的变量名反正这里不用

接着运行main.py代码

问题7:

这个问题出现过, 和问题56一样

TypeError: evaluate() missing 1 required positional argument: 'sents'
解决方法:

只需要将代码:

test_result = evaluate(test_loader, model, args.paradigm, args.task)

改为:

sents, _ = read_line_examples_from_file(f'data/{args.task}/{args.dataset}/test.txt') # 注意这里是test.txt
_,  test_result = evaluate(test_loader, model, args.paradigm, args.task)

运行之后就可以正常跑了

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/714413.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-04-24
下一篇 2022-04-24

发表评论

登录后才能评论

评论列表(0条)

保存