pytorch nn.Embedding 读取gensim训练好的词/字向量(有例子)

最近在跑深度学习模型,发现Embedding随机性太强导致模型结果有出入,因此考虑固定初始随机向量,既提前训练好词/字向量,不多说上代码!!

1、利用gensim训练字向量(词向量自行修改)

python 复制代码
# 得到每一行的数据 []
datas = open('data/word.txt', 'r', encoding='gbk').read().split("\n")
# 得到一行的单个字 [[],...,[]]
word_datas = [[i for i in data if i != " "] for data in datas] 
model = Word2Vec(
    word_datas,  # 需要训练的文本
    vector_size=10,   # 词向量的维度
    window=2,  # 句子中当前单词和预测单词之间的最大距离
    min_count=1,  # 忽略总频率低于此的所有单词 出现的频率小于 			min_count 不用作词向量
    workers=8,  # 使用这些工作线程来训练模型(使用多核机器进行更快的训练)
    sg=0,  # 训练方法 1:skip-gram 0;CBOW。
    epochs=10  # 语料库上的迭代次数
	)

2、保存模型或者字向量

python 复制代码
#字向量保存
model.wv.save_word2vec_format('word_data.vector',   # 保存路径
                              binary=False  # 如果为 True,则数据将以二进制 word2vec 格式保存,否则将以纯文本格式保存
                              )
#模型保存
model.save('word.model')

3、nn.Embedding读取gensim模型

python 复制代码
model = gensim.models.Word2Vec.load('./word.model')
weights = torch.FloatTensor(model.wv.vectors)
embedding = nn.Embedding.from_pretrained(weights)
embedding.requires_grad = False

这里懒了,拷贝别人的图,debug就可以看看,简单理解下就是有X个字,就有X行,然后每个字用Y个数字表示,就是Y列,上图X=4799,Y=10。

*也许看了上面你依然会一脸懵(别着急,下面给你举个例子)

4、案例

python 复制代码
import gensim
import torch
import torch.nn as nn

model = gensim.models.Word2Vec.load('./word.model')
weights = torch.FloatTensor(model.wv.vectors)

embedding = nn.Embedding.from_pretrained(weights)
embedding.requires_grad = False #训练时候不训练向量

query = '天氣'
query_id = torch.tensor(model.wv.vocab['天氣'].index)

#下面只是查询,具体的根据你自己的训练即可
gensim_vector = torch.tensor(model[query])
embedding_vector = embedding(query_id)

print(gensim_vector==embedding_vector)

#首先將 Gensim 的預訓練模型讀取進來,並將其向量轉換成 PyTorch 所需要的資料格式 Tensor,當作 nn.Embedding() 的初始值。
#這裡有個小細節:如果並不打算在模型訓練過程中一併訓練 nn.Emedding(),要記得將其設定為 requires_grad = False。
相关推荐
csdn_aspnet3 小时前
如何用 C# 和 Gemma 3 在本地构建一个真正能完成工作的 AI 代理的
人工智能·ai·c#·gemma
啊哈哈哈哈哈啊哈哈4 小时前
边缘计算与轮廓检测
人工智能·opencv·计算机视觉
cskywit4 小时前
从DFL到无NMS推理:一文拆解YOLO26背后的工程取舍与数学原理
人工智能·机器学习
PPHT-H4 小时前
【人工智能笔记】第四十四节:OpenClaw封神工具 openclaw-free-openai-proxy 免费AI模型批量调用,零token费+稳到不翻车!
人工智能·深度学习·openclaw·免费openai·ai服务代理
yiyu07164 小时前
3分钟搞懂深度学习AI:实操篇:RNN
人工智能·深度学习
uzong4 小时前
CoPaw是什么?-- 2026年开源的国产个人AI助手
人工智能·后端
海盗儿4 小时前
TensorRT-LLM 框架与源码分析
人工智能
无心水4 小时前
【任务调度:框架】11、分布式任务调度进阶:高可用、幂等性、性能优化三板斧
人工智能·分布式·后端·性能优化·架构·2025博客之星·分布式调度框架
码森林4 小时前
小龙虾居然比你更健忘?OpenClaw 记忆系统指南,让它永远记住你
人工智能·ai编程·全栈
ghie90905 小时前
维纳滤波器语音增强MATLAB实现
人工智能·matlab·语音识别