安装TensorFlow后导入gensim的KeyedVectors出现numpy兼容性报错
报错诱因分析
ValueError: numpy.ndarray size changed这类报错本质是依赖包的C扩展编译时依赖的numpy版本,和运行时实际安装的numpy版本不一致,属于Python科学计算生态常见的二进制兼容性问题。
具体触发原因如下:
- 你最初安装gensim时,环境中numpy版本高于1.19.2,gensim的C扩展模块编译时绑定了高版本numpy的ndarray结构体定义(高版本numpy的ndarray结构体大小为88字节)
- 后续为了适配TensorFlow降级numpy到1.19.2后,该版本numpy的ndarray结构体大小仅为80字节,但你没有重新编译安装gensim,gensim调用C接口时仍然按照高版本的结构体大小读取内存,就触发了该报错
- 你之前尝试的卸载重装如果没有加
--no-cache-dir参数,pip会直接调用本地缓存的、基于高版本numpy编译的gensim安装包,因此无法解决问题
解决方案
- 第一步:批量卸载相关依赖,避免残留旧编译版本
pip uninstall -y gensim numpy scipy
- 第二步:先安装TensorFlow适配的numpy版本
pip install numpy==1.19.2
- 第三步:强制重新编译安装gensim,禁用本地缓存确保适配当前numpy版本
pip install gensim --no-cache-dir
补充代码修正
你附的示例代码中存在API调用错误:gensim的KeyedVectors没有key_to_vectors()方法,正确遍历写法如下:
model = KeyedVectors.load_word2vec_format( '\Word2vec\GoogleNews-vectors-negative300.bin.gz', binary=True) # 创建嵌入矩阵 embedding_matrix = np.zeros((vocab_size, 300)) # 300为向量维度 for word in model.key_to_index: if word in tokenizer.word_index: idx = tokenizer.word_index[word] embedding_matrix[idx] = np.array(model[word], dtype=np.float32)
内容的提问来源于stack exchange,提问作者user218030
相关产品推荐
相关产品推荐

