基于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官方文档

评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值