使用Gensim加载预训练Word2vec模型时遇AttributeError如何解决?
嘿,这个问题我之前也踩过坑!咱们先搞清楚为啥会报错:
你手里的xxxx.model.wv其实是KeyedVectors对象——也就是预训练好的词向量集合,它只包含词和对应的向量数据,没有Word2Vec完整模型的训练组件(比如negative这种和训练相关的属性)。但你用gensim.models.Word2Vec.load()去加载它,这个方法是用来加载完整的Word2Vec模型的,自然会找不到只有完整模型才有的属性,所以抛出了AttributeError。
正确的解决方法
1. 直接加载词向量(KeyedVectors)
如果你的需求只是使用预训练好的词向量(比如查询某个词的向量、计算词相似度等),用KeyedVectors.load()来加载就对了,代码如下:
from gensim.models import KeyedVectors # 加载词向量文件 word_vectors = KeyedVectors.load('xxxx.model.wv') # 示例用法:查询词向量 print(word_vectors['你要查的词']) # 示例用法:找相似词 print(word_vectors.most_similar('你要查的词'))
这样就能正常使用预训练向量了,完全不需要管那个大的xxxx.model.wv.syn0.npy文件——KeyedVectors.load()会自动关联加载对应的npy向量文件。
2. 如果需要完整的Word2Vec模型(比如继续训练)
如果你本来想加载完整模型来继续训练,那说明你可能缺少了完整模型的文件。完整的Word2Vec模型保存后,通常会生成多个文件:比如xxxx.model(主模型文件)、xxxx.model.trainables.syn1neg.npy、xxxx.model.wv.syn0.npy等。你现在只有wv相关的文件,说明之前只保存了词向量部分,没有保存完整模型。
这种情况下,要么你得找到完整的模型文件(.model后缀的那个),用Word2Vec.load('xxxx.model')加载;要么就只能接受用KeyedVectors使用预训练向量,没法继续训练了。
内容的提问来源于stack exchange,提问作者iro

