Day06【使用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=
使用gensim库训练词向量通常使用`Word2Vec`模型,以下是几种不同场景下的使用示例: ### 基本训练示例 ```python import gensim # 示例句子 sentences = [ 'I am a good student'.split(), 'Good good study day day up'.split() ] # 训练word2vec模型 model = gensim.models.Word2Vec(sentences, size=100, window=5, min_count=2, workers=10) # 打印单词'good'的词向量 print(model.wv.word_vec('good')) # 打印和'good'相似的前2个单词 print(model.wv.most_similar('good', topn=2)) # 保存模型到文件 model.save('w2v.model') ``` 此示例展示了如何使用`Word2Vec`模型对给定的句子列表进行训练,同时演示了如何获取特定单词的词向量、查找相似单词以及保存模型 [^2]。 ### 从文件读取语料训练 ```python import gensim # 从文件中读取语料 sentences = gensim.models.word2vec.Text8Corpus("corpus_cut.txt") print("sentences格式:", sentences) # 训练skip - gram模型 model = gensim.models.Word2Vec(sentences, size=5, min_count=2, window=3, iter=15) # 保存词向量到文件 model.wv.save_word2vec_format('vector.txt', binary=False) ``` 该示例展示了如何从文件中读取语料进行训练,并将训练好的词向量保存到文件中 [^4]。 ### 另一种基本训练示例 ```python import gensim # 训练word2vec模型 model = gensim.models.Word2Vec(sentences, size=100, window=5, min_count=5, workers=4) # 保存模型 model.save("gensim_word2vec.model") ``` 此示例同样是使用`Word2Vec`模型进行训练并保存模型 [^1]。 ### 参数说明 - `size`:词向量的维度,例如上述示例中的`size=100`或`size=5`。 - `window`:表示当前词与预测词在一个句子中的最大距离。 - `min_count`:词频小于`min_count`的单词将被忽略。 - `workers`:用于训练模型的线程数。 - `cbow_mean`:仅用于CBOW在做投影的时候,为0,则算法中的`xw`为上下文的词向量之和,为1则为上下文的词向量的平均值,默认值为1 [^3]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值