ImportError: cannot import name ‘Field‘ from ‘torchtext.data‘, No module named “legacy“

这些都是在下载最新的torchtext后出现的问题,问题如标题,在torchtext.data里面并没有Field方法,以及通过别的博主在data前加了legacy却发现没有legacy模块。

1 问题解释

出现这些问题是因为torchtext过新,这一点在github官网里给出了解释:
ImportError: cannot import name ‘Field‘ from ‘torchtext.data‘, No module named “legacy“_第1张图片
也就是说:在torchtext 0.11版本中field方法被移到了torchtext.legacy下,所以会看到其他博客的评论区里出现下面代码适用的情况:

from torchtext.legacy.data import field

但是在torchtext 0.12.0版本中legacy目录和field方法都没了,所以上面的代码无法再适用,会报错。

2 解决办法

唯一的解决方法是下载低版本的torchtext,要注意torchtexttorch的版本是对应的,在更新它之前最应该把torch也降级成对应的版本,版本对应如下:
ImportError: cannot import name ‘Field‘ from ‘torchtext.data‘, No module named “legacy“_第2张图片
安装低版本的torchtext

conda install -c pytorch torchtext==版本号

安装低版本的pytorch:在pytorch官网找对应的版本下载指令。

3 注意事项

首先,如果是复现别人的代码应该问清楚别人当时使用的版本是多少,因为torchtext版本与版本之间太不同了,我降低了一次之后又出现了别的问题,只能去看作者使用的版本是多少再降级。直到最后我的torch版本是1.7torchtext版本是0.4.0,虽然并没有对应上但是神奇的跑通了。

其次,我在安装低版本的torchtext后用pip list或者conda list发现torchtext并没有降级,这时候我们可以使用下面的代码,先把原来的删了,然后再装新的:

pip uninstall torchtext

你可能感兴趣的:(bugs,自然语言处理,pytorch)