据我所知,典型的 Doc2Vec 实现(例如 Gensim)首先训练词向量,然后文档向量是词向量是固定的。
如果我的目标是概念上相似的向量(无论它们代表文档还是单词)彼此接近,那么同时训练它们会更好吗?
例如,关于哥斯拉的文档应该类似于单词 Godzilla(以及其他关于哥斯拉的文档)以及单词 Japan。
此外,当将单个单词作为文档包含到训练数据中时,是否可以通过典型的实现来实现这样的结果?
据我所知,典型的 Doc2Vec 实现(例如 Gensim)首先训练词向量,然后文档向量是词向量是固定的。
如果我的目标是概念上相似的向量(无论它们代表文档还是单词)彼此接近,那么同时训练它们会更好吗?
例如,关于哥斯拉的文档应该类似于单词 Godzilla(以及其他关于哥斯拉的文档)以及单词 Japan。
此外,当将单个单词作为文档包含到训练数据中时,是否可以通过典型的实现来实现这样的结果?
您需要小心您对 doc2vec 实现所做的假设。以下是一些有用的概念:
Word2vec 有两种不同的模型实现(Skip-gram 和 Continuous-bag-of-words),Doc2vec 有类似的 PV-DM 和 CBOW 模型:
Word2vec
Doc2vec(段落向量)
在 skip-gram 中,输入是由大小为n的移动窗口通过我们使用一个词来预测另一个词的数据生成的词对,而在 CBOW 中,任务是从周围的词中预测一个中心词。在第二种情况下,上下文词向量通常是平均的。
Doc2vec 扩展的工作方式类似。DBOW 模型类似于skip-gram,它的作用是在给定从该段落中随机选择的单词的情况下计算该段落中单词的概率。然而,DM 尝试根据单词的上下文和上下文段落来预测中心词。
如您所见,doc2vec 模型不一定需要首先计算词嵌入。事实上,在 gensim doc2vec 函数中有一个 dbow 模型的参数,上面写着:
“dbow_words (int {1,0}) – 如果设置为 1,则与 DBOW doc-vector 训练同时训练 word-vectors(以 skip-gram 方式);如果为 0,则仅训练 doc-vectors(更快)。”
这意味着在训练阶段,甚至 dbow 都不需要生成词向量。
有一个来自稀有技术的很棒的笔记本,它提供了很多关于如何训练这些模型的见解。
关于您的具体问题,您可以训练一个 word2vec 和 doc2vec 模型,并使用结果来比较单词和段落(看这篇论文)。但是要考虑到 doc2vec 不是在训练单词然后用它们做一些花哨的东西。训练过程涉及直接计算段落。