使用Word2Vec模型训练词向量
摘要
使用 Word2Vec 模型训练一个词向量模型,并进行一些基本的词向量操作,比如查找相似词和进行词向量的类比。
代码的每个部分有如下解释:
1. 导入库
import jieba
from gensim.models import Word2Vec
jieba:一个中文分词库,用于将中文句子分割成词语。gensim.models.Word2Vec:用于训练和使用Word2Vec词向量模型。
2. 训练词向量模型
def train_word2vec_model(corpus, dim):
model = Word2Vec(corpus, size=dim, sg=1, min_count=1,workers=4, iter=15,compute_loss=True, callbacks=[PlotCallback()])
model.save("model.w2v")
return model
train_word2vec_model(corpus, dim):该函数用来训练一个Word2Vec模型。corpus:传入的语料是一个列表,列表的每个元素都是一个由词语构成的子列表(例如["今天", "天气", "不错"])。这些子列表是已经分好词的句子。dim:词向量的维度,决定了词向量的大小(例如 128)。sg=1:使用 Skip-Gram 模型(如果设置为 0 则使用 CBOW 模型)。在 Skip-Gram 模型中,通过当前词来预测上下文词。min_count=1:这是词频的最小阈值,任何出现次数小于此值的词都会被忽略。在这个代码中,注释掉的部分其实原本是希望使用min_count=3。然而,这里硬编码为min_count=1,意味着即使是非常稀有的单词也会被包括进训练。workers=4:设置用于训练的线程数。4表示使用 4 个线程进行训练,加速训练过程。iter=15:指定模型迭代次数,模型会根据训练数据进行 15 轮的优化。compute_loss=True:启用计算训练过程中的损失函数,这对于调试和分析模型训练的效果很有用。callbacks=[PlotCallback()]:使用一个回调函数PlotCallback,这个回调函数通常用于在训练过程中绘制损失曲线等图表,帮助监控训练的进度和效果。model.save("model.w2v"):将训练好的模型保存为文件model.w2v,方便后续加载使用。return model:返回训练好的Word2Vec模型。
3.训练的回调函数
# 启用 compute_loss=True 后,通过回调函数监控
class PlotCallback(CallbackAny2Vec):
def __init__(self):
super().__init__()
self.epoch_losses = [] # 存储每个epoch的损失值
self.epoches = 0 # 精确记录实际epoch数
def on_epoch_end(self, model):
"""每epoch结束时记录损失并重置计数器"""
loss = model.get_latest_training_loss()
model.running_training_loss = 0.0 # 关键!防止损失值累积
self.epoch_losses.append(loss)
self.epoches += 1
def on_train_end(self, model):
"""训练完全结束后生成最终可视化图表"""
plt.figure(figsize=(12, 6))
# 生成正确的x轴范围(从1到总epoch数)
x_values = range(1, self.epoches + 1)
plt.plot(x_values, self.epoch_losses, 'b-', marker='o', markersize=8,
linewidth=2, alpha=0.7, label=

最低0.47元/天 解锁文章
4478

被折叠的 条评论
为什么被折叠?



