python - 如何在 doc2vec 模型中使用预训练的 word2vec 向量?
问题描述
我正在尝试实现 doc2vec,但是如果我有预训练的 word2vec 向量,我不确定模型的输入应该是什么样子。
问题是,我不确定如何在理论上将预训练的 word2vec 向量用于 doc2vec。我想,我可以用向量预填充隐藏层,然后用随机数填充隐藏层的其余部分
另一个想法是使用向量作为单词的输入而不是单热编码,但我不确定文档的输出向量是否有意义。
谢谢您的回答!
解决方案
您可能会认为Doc2Vec
(又名 Mikolov/Le 的“段落向量”算法)需要词向量作为第一步。这是一个普遍的信念,也许有些直观,类似于人类如何学习一门新语言:先理解较小的单元,然后再理解较大的单元,然后从较小的单元中组合出较大单元的含义。
但这是一个常见的误解,并Doc2Vec
没有这样做。
一种模式,纯 PV-DBOW(dm=0
在 gensim 中),根本不使用传统的每字输入向量。而且,这种模式通常是训练速度最快、性能最好的选项之一。
另一种模式,PV-DM(dm=1
在 gensim 中,默认值)确实利用了相邻的词向量,并以类似于 word2vec 的 CBOW 模式的方式与 doc 向量结合——但它需要的任何词向量都将被训练同时与文档向量。他们没有在单独的步骤中进行第一次训练,因此没有一个简单的拼接点可以提供来自其他地方的词向量。
(您可以将 skip-gram 单词训练与 gensim 中的 PV-DBOWdbow_words=1
混合,但这将在交错的共享模型过程中从头开始训练单词向量。)
在某种程度上,您可以使用来自其他地方的词向量预播模型,它不一定会改善结果:它很容易将它们的质量发送到侧面或更糟。在一些幸运的管理良好的情况下,它可能会加速模型收敛,或者是一种强制向量空间与早期向量集兼容的方法,但并非没有原始算法中不包含的额外陷阱和警告,或者描述良好的做法。
推荐阅读
- c - “int b = (int) 45.0”和“int b = 45.0”有什么区别?
- erlang - Erlang:如何使用 CA 证书和私钥签署“CertificationSigningRequest”
- reactjs - 为什么我无法显示上传到 S3 的图像(.svg)
- flutter - Flutter - 在底部附近按下 FlatButton
- java - Exoplayer 活动不播放视频,而是显示空白屏幕
- python - 只需要在 for 循环外打印一次
- powerbi - 如何使用第一列中的给定字符串匹配条件在power bi中创建新列并从另一列获取值,创建新列?
- sql - 计数 SQL 查询协助
- performance - JMeter 发送的请求少于预期
- html - 如何从 vue web 应用程序项目中删除未知请求