将 doc2vec 段落表示映射到其 class 标记 post-training

Mapping doc2vec paragraph representation to its class tag post-training

我使用 Python 的 gensim 包中的 Doc2Vec 模块在文本文档上训练了 Doc2Vec 段落嵌入。通常每个文档都带有唯一 ID 标记,从而产生唯一的输出表示,如下所示(详见 this link):

def tag_docs(docs, col):
    tagged = docs.apply(lambda r: TaggedDocument(words=simple_preprocess(r[col]), tags=[r.label]), axis=1)
    return tagged

但是,您也可以用相同的标签标记一组文档,以训练 class 表示,这就是我在这里所做的。您可以使用以下命令查询输出表示的数量:

print(model.docvecs.count)

我的问题如下:我训练了 n class 个文档的模型,在 model.docvecs 中产生了 n 个文档向量。现在我想将每个文档向量映射到相应的 class 标签。如何确定哪个向量与哪个标签相关联?

如果 classA 是您在训练期间提供的 document-tags 之一,那么 model.docvecs['classA'] 将 return 为该标签学习的单个 doc-vector从培训。

如果您有另一个新向量——例如通过 model.infer_vector(words) 推断新文本的向量,那么您可以通过 [=13] 获得模型中学习到的 doc-vector 最接近的列表=].

如果您的真正目标是将新文档分类为其中的一个(或多个)类,那么采用前 most_similar() 结果是一种粗略的方法。

但是将所有 类 减少到一个单一的汇总向量(为该标签学习的一个向量),然后只取 new-document 中的一个 nearest-neighbor,可能不会表现良好。它在某种程度上迫使人们假设 类 是 n-dimensional space 中非常简单的形状。

对于分类,您可能希望让所有文档获得单独的向量(不是基于它们已知的 类,或者除了它们已知的 类),然后在其上训练一个单独的分类器一组(doc-vector,标签)labeled-data。这可以发现 finer-grained 和 类 之间的 oddly-shaped 边界。