基于Gensim的Word2Vec增量式训练方法

11 篇文章 0 订阅
3 篇文章 0 订阅

        Word2Vec训练好以后,随着时间的积累,出现一些新词,此时可能需要在已有的模型基础上重新训练,以补充这些新词汇,亦即增量式训练。本文分析了基于Gensim的Word2Vec的增量式训练方法。
        数据: 以小说《人民的名义》,《明朝那些事儿》作为语料库,小说中出现的词语相对集中,且很容易找到未出现词,便于观察增量式训练效果。
        过程:首先以小说《人民的名义》作为语料库进行初次训练,共得到17821个词(含标点符号)。分别将模型保存为完整的gensim的Word2Vec形式以及简单的词-向量的字典形式。核心代码为:

model = Word2Vec(sentences, hs=1,min_count=1,window=3,size=100,iter=20)
model.save("people.bin")#保存完整的模型,除包含词-向量,还保存词频等训练所需信息
model.wv.save_word2vec_format("people.dict")#保存的模型仅包含词-向量信息


        然后尝试将《明朝那些事儿》作为新增语料进行增量式训练,结果如下: 
对于模型“people.bin”,可方便地进行增量式训练,通过以下三个主要步骤即可完成:

model = gensim.models.Word2Vec.load("people.bin")
model.build_vocab(new_sentences, update=True)
model.train(new_sentences,epochs=50,total_examples=model.corpus_count)


        经观察,进行增量式训练后,新模型不但补充新出现的词,而且会同时更新原模型中词向量表示。
        对于模型“people.dict”经尝试,如下方法具有可行性:

model = word2vec.Word2Vec(size=100,min_count=1,window=3, hs=1)
new_sentences = word2vec.LineSentence(file_name)
model.build_vocab(new_sentences)
model.intersect_word2vec_format(pretrained_w2v_format_model)
model.train(new_sentences,epochs=50,total_examples=model.corpus_count)


        方法首先构建一个全新的Word2Vec模型,其次加载新补充的语料库,然后通过intersect_word2vec_format函数初始化模型,最后进行训练。
        但需要注意:intersect_word2vec_format函数仅对model中存在的词进行初始化,不存在的词会不自动加入模型。因此,new_sentences中需要包含尽可能丰富的词汇,这样才能充分利用预训练模型的权重。此外,通过intersect_word2vec_format加载的预训练权重再次进行训练时保持不变。
        结论:无论模型保存为哪种形式,都存在增量式训练的方法,但都需要准备充足的语料库以保证训练效果。

        结果:top5相似度
             

“高育良”: [('侯亮平', 0.8233), ('沙瑞金', 0.7584), ('李达康', 0.7556), ('祁同伟', 0.72695), ('高小琴', 0.71649)]
“朱元璋”:[('朱棣', 0.7497), ('朱祁镇', 0.6280), ('朱允炆', 0.6159), ('陈友谅', 0.6068), ('文天祥', 0.6003)]
“的”:[('。', 0.70286), (',', 0.64858), ('是', 0.5866), ('和', 0.5827), ('在', 0.5667)]


        “高育良”一词是首次训练后得到的词,“朱元璋”一词是增量式训练后新添加的词。“的”在两次训练中语料库中均出现过,对于保存完整的模型,增量式训练会改变“的”的向量表示,但对于词-向量形式的模型,因为通过intersect_word2vec_format进行了初始化,增量训练前后,该词的词向量不会该变。
参考资料:

1. word2vec大规模语料库及模型初始化

2. gensim官方文档

好的,我可以为您讲解如何用gensim训练英文词向量。首先,您需要准备一份包含英文文本的语料库,可以是一个文本文件或者是一个文件夹中包含多个文本文件。然后,您需要安装gensim库以及其他相关依赖库。 接下来,您可以使用以下代码进行训练: ```python from gensim.models import Word2Vec import logging # 设置日志等级 logging.basicConfig(format='%(asctime)s : %(levelname)s : %(message)s', level=logging.INFO) # 读取语料库 with open('corpus.txt', 'r') as f: corpus = f.readlines() # 对文本进行预处理,例如分词、去除停用词等 processed_corpus = [[word for word in document.lower().split() if word.isalpha()] for document in corpus] # 训练模型 model = Word2Vec(processed_corpus, size=100, window=5, min_count=5, workers=4) # 保存模型 model.save('word2vec.model') ``` 在上述代码中,`size`参数表示词向量的维度,`window`参数表示窗口大小,`min_count`参数表示词频阈值,`workers`参数表示训练时使用的线程数。您可以根据需要调整这些参数。 训练完成后,您可以使用以下代码加载模型并进行相关操作: ```python # 加载模型 model = Word2Vec.load('word2vec.model') # 获取某个词的向量 vector = model.wv['word'] # 查找与某个词最相似的词 similar_words = model.wv.most_similar('word') ``` 以上就是使用gensim训练英文词向量的基本流程和操作,希望对您有帮助。
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值