我正在训练一个多标签的doc2vec模型,因此它包括典型的文档“ID”标签,还包含一个标签“类别1”。我试图绘制结果,以便在二维图中(使用LargeVis)显示文档分布,并且能够为不同的标签着色。我的问题是模型返回的向量数量比训练观察值多5个,这使得将原始标签与向量对齐变得困难:
In[1]: data.shape Out[1]: (17717,5)
在100个参数上训练模型
In[2]: model.docvecs.doctag_syn0.shapeOut[2]: (17722,100)
我不知道这额外的5个观察值是否会改变向量的顺序,或者它们是否只是追加到末尾。我想避免对文档ID使用字符串标签,因为我正在准备这部分代码以便在更大的数据集上使用。我在一个谷歌小组中找到了一个解释 https://groups.google.com/forum/#!topic/gensim/OdvQkwuADl0,该解释说明每个文档使用多个标签可能会导致这种类型的输出。然而,我还没有找到任何方法来避免或纠正这种情况,无论是在论坛还是文档中。
回答:
学习的文档向量数量将等于您提供的唯一标签数量。看起来您可能提供了17,717个唯一ID,然后是5个重复的类别标签。因此,总共有17,722个已知的文档标签(以及相应的学习文档向量)。所以,这是预期的行为。
如果您需要将这17,717个每文档向量传递给其他过程(如降维到2维),您将需要从模型中提取它们。您可以逐个提取它们 – model.docvecs[doc_id]
– 并将它们放入下一步所需的任何形式。
如果您的文档ID碰巧是简单的整数,从0到17,716,那么它们实际上将是model.docvecs.doctag_syn0
数组中的前17,716个条目,这可能会使事情变得更简单 – 您可能只需使用该数组的一个视图。(最后五行将是字符串标签。)
我建议您先在没有添加次要类别字符串标签的额外复杂性情况下完成所有步骤。这样的额外标签在不同的情况下可能会帮助或损害向量在下游任务中的有用性,但肯定(如您所见)会使事情变得稍微复杂一些。因此,在没有这种复杂性的情况下获得基线结果和输出可能会有所帮助。