我正在使用gensim的doc2vec实现,并且有几千个带有四个标签的文档。
yield TaggedDocument(text_tokens, [labels])
我正在使用这些 TaggedDocument 的列表来训练Doc2Vec模型。但是,我不确定如何为培训期间未看到的文档推断标签。我看到有一个infer_vector方法返回嵌入向量。但是如何从中获得最可能的标签?
一个想法是推断我拥有的每个标签的向量,然后计算这些向量与我要分类的新文档的向量之间的余弦相似度。这是要走的路吗?如果是这样,如何获得四个标签中每个标签的向量?
答案 0 :(得分:3)
infer_vector()
方法将为新文本训练文档向量,该文本向量应该是像训练文本一样经过预处理的令牌列表)。
而且,正如您已经指出的,model.docvecs['my_tag']
将获得训练期间已知的其中一个标签的预训练文档向量。
相对于所有已知标签的矢量,检查新矢量的相似性是一种合理的基线方法,以查看新文档与哪些现有标签相似。最接近的标签,或者说最接近的几个标签,可能是未知文档的合理标签,作为一种“最近邻居”方法。
但是,请注意,原始/常用的Doc2Vec
方法是给每个文档一个唯一的ID,并让每个ID标签获得自己的向量。然后,也许可以使用带有已知标签的向量来训练一些 other 分类器,将向量映射到标签。 (在某些情况下,如果人类与特定标签相关联的“文档向量空间区域”在每个标签的单个质心点周围没有整齐的半径,则可能会更好。)< / p>
您使用或添加已知标签作为doc标签的方法通常会有所帮助。还要注意的是,如果您仅在数千个文档中使用4个唯一标签,则其功能与仅用4个巨型文档训练模型非常相似–可能不适合将这4个向量放置在大尺寸空间中(> 4维),因为将训练后的向量微调成有用的排列并不需要太多的变化/细微的对比。 (典型的已发布的Doc2Vec
作品使用了数万个独特的文档和文档标签。)
答案 1 :(得分:1)
我找到了解决方法:
model.docvecs['my_tag']
为我提供给定标签的向量。容易