繁体   English   中英

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

[英]gensim doc2vec train more documents from pre-trained model

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

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

现在,我想用带有 label2_index 的唯一 id 的新文档训练预训练模型,例如 Bad_0, Bad_1... to Bad_1211 训练数据的总大小约为 1211

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

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

但是,上述练习不会像从一开始就完全训练的那样奏效。

是继续训练不能正常工作还是我犯了一些错误?

gensim Doc2Vec类总是可以通过train()提供额外的例子,但它只在初始build_vocab()步骤期间发现单词标记和文档标签的工作词汇。 因此,除非单词/标签在build_vocab()期间可用,否则它们将被忽略为未知。 (单词从文本中悄悄地删除;标签在模型中没有经过训练或记住。)

Word2Vec Doc2Vec借用了很多功能的Word2Vec超类在其build_vocab()上有一个更新的、更具实验性的参数,称为update 如果设置为 true,则对build_vocab()调用将添加而不是替换任何先前的词汇表。 但是,截至 2018 年 2 月,此选项尚不适用于Doc2Vec ,并且确实经常导致内存故障崩溃。

但即使/何时可以实现,提供增量训练示例也不一定是一个好主意。 通过只更新模型的一部分——那些由新例子练习的部分——整个模型可能会变得更糟,或者它的向量相互之间的自洽性降低。 (这些密集嵌入模型的本质是对所有不同示例的优化会产生普遍有用的向量。仅对某些子集进行训练会导致模型仅在该子集上趋于良好,这可能会以早期示例为代价。)

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM