Gensim:doc2vec 是模型还是操作?与 R 实现的差异

问题描述

我的任务是将文档向量模型投入生产。 我是 R 用户,所以我的原始模型是用 R 语言编写的。我们的方法之一是用 Python 重新创建代码和模型。

我对 doc2vec 的 Gensim 实现感到困惑

在 R 中工作的过程是这样的:

离线


  • 使用 text2vec 包中的函数(即 glove 或 GlobalVectors)在大型语料库上训练词向量这给了我一个大型词向量文本文件

  • 在 ML 步骤发生之前,doc2vec 库中的 TextTinyR 函数用于将每段文本从更小、更具体的训练语料库转换为向量。 这不是机器学习步骤。没有训练任何模型doc2vec 函数有效地聚合了句子中的词向量,与查找向量的总和或均值的意义相同,但其方式保留了有关词序的信息。

  • 然后在这些较小的文本语料库上训练各种模型。


在线


  • 使用预训练的词向量将新文本转换为文档向量。
  • 将文档向量输入预训练模型以获得输出分类

我为 Gensim 找到的示例代码似乎与此完全不同。

gensim 中,Doc 向量是与您可以训练的词向量不同的一类模型。似乎在某些情况下,词向量和文档向量都是同时训练的。以下是教程和 stackoverflow 答案中的一些示例:

https://medium.com/@mishra.thedeepak/doc2vec-simple-implementation-example-df2afbbfbad5

How to use Gensim doc2vec with pre-trained word vectors?

How to load pre-trained model with in gensim and train doc2vec with it?

gensim(1.0.1) Doc2Vec with google pretrained vectors

所以我的问题是:

doc2vec 的 gensim 实现与 TextTinyR 实现有根本的不同吗?

还是gensim doc2vec模型基本上只是将word2vec模型和doc2vec过程封装成一个对象?

这个过程还有什么我遗漏的吗?

解决方法

我不知道您提到的 tinyTextR 包的 Doc2Vec 函数在做什么 - Google 搜索没有找到有关其功能的文档。但是如果它是即时的,并且需要词向量作为输入,那么它可能只是将文本单词的所有词向量平均在一起。

您可以在 Gensim 文档中阅读有关 Gensim Doc2Vec 模型的所有信息:

https://radimrehurek.com/gensim/models/doc2vec.html

正如其介绍所解释的:

通过来自 Quoc Le and Tomas Mikolov: “Distributed Representations of Sentences and Documents” 的分布式内存和分布式词袋模型学习段落和文档嵌入。

Gensim Doc2Vec 实现的算法通常也被其作者称为“段落向量”,包括 Le 等人 "Document Embeddings With Paragraph Vector" 的后续论文。

'Paragraph Vector' 使用类似 word2vec 的训练过程来学习段落(或其他多个单词的文本)的文本向量。这个过程不需要需要先验的词向量作为输入,但是许多模式会与文档向量一起共同训练词向量。它确实需要对一组文档进行训练,但在训练后,.infer_vector() 方法可用于训练新文本的向量,而不是在原始训练集中,只要它们使用相同的词。 (此类后模型训练文档中的任何新词都将被忽略。)

您也许可以使用诸如平均词向量之类的简单方法来近似您的 R 函数。

或者,您可以在 Gensim 中尝试替代 Doc2Vec

但是,Gensim Doc2Vec 肯定是不同的,不幸的是,这两个库对不同的进程使用相同的 Doc2Vec 名称。

,

在 R 中,您可以使用 text2vec (https://cran.r-project.org/package=text2vec) 训练 Glove 嵌入,使用 word2vec (https://cran.r-project.org/package=word2vec) 训练 word2vec 嵌入或训练 fasttext 嵌入 (https://cran.r-project.org/package=fastText / https://cran.r-project.org/package=fastTextR )。您可以通过仅采用例如将这些嵌入聚合到文档级别单词或相关名词/形容词的平均值(如果您使用 udpipe (https://cran.r-project.org/package=udpipe) 标记文本或使用 R 包 TextTinyR (https://cran.r-project.org/package=TextTinyR) 中的方法,它提供了 3 个其他聚合选项:sum_sqrt / min_max_norm / idf

R 包 doc2vec (https://cran.r-project.org/package=doc2vec) 允许人们训练段落向量嵌入(Gensim 术语中的 PV-DBOW / PV-DM),这不仅仅是词向量的平均,而是训练特定模型(例如参见 {{ 3}})。 ruimtehol (https://www.bnosac.be/index.php/blog/103-doc2vec-in-r) 允许训练 Starspace 嵌入,它也可以选择训练句子嵌入

,

我想您已经知道 textTinyR 包中的 Doc2Vec 函数文档。我想补充的是以下信息:

只是为了记录,我是 'textTinyR' 包的作者。