我正在训练具有多个标签的 doc2vec 模型,因此它包含典型的文档“ID”标签,然后还包含一个标签标签“类别 1”。我正在尝试绘制结果图表,以便获得二维文档分布(使用 LargeVis),但能够为不同的标签着色。我的问题是模型返回的向量超过了训练观察数量 5,使得原始标签与向量对齐变得困难:
In[1]: data.shape
Out[1]: (17717,5)
使用 100 个参数训练模型
In[2]: model.docvecs.doctag_syn0.shape
Out[2]: (17722,100)
我不知道这 5 个额外的观察结果是否改变了向量的顺序,或者它们是否只是附加到末尾。我想避免对文档 ID 使用字符串标签,因为我正在准备此代码以在更大的数据集上使用。 我在google群里找到了解释https://groups.google.com/forum/#!topic/gensim/OdvQkwuADl0 这解释了每个文档使用多个标签可能会导致这种类型的输出。但是,我无法在任何论坛或文档中找到避免或纠正它的方法。
最佳答案
学习的文档向量数量将等于您提供的唯一标签的数量。看起来您可能提供了 17,717 个唯一 ID,然后提供了 5 个额外的重复类别标签。因此,共有 17,722 个已知的文档标签(以及相应的学习文档向量)。所以,这是预期的行为。
如果您只需将 17,717 个每个文档向量传递给其他进程(例如降维到 2 维),则必须将它们从模型中取出。您可以将它们一一取出 – model.docvecs[doc_id]
– 并将它们放入下一步需要的任何形式。
如果您的 doc-ID 恰好是从 0 到 17,716 的普通整数,那么它们实际上将是 model.docvecs.doctag_syn0
数组中的前 17,716 个条目,这可能会使事情变得更糟更容易 - 您可能只需使用该数组的 View 即可。 (最后五行将是字符串标签。)
我建议首先执行所有步骤,而不添加辅助类别字符串标记的额外复杂性。这些额外的标签可能有助于或损害不同情况下下游任务的向量有用性,但肯定(正如您所见)使事情变得更加复杂。因此,在没有这种复杂性的情况下获得基线结果和输出可能会有所帮助。
关于python - 无法对齐图形,因为多个标签 doc2vec 在 doctag_syn0 中返回的项目多于训练数据中的项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52707075/