如何加载.npy格式预训练词嵌入及解决模块找不到错误
解决方案
一、解决ModuleNotFoundError: No module named 'representations.sequentialembedding'问题
你通过pip安装的representations是PyPI上的第三方包,和HistWords仓库内部的representations模块并非同一内容。解决步骤如下:
- 确保已将完整的HistWords仓库克隆到本地,example.py依赖的
representations是仓库内部的子目录,而非独立安装的包。 - 将HistWords仓库的根目录添加到Python的搜索路径,有两种方式:
- 在代码中手动添加:打开example.py,在文件开头插入以下代码(替换为你的HistWords仓库实际路径):
import sys sys.path.insert(0, '/your/actual/path/to/histwords') - 通过环境变量运行脚本:在终端执行example.py前,先设置PYTHONPATH:
PYTHONPATH=/your/actual/path/to/histwords python example.py
- 在代码中手动添加:打开example.py,在文件开头插入以下代码(替换为你的HistWords仓库实际路径):
- 检查仓库目录结构,确认histwords文件夹下存在
representations/sequentialembedding.py文件,若缺失则重新克隆仓库。
二、用Python加载.npy格式的预训练词嵌入
.npy是NumPy的二进制文件格式,直接借助NumPy库即可加载,分两种常见场景处理:
场景1:嵌入矩阵与词汇表分离存储
如果.npy文件是纯嵌入矩阵,另有单独的词汇表文件(如vocab.txt):
import numpy as np # 读取词汇表,每行对应一个单词 with open('vocab.txt', 'r', encoding='utf-8') as f: vocab = [line.strip() for line in f] # 加载.npy格式的嵌入矩阵 embedding_matrix = np.load('word_embeddings.npy') # 构建单词到嵌入向量的映射字典 word_embedding_map = {word: embedding_matrix[i] for i, word in enumerate(vocab)}
场景2:嵌入数据以字典形式存储在.npy中
如果.npy文件直接保存了{单词: 嵌入向量}的字典结构,加载时需开启allow_pickle=True(仅加载可信来源的文件,避免安全风险):
import numpy as np # 加载字典格式的嵌入文件 word_embedding_dict = np.load('embeddings_dict.npy', allow_pickle=True).item() # 示例:获取指定单词的嵌入向量 print(word_embedding_dict.get('example'))
内容的提问来源于stack exchange,提问作者Helena Yin
相关产品推荐
相关产品推荐

