调用skipthoughts.load_model()遇AttributeError:模块无该属性求解决
解决
skipthoughts模块无load_model属性的问题 问题根源
你遇到的AttributeError是因为当前安装的skipthoughts包并非官方Skip-Thoughts模型的实现,PyPI上的第三方skipthoughts包没有提供load_model方法,而你代码中调用的是Ryan Kiros官方实现里的函数。
步骤1:卸载错误的包
先移除当前通过pip安装的skipthoughts:
pip uninstall skipthoughts -y
步骤2:获取官方实现代码
克隆官方Skip-Thoughts仓库到本地,将其中的skipthoughts目录放到你的项目路径下,或者添加仓库路径到Python环境:
git clone https://github.com/ryankiros/skip-thoughts.git
如果没把skipthoughts文件夹放到项目根目录,在代码开头添加路径:
import sys sys.path.append("/path/to/skip-thoughts")
步骤3:修正模型加载逻辑
官方实现中加载模型的方式和你原代码一致,但需要提前按照仓库说明下载预训练权重和词汇表文件,放到指定路径后,model=skipthoughts.load_model()就能正常运行。
步骤4:修复代码中的潜在错误
你的异常处理块存在变量未定义的问题,当skipthoughts.encode抛出异常时,caption_vectors并未被赋值,直接dump会触发NameError,修改如下:
for files in ofiles: if not os.path.exists(join(encoded_vector_dir, files)): with open(join(annot_dir, files)) as f: captions = f.read().split(',') captions = [cap for cap in captions if len(cap.strip()) > 0] try: caption_vectors = skipthoughts.encode(model, captions) # 成功编码后保存结果 with open(join(encoded_vector_dir, files), mode='wb') as myfile: pickle.dump(caption_vectors, myfile) except Exception as e: print(f"处理文件 {files} 失败: {str(e)}") # 保存错误信息到garbage目录 with open(join(garbage, files), mode='w') as myfile: myfile.write(f"错误信息: {str(e)}\n原始文本: {str(captions)}") else: print(f"已存在,跳过 {files}")
另外,你定义的ofiles_1至ofiles_5变量未被使用,可根据实际需求保留或删除。
内容的提问来源于stack exchange,提问作者Param
相关产品推荐
相关产品推荐

