将 doc2vec 段落表示映射到训练后的类标签



我已经使用Pythongensim包中的Doc2Vec模块训练了文本文档中的Doc2Vec段落嵌入。通常,每个文档都使用唯一的 ID 进行标记,从而产生唯一的输出表示形式,如下所示(有关详细信息,请参阅此链接):

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

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

print(model.docvecs.count)

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

如果classA是您在训练期间提供的文档标签之一,则model.docvecs['classA']将返回从训练中为该标签学习的单个文档向量。

如果您有另一个新向量 - 例如通过model.infer_vector(words)推断新文本的向量,那么您可以通过model.docvecs.most_similar(positive=[new_vector])获得模型中哪些学习的文档向量最接近的列表。

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

但是,将所有类简化为单个摘要向量(为该标签学习的一个向量),然后只采用新文档的一个最接近的邻居,可能表现不佳。它在某种程度上强制假设类是 n 维空间中非常简单的形状。

对于分类,您可能希望让所有文档获取单个向量(不基于其已知类,或除了其已知类之外),然后在该集(doc-vector,label)标记数据上训练单独的分类器。这可以发现类之间更细粒度和奇怪形状的边界。

最新更新