2

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

预训练模型是具有唯一id为label1_index的文档的训练模型,例如Good_0,Good_1到Good_999,训练数据的总大小约为7000

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

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

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

但是,上面的练习不会像从一开始就完全训练的那样起作用。

是继续火车无法正常工作还是我犯了一些错误?

4

1 回答 1

3

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

借用了很多功能的Word2Vec超类在其被调用的. 如果设置为 true,则该调用将添加而不是替换任何先前的词汇表。但是,截至 2018 年 2 月,此选项还不适用于,并且确实经常导致内存故障崩溃。Doc2Vecbuild_vocab()updatebuild_vocab()Doc2Vec

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

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

于 2018-02-21T19:08:43.587 回答