复现PyTorch版BERT文本分类时导入torchtext.data的Field类报错
问题原因
ImportError: cannot import name 'Field' from 'torchtext.data'报错是因为你当前使用的torchtext版本高于0.8.0,从0.9.0版本开始,Field、TabularDataset、BucketIterator这类传统API已经被迁移到torchtext.legacy包下,原torchtext.data路径下不再提供这些类。OSError: undefined symbol报错是因为当前PyTorch和torchtext的版本没有严格匹配,二者的大版本必须对应才能正常调用底层动态链接库,版本不匹配就会出现符号找不到的问题。
解决方案
你可以根据需求选择任意一种方案解决:
- 方案1:安装兼容旧版本(最适配旧教程,无需修改代码)
直接执行安装命令,安装教程对应时代的匹配版本即可,原有导入代码不需要做任何修改:pip install torch==1.7.1 torchtext==0.8.1 - 方案2:适配新版本API(无需降级PyTorch)
如果你不想降级现有PyTorch版本,可以直接修改导入代码的路径,其他逻辑完全不需要改动:
把原导入代码替换为:
如果修改后还是出现OSError,需要检查当前PyTorch版本,安装与之对应的torchtext版本即可,比如PyTorch 1.8.x对应torchtext 0.9.x、PyTorch 1.10.x对应torchtext 0.11.x、PyTorch 1.12.x对应torchtext 0.13.x。# Preliminaries from torchtext.legacy.data import Field, TabularDataset, BucketIterator, Iterator
内容的提问来源于stack exchange,提问作者user16796049
相关产品推荐
相关产品推荐

