我试图建立一个包含大约10k句子的doc2vec模型,此后,我将使用该模型在某些新句子的模型中找到最相似的句子。
我使用我拥有的语料库(10k个句子)训练了gensim doc2vec模型。该模型可以在某种程度上告诉我新句子是否与语料库中的某些句子相似。 但是,有一个问题:语料库中可能不存在新句子中的单词,这意味着它们没有单词嵌入。如果发生这种情况,预测结果将不会很好。 据我所知,训练有素的doc2vec模型确实具有doc向量矩阵和词向量矩阵。所以我在想的是加载一组包含大量单词的预训练词向量,然后训练模型以获取doc向量。是否有意义? gensim是否可能?还是有另一种方法?
答案 0 :(得分:0)
与您可能会猜到的不同,典型的Doc2Vec
训练不会先训练词向量,然后使用这些词向量组成doc向量。而是,在使用单词向量的模式中,单词向量与doc向量一起以同时,交错的方式训练,两者都一起改变。在一种快速且性能良好的模式下,PV-DBOW(gensim中的dm=0
)根本不训练或使用字向量。
因此,gensim Doc2Vec
不支持从其他位置进行预加载状态,即使支持,也可能无法提供您期望的收益。 (您可以浏览源代码,也可以自己执行一些初始化步骤来强制执行。但是,如果单词位于预加载集中,而训练数据中不是,则对其余的活跃单词会在与导入但未训练的“外国”单词不兼容的方向上调整整个模型,这只是模型状态的交错式,拔河式协同训练,使得各个向量之间的关系有意义彼此。)
最直接,最可靠的策略是尝试通过从相似/兼容的域中查找更多文档来扩展您的训练语料库,以包含您以后可能遇到的任何单词的多个不同示例。 (如果您认为其他词向量适合您的领域,那么也许用于训练这些词向量的文本可以混入您的训练语料库中。这是从其中输入词/文档数据的一种合理方法在模型中处于平等地位的其他来源。)
而且,随着新文档的到来,您还可以偶尔使用现在扩展的语料库从头开始重新训练模型,让新文档同样为模型的词汇量和建模强度做出贡献。