cdqa执行predict时报DistilBertConfig无return_dict属性错误如何解决
报错原因
cdqa 1.3.7版本发布时间较早,官方适配的transformers版本最高为3.x系列,你当前使用的transformers 4.6.1属于更高版本,新增了return_dict配置项,但cdqa配套的distilbert-squad_1.1模型使用的是旧版DistilBertConfig配置,没有内置return_dict字段,因此触发属性缺失报错。
解决方案
- 方案1:降级transformers到适配版本(最稳妥,无兼容问题)
卸载当前高版本transformers,安装cdqa 1.3.7官方兼容的版本即可:
pip uninstall transformers -y pip install transformers==3.0.2
如果担心依赖冲突影响其他项目,建议新建独立的Python虚拟环境运行cdqa相关代码。
- 方案2:手动补全模型配置的缺失属性(无需降级依赖)
如果需要保留当前高版本transformers,可在初始化cdqa_pipeline之后、调用predict方法之前,手动给模型配置添加缺失的属性:
# cdqa_pipeline初始化完成后添加以下两行 cdqa_pipeline.reader.model.config.return_dict = False cdqa_pipeline.reader.model.config.torchscript = False
该方案直接适配高版本transformers的逻辑,不需要修改源码也不需要降级依赖。
- 方案3:修改transformers源码兼容旧配置(仅临时测试使用,不推荐)
找到报错对应的transformers/configuration_utils.py文件,修改use_return_dict属性的判断逻辑,兼容没有对应字段的旧配置:
# 将原文件第252行的代码 return self.return_dict and not self.torchscript # 修改为 return getattr(self, "return_dict", False) and not getattr(self, "torchscript", False)
修改后重新运行代码即可生效。
内容的提问来源于stack exchange,提问作者Scott Bing
相关产品推荐
相关产品推荐

