gensim之word2vec增量训练

本文详细介绍如何使用word2vec进行增量训练,包括加载现有模型、更新词汇表、训练新数据集并保存更新后的模型和词向量。适用于希望扩展词汇覆盖范围或更新词向量的自然语言处理任务。

word2vec增量训练
python word2vec_add.py patent.model new_patent.txt patent_new.model patent_new.vector

import logging
import os.path
import sys
from gensim.models import Word2Vec
from gensim.models.word2vec import LineSentence

if __name__ == '__main__':
    program = os.path.basename(sys.argv[0])

    logger = logging.getLogger(program)
    logging.basicConfig(format='%(asctime)s: %(levelname)s: %(message)s')
    logging.root.setLevel(level=logging.INFO)

    logging.info('running %s' % ' '.join(sys.argv))

    if len(sys.argv) < 5:
        print(globals()['__doc__'] % locals())

    '''
    	model_path:已有模型对,对应patent.model
        inp:增加分好词的数据,对应new_patent.txt
        output_model:新保存的模型,对应patent_new.model
        output_txt:保存的词向量,对应patent_new.vector
    '''
    model_path, inp, output_model, output_txt = sys.argv[1:4]

    sentences = LineSentence(inp)
    model = Word2Vec.load(model_path)
    
    model.build_vocab(sentences, update=True)
    model.train(sentences, total_examples=2000000, epochs=5)
    model.save(output_model)
    
    model.wv.save_word2vec_format(output_txt, binary=False)

<think> 我们参考了上述引用中提供的代码示例,特别是引用[2]和引用[4],它们都给出了使用gensim训练Word2Vec模型的基本代码结构。 根据用户需求,我们给出一个完整的代码示例,并解释关键参数。 步骤: 1. 导入Word2Vec模型 2. 准备训练数据(语料),要求是一个列表的列表,每个子列表代表一个句子,句子中的每个元素是一个词(字符串) 3. 设置模型参数,包括vector_size(词向量维度)、window(上下文窗口大小)、min_count(最小词频,低于此频率的词将被忽略)、workers(并行线程数)等 4. 训练模型 5. 使用模型获取词向量或查找相似词等 注意:根据引用[4]中的示例,我们也可以保存和加载模型。 下面给出代码示例: </think>以下是使用 Gensim 训练 Word2Vec 模型的完整代码示例及说明: ```python from gensim.models import Word2Vec # 1. 准备训练数据(分词后的二维列表) sentences = [ ['自然', '语言', '处理', '是', '人工智能', '重要', '分支'], ['词向量', '表示', '是', 'NLP', '基础', '技术'], ['Word2Vec', '通过', '上下文', '学习', '词嵌入'], ['深度学习', '模型', '需要', '大量', '文本', '数据'] ] # 2. 训练模型(核心代码) model = Word2Vec( sentences=sentences, # 训练语料 vector_size=100, # 词向量维度(常用100-300) window=5, # 上下文窗口大小(左右各5个词) min_count=1, # 词频阈值(出现≥1次保留) workers=4, # 并行线程数 epochs=10, # 训练轮次 sg=0, # 0=CBOW, 1=Skip-gram hs=0, # 0=负采样, 1=分层Softmax negative=5 # 负采样数量 ) # 3. 使用模型 # 获取单个词向量 vector = model.wv['自然'] print(f"'自然'的词向量维度: {vector.shape}") # 查找相似词 similar_words = model.wv.most_similar('语言', topn=3) print("\n与'语言'最相似的词:", similar_words) # 4. 保存/加载模型 model.save("word2vec_model.bin") # 保存为二进制格式 loaded_model = Word2Vec.load("word2vec_model.bin") # 加载模型 ``` ### 关键参数说明 1. **vector_size**:词向量维度(通常100-300维) 2. **window**:上下文窗口大小(建议5-10) 3. **min_count**:过滤低频词(新闻语料建议≥5) 4. **sg**:训练算法 - `0`:CBOW(默认,训练速度快) - `1`:Skip-gram(适合低频词) 5. **hs**:优化算法 - `0`:负采样(负采样数量由`negative`指定) - `1`:分层Softmax ### 实际应用技巧 1. **预处理**:建议进行分词、去停用词、词干提取等预处理 2. **大数据集**:使用`LineSentence`流式读取大文件: ```python from gensim.models.word2vec import LineSentence sentences = LineSentence("large_corpus.txt") # 每行一个分词后的句子 ``` 3. **增量训练**: ```python model.build_vocab(new_sentences, update=True) model.train(new_sentences, total_examples=model.corpus_count, epochs=10) ``` > 示例中使用的语料较小,实际训练建议使用≥1GB的文本数据[^1][^2]。对于中文场景,需先使用结巴分词等工具进行分词处理[^4]。
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值