Parameters 如何在不使用Gensim Doc2Vec中的培训文档的情况下更改已保存模型的参数?

Parameters 如何在不使用Gensim Doc2Vec中的培训文档的情况下更改已保存模型的参数?,parameters,model,gensim,doc2vec,Parameters,Model,Gensim,Doc2vec,我预处理我的文档,训练我的模型,并按照此处给出的准则保存它: 一段时间后,我想用不同的参数重新训练我的模型。然而,我不想再对文档进行预处理并创建“训练语料库”,因为它需要将近3天的时间。是否有一种解决方案可以轻松加载保存的模型、更改参数并使用以下代码的这些新参数对模型进行培训: model = Doc2Vec.load(myPath/myModel.doc2vec) model = gensim.models.doc2vec.Doc2Vec(vector_size=300, min_count=

我预处理我的文档,训练我的模型,并按照此处给出的准则保存它:

一段时间后,我想用不同的参数重新训练我的模型。然而,我不想再对文档进行预处理并创建“训练语料库”,因为它需要将近3天的时间。是否有一种解决方案可以轻松加载保存的模型、更改参数并使用以下代码的这些新参数对模型进行培训:

model = Doc2Vec.load(myPath/myModel.doc2vec)
model = gensim.models.doc2vec.Doc2Vec(vector_size=300, min_count=2, epochs=40, dm=1, window=8)
model.build_vocab(train_corpus)
model.train(train_corpus, total_examples=model.corpus_count, epochs=model.epochs)

最好。

首先,请注意,当前代码的这一部分与加载的模型无关,因为它会立即被第二行从头开始实例化模型所创建的新模型所取代:

model=Doc2Vec.load(myPath/myModel.Doc2Vec)
model=gensim.models.doc2vec.doc2vec(vector_size=300,min_count=2,epochs=40,dm=1,window=8)
第二,一般来说,您可以在
.build\u vocab()
步骤之后
.save()
一个模型,然后为以后的多个培训课程重新加载该模型。而且,可以直接更改模型的一组参数,只需在训练之前为它们分配新值(如
d2v_model.window=10
),即可对其产生影响。例如:

d2v_模型=Doc2Vec(向量大小=300,最小计数=2,时代=40,dm=1,窗口=8)
d2v_模型。构建_语音库(培训_文本)
d2v_model.save(基本_model_路径)
然后,稍后:

d2v\u模型w10=Doc2Vec.load(基本模型路径)
d2v_型号_w10.window=10
d2v_模型_w10.train(训练文本,总示例=d2v_模型_w10.corpus_count,epochs=d2v_模型_w10.epochs)
.build\u vocab()
修改后,此修改应能正常工作的一些模型参数包括:

  • 窗口
  • sg
    (在
    Word2Vec
    中)或
    dm
    /
    dbow\u words
    (在
    Doc2Vec
    中)
  • 负值
    (如果在正值之间变化)
  • 工人
  • alpha
    minu-alpha
但是,主要影响
.build\u vocab()
步骤(包括发现工作词汇表和分配起始向量,或预先计算基于词汇表的值)的参数,如果在运行
.build\u vocab()
后进行修改,不会改变模型行为。其中一些参数包括:

  • vector\u size
    (因为
    .build\u vocab()
    的最后一步分配向量)
  • min\u count
    max\u final\u vocab
    trim\u rule
  • hs
    (或在零和正数之间更改
    负数
  • 示例
    ns\u指数
    (阈值表在
    中计算。build\u vocab
(在更专业的层面上,可以在昂贵的第一次词汇表扫描之后,但在最后的步骤之前保存模型。这将允许对大多数词汇表进行加载,然后进行更改-但您应该查看提示。您永远不必调用
。build_vocab()
,而是自己调用扫描步骤,然后
。save()
。然后在
.load()
&更改参数后,调用
.prepare\u vocab()
。prepare\u weights()
步骤。)

最后,与您的主要问题分开,如果您的语料库足够大,培训步骤需要3天,那么需要考虑以下事项:

  • epochs=40
    可能过多-许多已发表的作品只使用10-20个时代,在较小的训练集上更经常需要更多的时代
  • 对于大型语料库,使用更大的
    minu count
    通常会缩短模型大小和训练时间,而不会影响质量,甚至会提高质量(通过消除很少出现的单词,这些单词永远不会变成噪音)
  • 对于大型语料库,更具攻击性(更小)的
    sample
    值可以节省大量时间,特别是对于具有子频的真实自然语言文本。(频繁使用的单词不需要如此多的重复训练,因此更积极地跳过它们既可以节省时间,又可以提高对较罕见单词的相对关注度和质量。)

您想更改哪些参数?您每次都在使用相同的培训语料库吗?是的,培训语料库将保持不变。我将调整向量大小、时代、dm和窗口。谢谢@gojomo,非常有用和详细的解释。特别感谢最后的提示,我将应用它们。关于主要概念,因为我需要修改窗口大小,所以对语料库进行预处理会更好,因为我不是调用.build_vocab()部件的专家。