【问题标题】:Mapping doc2vec paragraph representation to its class tag post-training将 doc2vec 段落表示映射到训练后的类标签
【发布时间】:2019-09-28 06:52:08
【问题描述】:

我已经使用 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

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

print(model.docvecs.count)

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

【问题讨论】:

    标签: python gensim word2vec text-classification doc2vec


    【解决方案1】:

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

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

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

    但是,将所有类减少到仅一个汇总向量(为该标签学习的一个向量),然后仅采用新文档的一个最近邻,可能效果不佳。它在某种程度上强制假设类是 n 维空间中非常简单的形状。

    对于分类,您可能希望让所有文档获得单独的向量(不是基于它们的已知类,或者除了它们的已知类之外),然后在该组(文档向量,标签)上训练一个单独的分类器-数据。这可能会发现类之间更细粒度且形状奇特的边界。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-08-30
      • 2020-03-28
      • 1970-01-01
      • 2020-04-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多