首页 > 解决方案 > 如何在 doc2vec 模型中使用预训练的 word2vec 向量?

问题描述

我正在尝试实现 doc2vec,但是如果我有预训练的 word2vec 向量,我不确定模型的输入应该是什么样子。

问题是,我不确定如何在理论上将预训练的 word2vec 向量用于 doc2vec。我想,我可以用向量预填充隐藏层,然后用随机数填充隐藏层的其余部分

另一个想法是使用向量作为单词的输入而不是单热编码,但我不确定文档的输出向量是否有意义。

谢谢您的回答!

标签: pythonmachine-learningnlpword2vecdoc2vec

解决方案


您可能会认为Doc2Vec(又名 Mikolov/Le 的“段落向量”算法)需要词向量作为第一步。这是一个普遍的信念,也许有些直观,类似于人类如何学习一门新语言:先理解较小的单元,然后再理解较大的单元,然后从较小的单元中组合出较大单元的含义。

但这是一个常见的误解,并Doc2Vec没有这样做。

一种模式,纯 PV-DBOW(dm=0在 gensim 中),根本不使用传统的每字输入向量。而且,这种模式通常是训练速度最快、性能最好的选项之一。

另一种模式,PV-DM(dm=1在 gensim 中,默认值)确实利用了相邻的词向量,并以类似于 word2vec 的 CBOW 模式的方式与 doc 向量结合——但它需要的任何词向量都将被训练同时与文档向量。他们没有在单独的步骤中进行第一次训练,因此没有一个简单的拼接点可以提供来自其他地方的词向量。

(您可以将 skip-gram 单词训练与 gensim 中的 PV-DBOWdbow_words=1混合,但这将在交错的共享模型过程中从头开始训练单词向量。)

在某种程度上,您可以使用来自其他地方的词向量预播模型,它不一定会改善结果:它很容易将它们的质量发送到侧面或更糟。在一些幸运的管理良好的情况下,它可能会加速模型收敛,或者是一种强制向量空间与早期向量集兼容的方法,但并非没有原始算法中不包含的额外陷阱和警告,或者描述良好的做法。


推荐阅读