我知道您在训练期间将段落ID视为doc2vec中的新词(DM方法,图中左侧)。训练输出是上下文单词。在训练模型之后,假设我想在给定新文档的情况下进行1次嵌入。
我是否将每个单词提供给网络,然后对其进行平均以获得嵌入?或者还有另一种方式吗?
我可以将它提供给gensim,但我试图了解它是如何工作的。
在模型批量训练期间,候选文档向量逐渐被推动以更好地预测文本的单词,就像单词矢量训练一样。因此,在培训结束时,您可以获得与文本一起提供的所有标识符的doc-vectors。
您可以通过标识符的doct样式索引查找从gensim
Doc2Vec
模型访问这些(在gensim') you provided during training:
model.docvecs [tag]中称为'doctag')
训练后,为了获得新文本的doc-vector,使用推理过程。该模型被冻结,并且为该文本形成新的随机候选向量(就像那些开始对训练文本进行批量训练的向量)。然后它以一种完全类似于训练的方式逐渐轻推,以更好地预测单词 - 但只有这一个新的候选向量被改变。 (所有型号内部重量保持不变。)
您可以通过infer_vector()
方法计算这样的新向量,该方法采用应该像训练期间提供的文本一样进行预处理的单词列表:model.infer_vector(words)
。
我认为使用冻结模型的上述方法,只有随机的新段落向量和再训练应该更有效,但我看到一个声明,在某些情况下,简单地使用句子中所有单词向量的平均值更有效。