Gensim:doc2vec是模型还是操作?与 R 实现的区别
Gensim: Is doc2vec a model or operation? Differences from R implementation
我的任务是将文档矢量模型投入生产。
我是 R 用户,所以我的原始模型是在 R 中。我们拥有的途径之一是在 Python.
中重新创建代码和模型
我对 Doc2vec 的 Gensim 实现感到困惑。
在 R 中工作的过程是这样的:
离线
词向量是使用 text2vec
包中的函数训练的,即 GloVe 或 GlobalVectors,在大型语料库上这给了我一个大的词向量文本文件。
在 ML 步骤发生之前,TextTinyR
库中的 Doc2Vec
函数用于将每个文本片段从更小、更具体的训练语料库转换为向量。 这不是机器学习步骤。没有训练模型。 Doc2Vec 函数有效地聚合了句子中的词向量,其意义与求向量的总和或均值相同,但以一种保留词序信息的方式。
然后在这些较小的文本语料库上训练各种模型。
在线
- 使用预训练的词向量将新文本转换为文档向量。
- 文档向量被输入预训练模型以获得输出classification。
我为 Gensim 找到的示例代码似乎与此截然不同。
gensim
中显示 Doc 向量是与您可以训练的词向量分开的模型 class。似乎在某些情况下,词向量和文档向量都是同时训练的。以下是教程和 Whosebug 答案中的一些示例:
https://medium.com/@mishra.thedeepak/doc2vec-simple-implementation-example-df2afbbfbad5
How to use Gensim doc2vec with pre-trained word vectors?
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
正如其介绍所解释的那样:
Learn paragraph and document embeddings via the distributed memory and distributed bag of words models from Quoc Le and Tomas Mikolov: “Distributed Representations of Sentences and Documents”.
Gensim Doc2Vec
实现的算法通常也被其作者称为 'Paragraph Vector',包括在 Le 等人 "Document Embeddings With Paragraph Vector".
的后续论文中
'Paragraph Vector' 使用类似 word2vec 的训练过程来学习段落(或许多单词的其他文本)的文本向量。此过程 不需要 需要先验词向量作为输入,但许多模式将与文档向量一起共同训练词向量。它 确实 需要对一组文档进行训练,但是在训练之后 .infer_vector()
方法可以用于训练新文本的向量,而不是在原始训练集中,以他们使用相同词语的程度。 (此类 post-model-training 文档中的任何新词都将被忽略。)
您也许可以使用诸如平均词向量之类的简单方法来近似您的 R 函数。
或者,您可以在 Gensim 中尝试替代 Doc2Vec
。
但是,Gensim Doc2Vec
绝对是不同的东西,不幸的是这两个库对不同的进程使用相同的 Doc2Vec
名称。
在 R 中,您可以使用 text2vec (https://cran.r-project.org/package=text2vec) to train Glove embeddings, word2vec (https://cran.r-project.org/package=word2vec) to train word2vec embeddings or train fasttext embeddings (https://cran.r-project.org/package=fastText / https://cran.r-project.org/package=fastTextR). You can aggregate these embeddings to the document level by just taking e.g. the average of the words or relevant nouns/adjectives (if you tag the text using udpipe (https://cran.r-project.org/package=udpipe) or use the approach from R package TextTinyR (https://cran.r-project.org/package=TextTinyR),它提供了 3 个其他聚合选项:sum_sqrt / min_max_norm / idf
R 包 doc2vec (https://cran.r-project.org/package=doc2vec) allows one to train paragraph vector embeddings (PV-DBOW / PV-DM in Gensim terminology) which is not just averaging of word vectors but trains a specific model (e.g. see https://www.bnosac.be/index.php/blog/103-doc2vec-in-r)。
ruimtehol (https://cran.r-project.org/package=ruimtehol) 允许训练 Starspace 嵌入,它也可以选择训练句子嵌入
我想您已经知道 textTinyR 包中的 Doc2Vec 函数文档。我想补充的是以下信息:
- 在 second vignette of the R package I mention: "... one of the three methods (sum_sqrt, min_max_norm, idf) to receive the transformed vectors. These methods are based on the following blog-posts (see especially www.linkedin.com/pulse/duplicate-quora-question-abhishek-thakur and https://erogol.com/duplicate-question-detection-deep-learning/) ..."
- Rcpp 中的 doc2vec_methods use internally the word_vectors_methods 函数(实现了前面提到的 3 种方法)以缩短计算时间。
郑重声明,我是 'textTinyR' 软件包的作者。
我的任务是将文档矢量模型投入生产。 我是 R 用户,所以我的原始模型是在 R 中。我们拥有的途径之一是在 Python.
中重新创建代码和模型我对 Doc2vec 的 Gensim 实现感到困惑。
在 R 中工作的过程是这样的:
离线
词向量是使用
text2vec
包中的函数训练的,即 GloVe 或 GlobalVectors,在大型语料库上这给了我一个大的词向量文本文件。在 ML 步骤发生之前,
TextTinyR
库中的Doc2Vec
函数用于将每个文本片段从更小、更具体的训练语料库转换为向量。 这不是机器学习步骤。没有训练模型。 Doc2Vec 函数有效地聚合了句子中的词向量,其意义与求向量的总和或均值相同,但以一种保留词序信息的方式。然后在这些较小的文本语料库上训练各种模型。
在线
- 使用预训练的词向量将新文本转换为文档向量。
- 文档向量被输入预训练模型以获得输出classification。
我为 Gensim 找到的示例代码似乎与此截然不同。
gensim
中显示 Doc 向量是与您可以训练的词向量分开的模型 class。似乎在某些情况下,词向量和文档向量都是同时训练的。以下是教程和 Whosebug 答案中的一些示例:
https://medium.com/@mishra.thedeepak/doc2vec-simple-implementation-example-df2afbbfbad5
How to use Gensim doc2vec with pre-trained word vectors?
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
正如其介绍所解释的那样:
Learn paragraph and document embeddings via the distributed memory and distributed bag of words models from Quoc Le and Tomas Mikolov: “Distributed Representations of Sentences and Documents”.
Gensim Doc2Vec
实现的算法通常也被其作者称为 'Paragraph Vector',包括在 Le 等人 "Document Embeddings With Paragraph Vector".
'Paragraph Vector' 使用类似 word2vec 的训练过程来学习段落(或许多单词的其他文本)的文本向量。此过程 不需要 需要先验词向量作为输入,但许多模式将与文档向量一起共同训练词向量。它 确实 需要对一组文档进行训练,但是在训练之后 .infer_vector()
方法可以用于训练新文本的向量,而不是在原始训练集中,以他们使用相同词语的程度。 (此类 post-model-training 文档中的任何新词都将被忽略。)
您也许可以使用诸如平均词向量之类的简单方法来近似您的 R 函数。
或者,您可以在 Gensim 中尝试替代 Doc2Vec
。
但是,Gensim Doc2Vec
绝对是不同的东西,不幸的是这两个库对不同的进程使用相同的 Doc2Vec
名称。
在 R 中,您可以使用 text2vec (https://cran.r-project.org/package=text2vec) to train Glove embeddings, word2vec (https://cran.r-project.org/package=word2vec) to train word2vec embeddings or train fasttext embeddings (https://cran.r-project.org/package=fastText / https://cran.r-project.org/package=fastTextR). You can aggregate these embeddings to the document level by just taking e.g. the average of the words or relevant nouns/adjectives (if you tag the text using udpipe (https://cran.r-project.org/package=udpipe) or use the approach from R package TextTinyR (https://cran.r-project.org/package=TextTinyR),它提供了 3 个其他聚合选项:sum_sqrt / min_max_norm / idf
R 包 doc2vec (https://cran.r-project.org/package=doc2vec) allows one to train paragraph vector embeddings (PV-DBOW / PV-DM in Gensim terminology) which is not just averaging of word vectors but trains a specific model (e.g. see https://www.bnosac.be/index.php/blog/103-doc2vec-in-r)。 ruimtehol (https://cran.r-project.org/package=ruimtehol) 允许训练 Starspace 嵌入,它也可以选择训练句子嵌入
我想您已经知道 textTinyR 包中的 Doc2Vec 函数文档。我想补充的是以下信息:
- 在 second vignette of the R package I mention: "... one of the three methods (sum_sqrt, min_max_norm, idf) to receive the transformed vectors. These methods are based on the following blog-posts (see especially www.linkedin.com/pulse/duplicate-quora-question-abhishek-thakur and https://erogol.com/duplicate-question-detection-deep-learning/) ..."
- Rcpp 中的 doc2vec_methods use internally the word_vectors_methods 函数(实现了前面提到的 3 种方法)以缩短计算时间。
郑重声明,我是 'textTinyR' 软件包的作者。