gensim doc2vec - 如何推断标签
gensim doc2vec - How to infer label
我正在使用 gensim 的 doc2vec 实现,并且我有几千个带有四个标签的文档。
yield TaggedDocument(text_tokens, [labels])
我正在使用这些 TaggedDocument 的列表训练 Doc2Vec 模型。但是,我不确定如何推断在训练期间未看到的文档的标签。我看到有一个 infer_vector 方法,它 returns 嵌入向量。但是我怎样才能从中得到最有可能的标签呢?
一个想法是推断我拥有的每个标签的向量,然后计算这些向量与我要分类的新文档的向量之间的余弦相似度。这是要走的路吗?如果是这样,我怎样才能为我的四个标签中的每一个获取向量?
我找到了解决方案:
model.docvecs['my_tag']
为我提供给定标签的矢量。简单
infer_vector()
方法将为新文本训练文档向量,它应该是像训练文本一样经过预处理的标记列表)。
并且,正如您所指出的,model.docvecs['my_tag']
将获得训练期间已知的标签之一的预训练文档向量。
根据所有已知标签的向量检查新向量的相似性,是查看新文档与哪些现有标签相似的合理基准方法。作为一种 'nearest-neighbor' 方法,最接近的标签或最接近的几个标签可能是未知文档的合理标签。
但是,请注意 original/usual Doc2Vec
方法是给每个文档一个唯一的 ID,并让每个 ID 标签都有自己的向量。然后,也许,使用那些带有已知标签的向量来训练一些 other 分类器,将向量映射到标签。 (在某些情况下,如果人类与特定标签 关联的 "areas of the doc-vector space" 不是 每个标签的单个质心点周围的整齐半径,这在某些情况下可能会更好。)
您使用或添加已知标签作为文档标签的方法通常会有所帮助。但还要注意,如果您只在数千个文档中使用 4 个唯一标签,这在功能上与仅使用 4 个巨型文档训练模型非常相似——这可能不擅长将这 4 个向量定位在大维 space(> 4 维),因为没有那么多 variety/subtle-contrasts 需要将经过训练的向量推入有用的排列。 (典型的已发表 Doc2Vec
作品使用数万到数百万个独特的文档和文档标签。)
我正在使用 gensim 的 doc2vec 实现,并且我有几千个带有四个标签的文档。
yield TaggedDocument(text_tokens, [labels])
我正在使用这些 TaggedDocument 的列表训练 Doc2Vec 模型。但是,我不确定如何推断在训练期间未看到的文档的标签。我看到有一个 infer_vector 方法,它 returns 嵌入向量。但是我怎样才能从中得到最有可能的标签呢?
一个想法是推断我拥有的每个标签的向量,然后计算这些向量与我要分类的新文档的向量之间的余弦相似度。这是要走的路吗?如果是这样,我怎样才能为我的四个标签中的每一个获取向量?
我找到了解决方案:
model.docvecs['my_tag']
为我提供给定标签的矢量。简单
infer_vector()
方法将为新文本训练文档向量,它应该是像训练文本一样经过预处理的标记列表)。
并且,正如您所指出的,model.docvecs['my_tag']
将获得训练期间已知的标签之一的预训练文档向量。
根据所有已知标签的向量检查新向量的相似性,是查看新文档与哪些现有标签相似的合理基准方法。作为一种 'nearest-neighbor' 方法,最接近的标签或最接近的几个标签可能是未知文档的合理标签。
但是,请注意 original/usual Doc2Vec
方法是给每个文档一个唯一的 ID,并让每个 ID 标签都有自己的向量。然后,也许,使用那些带有已知标签的向量来训练一些 other 分类器,将向量映射到标签。 (在某些情况下,如果人类与特定标签 关联的 "areas of the doc-vector space" 不是 每个标签的单个质心点周围的整齐半径,这在某些情况下可能会更好。)
您使用或添加已知标签作为文档标签的方法通常会有所帮助。但还要注意,如果您只在数千个文档中使用 4 个唯一标签,这在功能上与仅使用 4 个巨型文档训练模型非常相似——这可能不擅长将这 4 个向量定位在大维 space(> 4 维),因为没有那么多 variety/subtle-contrasts 需要将经过训练的向量推入有用的排列。 (典型的已发表 Doc2Vec
作品使用数万到数百万个独特的文档和文档标签。)