我在尝试实现doc2vec,但我不确定如果我有预训练的word2vec向量,模型的输入应该是什么样的。
问题在于,我不确定如何理论上在doc2vec中使用预训练的word2vec向量。我设想,我可以用这些向量预填充隐藏层,其余部分用随机数填充
另一个想法是使用向量作为词的输入,而不是使用独热编码,但我不知道文档的输出向量是否会合理。
感谢您的回答!
回答:
您可能会认为Doc2Vec
(即Mikolov/Le的“段落向量”算法)需要词向量作为第一步。这是普遍的看法,可能有点直观,通过类比人类学习新语言的方式:先理解较小的单位,然后再理解较大的单位,然后从较小的单位中组合出较大的意义。
但这是一个常见的误解,Doc2Vec
并不这样做。
一种模式,纯PV-DBOW(gensim中的dm=0
),根本不使用传统的每个词的输入向量。而且,这种模式通常是训练速度最快和表现最好的选项之一。
另一种模式,PV-DM(gensim中的dm=1
,默认值)确实使用邻近的词向量,结合文档向量以一种类似于word2vec的CBOW模式的方式——但它需要的任何词向量将与文档向量同时训练。它们不是首先在一个单独的步骤中训练的,因此没有一个简单的插入点,您可以从别处提供词向量。
(您可以将跳字词训练混合到PV-DBOW中,在gensim中使用dbow_words=1
,但这将从头开始以交错的、共享模型的过程训练词向量。)
在某种程度上,您可以用来自别处的词向量预先填充模型,但这不一定会改善结果:它很容易使它们的质量偏离或更糟。在一些幸运的、管理良好的情况下,它可能加速模型的收敛,或者是一种强制与早期向量集保持向量空间兼容性的方式,但没有额外的陷阱和警告,这些警告并不是原始算法的一部分,或是未经充分描述的实践。