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

如何解决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' 包的作者。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?
Java在半透明框架/面板/组件上重新绘画。
Java“ Class.forName()”和“ Class.forName()。newInstance()”之间有什么区别?
在此环境中不提供编译器。也许是在JRE而不是JDK上运行?
Java用相同的方法在一个类中实现两个接口。哪种接口方法被覆盖?
Java 什么是Runtime.getRuntime()。totalMemory()和freeMemory()?
java.library.path中的java.lang.UnsatisfiedLinkError否*****。dll
JavaFX“位置是必需的。” 即使在同一包装中
Java 导入两个具有相同名称的类。怎么处理?
Java 是否应该在HttpServletResponse.getOutputStream()/。getWriter()上调用.close()?
Java RegEx元字符(。)和普通点?