我尝试逐步训练由 gensim 生成的 word2vec 模型。但是我发现词汇量并没有增加,只有 word2vec 模型权重更新了。但我需要同时更新词汇表和模型大小。
#Load data
sentences = []
....................
#Training
model = Word2Vec(sentences, size=100)
model.save("modelbygensim.txt")
model.save_word2vec_format("modelbygensim_text.txt")
#Incremental Training
model = Word2Vec.load('modelbygensim.txt')
model.train(sentences)
model.save("modelbygensim_incremental.txt")
model.save_word2vec_format("modelbygensim_text_incremental.txt")
最佳答案
默认情况下,gensim Word2Vec 只进行一次词汇发现。当您向初始构造函数(执行自动词汇扫描 and 训练)提供像您的句子
这样的语料库时,或者当您调用 build_vocab 时,它就会发生()
。虽然您可以继续调用 train()
,但不会识别任何新单词。
支持(我认为是实验性的)调用带有新文本示例的 build_vocab()
和 update=True
参数,以扩展词汇表。虽然这会让进一步的 train()
调用同时训练旧词和新词,但有许多注意事项:
- 这样的顺序训练可能不会导致模型像提供所有交错的示例一样好或自洽。 (例如,持续的训练可能会使从后面的批处理中学到的单词任意地远离未重新呈现的早期批处理中的单词/词义。)
- 对
train()
的此类调用应使用可选参数之一来准确估计新的批量大小(以文字或示例的形式),以便学习率衰减和进度记录是做得好 - 核心算法和基础理论不是基于这样的批处理,也不是从高到低多次重新开始学习率,因此结果的解释——以及结果向量的相对强度/平衡——不是有良好的基础
如果可能的话,将所有示例合并到一个语料库中,并进行一次大型词汇发现,然后进行训练。
关于python - gensim 中的增量 Word2Vec 模型训练,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42746007/