gpt4 book ai didi

gensim - 更新 gensim Doc2Vec 模型的训练文档

转载 作者:行者123 更新时间:2023-12-05 01:00:58 49 4
gpt4 key购买 nike

我有一个现有的 gensim Doc2Vec 模型,我正在尝试对训练集以及模型进行迭代更新。

我拿新文件,照常进行预处理:

stoplist = nltk.corpus.stopwords.words('english')
train_corpus= []
for i, document in enumerate(corpus_update['body'].values.tolist()):
train_corpus.append(gensim.models.doc2vec.TaggedDocument([word for word in gensim.utils.simple_preprocess(document) if word not in stoplist], [i]))

然后我加载原始模型,更新词汇表并重新训练:

#### Original model
## model = gensim.models.doc2vec.Doc2Vec(dm=0, size=300, hs=1, min_count=10, dbow_words= 1, negative=5, workers=cores)

model = Doc2Vec.load('pvdbow_model_6_06_12_17.doc2vec')

model.build_vocab(train_corpus, update=True)

model.train(train_corpus, total_examples=model.corpus_count, epochs=model.iter)

然后我通过附加新数据来更新训练集 Pandas 数据框,并重置索引。

corpus = corpus.append(corpus_update)
corpus = corpus.reset_index(drop=True)

但是,当我尝试将 infer_vector() 与 更新的 模型一起使用时:

inferred_vector = model1.infer_vector(tokens)
sims = model.docvecs.most_similar([inferred_vector], topn=len(model.docvecs))

结果质量很差,表明模型和训练集数据帧的索引不再匹配。

当我将它与 未更新 训练集数据框(再次使用更新后的模型)进行比较时,结果很好 - 不过,显然我错过了新文档。

无论如何都要更新两者,因为我希望能够在不完全重新训练模型的情况下对模型进行频繁更新?

最佳答案

Gensim Doc2Vec 还没有官方支持扩展词汇表(通过 build_vocab(..., update=True)),所以模型的行为这里没有定义做任何有用的事情。事实上,我认为任何现有的 doc-tags 都将被完全丢弃并替换为最新语料库中的任何一个。 (此外,当尝试将 update_vocab()Doc2Vec 一起使用时,还有 Unresolved 内存故障进程崩溃报告,例如 this issue。)

即使这样可行,如果继续在文本与初始训练集不同的模型上调用 train(),仍需要考虑许多模糊的平衡问题。特别是,每次这样的训练类(class)都会插入模型在新示例上更好,但会失去原始训练的值(value),可能会使模型在某些情况下或整体上变得更糟。

随着语料库不断增长,最合理的策略是偶尔从头开始重新训练,将所有训练示例合并到一个语料库中。 my recent post to the gensim discussion list 中讨论了对模型滚动更新的可能过程的另一个概要。 .

关于您的设置的其他一些评论:

  • 同时使用hierarchical-softmax (hs=1) 和负采样(negative > 0)会增加模型大小和训练时间,但可能不会与仅使用一种具有更多迭代(或其他调整)的模式相比,它具有任何优势——因此很少有两种模式都处于事件状态

  • 通过不指定 iter,您使用的是“5”的 default-inherited-from-Word2Vec,而已发布的 Doc2Vec 作品通常使用 10-20 次或更多次迭代

  • 许多报告 infer_vector 可以更好地使用其可选参数 steps 的更高值(默认只有 5),和/或具有较小的 alpha 值(默认为 0.1)

关于gensim - 更新 gensim Doc2Vec 模型的训练文档,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47775557/

49 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com