gensim doc2vec 从预训练模型训练更多文档

gensim doc2vec train more documents from pre-trained model

我正在尝试使用预训练模型训练新标记文档 (TaggedDocument)。

Pretrained model 是训练好的模型,文档的唯一id为label1_index,例如Good_0, Good_1 to Good_999 训练数据的总大小约为7000

现在,我想用新文档训练预训练模型,这些文档的唯一 ID 为 label2_index,例如 Bad_0、Bad_1... 到 Bad_1211 而训练好的数据总大小约为1211

火车本身是成功的,没有任何错误,但问题是每当我尝试使用 'most_similar' 时,它只建议标有 Good_... 的类似文档,而我希望标有 Bad_。

如果我从一开始就完全训练,它会给我预期的答案 - 它会推断出一个新给定的文档,类似于标记为好或坏。

但是,上面的练习完全不像一开始训练的那样有效。

是续行列车运行不正常还是我操作有误?

gensim Doc2Vec class 总是可以通过 train() 提供额外的示例,但它只能发现 word-tokens 和 document-tags 的工作词汇在最初的 build_vocab() 步骤中。因此,除非 words/tags 在 build_vocab() 期间可用,否则以后它们将被忽略为未知。 (文字会从文本中悄悄删除;标签不会在模型中训练或记住。)

Doc2Vec 从中借鉴了很多功能的 Word2Vec superclass 在其 build_vocab() 上有一个更新的 more-experimental 参数,称为 update.如果设置为 true,对 build_vocab() 的调用将添加而不是替换任何先前的词汇表。然而,截至 2018 年 2 月,此选项还不适用于 Doc2Vec,并且确实经常导致 memory-fault 崩溃。

但即使 if/when 可以工作,提供增量训练示例也不一定是个好主意。通过只更新模型的一部分——那些被新例子练习过的部分——整个模型可能会变得更糟,或者它的向量彼此之间变得更少 self-consistent。 (这些 dense-embedding 模型的本质是对 所有 不同示例的优化导致 generally-useful 向量。仅对某些子集进行训练会导致模型向仅在该子集上表现良好,可能会比之前的示例付出代价。)

如果您需要新示例也成为 most_similar() 结果的一部分,您可能希望在 Doc2Vec 之外创建自己的单独 set-of-vectors。当你为新文本推断新向量时,你可以将它们添加到那个外部集合,然后实现你自己的 most_similar()(使用 gensim 代码作为模型)来搜索这个扩展的向量集,而不仅仅是由初始批量 Doc2Vec 训练创建的固定集。