论文是 Dual Graph Convolutional Networks for Aspect-based Sentiment Analysis ,于2021年发表于ACL。
源码地址:https://github.com/CCChenhao997/DualGCN-ABSA
以下给出复现代码时一些报错的解决方法。
环境准备
环境中 python 版本和 pytorch 安装详见下文中“40系显卡解决步骤”。
之后,根据 README.md 文档中步骤进行配置。
可能出现的报错
以下报错不分先后,对应查看即可。
OSError: Can’t load weights for ‘xlnet-large-cased’
包丢失的报错是因为2023年9月 HuggingFace 官网被墙,导致许多预训练模型无法下载到本地。所以我们采用离线下载本地导入的方式解决。
在Huggingface 官网(或hf-mirror.com镜像站、或www.modelscope.cn魔搭社区)的 Model 页面搜索 xlnet-large-cased :
使用浏览器下载(关闭迅雷扩展程序)红框内文件,并放在 “这里是你的代码路径/DualGCN-ABSA/LAL-Parser/src_joint/xlnet-large-cased”下。
然后在 DualGCN-ABSA/LAL-Parser/src_joint/KM_parser.py 文件的 692 行找到 get_xlnet 函数:
将上图中的 xlnet_model 替换为 ‘这里是你的代码路径/DualGCN-ABSA/LAL-Parser/src_joint/xlnet-large-cased’
注意,这里路径中要使用 / 而不是转义字符 \
OSError: Can’t load weights for ‘bert-base-uncased’
这里主要是运行需要 Bert 的模型代码会报这个错。
和上一节解决方法基本相同,下载文件之后,在 DualGCN/train.py 的 354 行 ,将 default = ‘bert-base-uncased’ 修改为 default=’这里是你的代码路径/DualGCN-ABSA/LAL-Parser/src_joint/bert-base-uncased’ 即可
RuntimeError: Output 0 of SqueezeBackward1 is a view and is being modified inplace
此报错也常见于使用 BERT 的模型。
在 models/dualgcn_bert.py 的第137行,添加 adj_ag = adj_ag.clone() 即可。
ModuleNotFoundError: No module named ‘xxx’
这里主要是安装包的时候有丢包,我在这里报错丢失了 ‘sacremoses’ 这个包,但是我通过查看 conda list 发现,这个包确实存在于我的虚拟环境中。
网上搜索了许多解决方法,包括重装 transformers 、用 pip 指令再次安装等等,都无法解决。
最后将报错丢给 GPT ,给出的一个方法是用 conda 安装 sacremoses 这个包,成功安装之后不再报错。
类似错误使用相同解决方式即可。
data_utils.py文件中的Unresolved reference ‘absa_parser’
在 data_utils.py 文件的第197、210和326行中,均出现了导入 absa_parser 的报错。
经过浏览文件可以找到 absa_parser.py 位于 LAL-Parser/src_joint 下,但是手动引入会报红。
其实,这是因为PyCharm项目配置中的解析器设置或源根可能没有正确设置,但是无碍,源代码中引入模块处有如下代码:
import sys
sys.path.append(r'../LAL-Parser/src_joint')
sys.path.append(path) 的主要功能是在当前已有的模块搜索路径列表的末尾追加一个指定的路径 path 。这个操作允许 Python 解释器在执行 import 语句时,不仅在原有的搜索路径中查找所需模块,还会在新添加的路径下查找。所以虽然代码报红,但是运行时并不会报错。
我们可以写一个简单的测试程序进行测试:
虽然 import absa_parser 报红,但是可以看到所需目录已经引入,且执行了 absa_parser 中的代码。