NLP入门遇到的一些坑(持续更新 ……)
1. 安装spacy和en_core_web_sm
python -m spacy download en_core_web_sm
python -m spacy download en
安装spacy和en_core_web_sm的时候基本都会出错,这事,可以考虑直接下载en_core_web_sm安装包,在进行安装。
- 注意,spacy 及其语言包(en_core_web_sm)的版本要保持一致
!pip install spacy==3.0.6 -U
!wget https://github.com/explosion/spacy-models/releases/download/en_core_web_sm-3.0.0/en_core_web_sm-3.0.0.tar.gz
!pip install en_core_web_sm-3.0.0.tar.gz
2. torchtext.leagcy 遗留包导致的问题
from torchtext import data, datasets
TEXT = data.Field(tokenize='spacy')
LABEL = data.LabelField(dtype=torch.float)
会提示,torchtext.data 没有Field函数的问题,去打开源码,发现确实没有,
但是发现这个功能存在于torchtext.legacy.data.field中
torchtext.legacy.data.init 源码的倒入模块行可以看出,在这里具有常用的Field 和 LabelField函数
于是,将导入模块的代码,修改为:
from torchtext.legacy import data, datasets
接下来继续跑上面的代码,还是报错,OSError: [E050] Can't find model 'en'. It doesn't seem to be a shortcut link, a Python package or a valid path to a data directory.
于是去查了下torchtext.legacy.data.field.Field. _init_ 函数,发现tokenizer_language默认设置为“en”,而我们安装的是en_core_web_sm, 所以需要指定tokenizer_language = “en_core_web_sm”,
于是,下面的代码就可以正常运行了。
from torchtext.legacy import data, datasets
# from torchtext import data,datasets
TEXT = data.Field(tokenize='spacy',
tokenizer_language='en_core_web_sm')
LABEL = data.LabelField(dtype=torch.float)