基于Gensim实现word2vec词向量增量训练

12 篇文章 1 订阅

为什么要增量训练:

相信大家遇到像我一样的问题,当训练完一个word2vec词向量模型之后,又新来了一批语料,怎么实现在不改变原有模型的基础上,将新来的一批语料中新产生的词语训练成向量添加进去呢?由于原来的训练完的模型是经过几个小时甚至更长的时间才训练好的,不想重新进行训练,浪费时间,这时候增量训练就可以发挥其作用,

下面将介绍增量训练的实现过程:

具体代码实现如下:

#!/usr/bin/python
# -*- coding: UTF-8 -*-
"""
@author:Administrator
@file:增量训练测试.py
@time:2019/08/05
"""
from gensim.models.word2vec import Word2Vec
class TrainWord2Vec:
    def __init__(self, num_features=50, min_word_count=1, context=5, incremental=True,old_path='./model1/news.word2vec'):
        """
        定义变量
        :param data: 用于训练胡语料
        :param stopword: 停用词表
        :param num_features:  返回的向量长度
        :param min_word_count:  最低词频
        :param context: 滑动窗口大小
        :param incremental: 是否进行增量训练
        :param old_path: 若进行增量训练,原始模型路径
        """
        # self.data = data
        # self.stopword = stopword
        self.num_features = num_features
        self.min_word_count = min_word_count
        self.context = context
        self.incremental = incremental
        self.old_path = old_path

    def get_text(self):
        corpus = []
        #打开分词后的文本
        for line in open('./data/P2_keywords.txt', 'r', encoding='utf-8'):
            text = line.strip().split(' ')
            corpus.append(text)
        print(corpus)
        return corpus

    def get_model(self, text):
        """
        从头训练word2vec模型
        :param text: 经过清洗之后的语料数据
        :return: word2vec模型
        """
        model = Word2Vec(sentences = text, size=self.num_features, min_count=self.min_word_count, window=self.context)
        return model

    def update_model(self, text):
        """
        增量训练word2vec模型
        :param text: 经过清洗之后的新的语料数据
        :return: word2vec模型
        """
        model = Word2Vec.load(self.old_path)  # 加载旧模型
        model.build_vocab(text, update=True)  # 更新词汇表
        model.train(sentences = text, total_examples=model.corpus_count, epochs=model.iter)  # epoch=iter语料库的迭代次数;(默认为5)  total_examples:句子数。
        return model

    def main(self):
        """
        主函数,保存模型
        """
        # 加入自定义分词词表
        # jieba.load_userdict("add_word.txt")
        text = self.get_text()
        if self.incremental:
            model = self.update_model(text)
        else:
            model = self.get_model(text)
        # 保存模型
        model.save("./model1/word2vec_new.model")
        model.wv.save_word2vec_format('./model1/word2vec_format_new1.txt')

if __name__ == '__main__':
    trainmodel = TrainWord2Vec()
    trainmodel.main()

 

参考:https://blog.csdn.net/qq_43404784/article/details/83794296

  • 5
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Steven灬

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值