关于在pytorch-nlp库中使用词嵌入产生维度不对应错误的原因和解决方式
1.错误
RuntimeError: Vector for token Bolonia has 147 dimensions, but previously read vectors have 300 dimensions. All vectors must have the same number of dimensions.
2.代码
# 使用Glove词向量
from torchnlp.word_to_vector import GloVe
vectors = GloVe()
vectors['hello']
在电脑上运行上述代码的时候,会报上述错误,具体如图:
3.原因
上述示例代码在初始化GloVe时就产生了错误。在初始化时,要先从国外服务器上下载词嵌入文件,然后加载到内存中。产生错误的原因其实是在加载预训练的词嵌入文件到内存的时候,因为文件太大了,内存不足导致溢出。笔者的电脑是8G内存,不够用。
vectors = GloVe()
根据 官方文档.默认下载的词嵌入文件是840B,该文件很大。
4.解决方式
- 换一台内存足够大的电脑跑。
- 设置参数,下载较小的预训练词向量模型。具体参数可以查看根据 官方文档 或者 源代码。其他词向量模型如FastText、BPEmb也类似。
例如,选择下载glove.6B.zip,这个文件只有800M+。
# 使用Glove词向量
from torchnlp.word_to_vector import GloVe
vectors = GloVe(name='6B')
vectors['hello'].shape
运行结果如下
torch.Size([300])