将 doc2vec 段落表示映射到其 class 标记 post-training
Mapping doc2vec paragraph representation to its class tag post-training
我使用 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
但是,您也可以用相同的标签标记一组文档,以训练 class 表示,这就是我在这里所做的。您可以使用以下命令查询输出表示的数量:
print(model.docvecs.count)
我的问题如下:我训练了 n
class 个文档的模型,在 model.docvecs
中产生了 n
个文档向量。现在我想将每个文档向量映射到相应的 class 标签。如何确定哪个向量与哪个标签相关联?
如果 classA
是您在训练期间提供的 document-tags 之一,那么 model.docvecs['classA']
将 return 为该标签学习的单个 doc-vector从培训。
如果您有另一个新向量——例如通过 model.infer_vector(words)
推断新文本的向量,那么您可以通过 [=13] 获得模型中学习到的 doc-vector 最接近的列表=].
如果您的真正目标是将新文档分类为其中的一个(或多个)类,那么采用前 most_similar()
结果是一种粗略的方法。
但是将所有 类 减少到一个单一的汇总向量(为该标签学习的一个向量),然后只取 new-document 中的一个 nearest-neighbor,可能不会表现良好。它在某种程度上迫使人们假设 类 是 n-dimensional space 中非常简单的形状。
对于分类,您可能希望让所有文档获得单独的向量(不是基于它们已知的 类,或者除了它们已知的 类),然后在其上训练一个单独的分类器一组(doc-vector,标签)labeled-data。这可以发现 finer-grained 和 类 之间的 oddly-shaped 边界。
我使用 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
但是,您也可以用相同的标签标记一组文档,以训练 class 表示,这就是我在这里所做的。您可以使用以下命令查询输出表示的数量:
print(model.docvecs.count)
我的问题如下:我训练了 n
class 个文档的模型,在 model.docvecs
中产生了 n
个文档向量。现在我想将每个文档向量映射到相应的 class 标签。如何确定哪个向量与哪个标签相关联?
如果 classA
是您在训练期间提供的 document-tags 之一,那么 model.docvecs['classA']
将 return 为该标签学习的单个 doc-vector从培训。
如果您有另一个新向量——例如通过 model.infer_vector(words)
推断新文本的向量,那么您可以通过 [=13] 获得模型中学习到的 doc-vector 最接近的列表=].
如果您的真正目标是将新文档分类为其中的一个(或多个)类,那么采用前 most_similar()
结果是一种粗略的方法。
但是将所有 类 减少到一个单一的汇总向量(为该标签学习的一个向量),然后只取 new-document 中的一个 nearest-neighbor,可能不会表现良好。它在某种程度上迫使人们假设 类 是 n-dimensional space 中非常简单的形状。
对于分类,您可能希望让所有文档获得单独的向量(不是基于它们已知的 类,或者除了它们已知的 类),然后在其上训练一个单独的分类器一组(doc-vector,标签)labeled-data。这可以发现 finer-grained 和 类 之间的 oddly-shaped 边界。