doc2vec:PV-DBOW 是如何实现的

9
我知道Python中已经有了PV-DBOW(段落向量)的实现(gensim),但我对如何自己实现它感兴趣。PV-DBOW的官方论文解释如下:另一种方法是在输入中忽略上下文单词,但强制模型在输出中预测从段落中随机抽样的单词。实际上,这意味着在每次随机梯度下降迭代中,我们会对一个文本窗口进行采样,然后从文本窗口中随机抽样一个单词,并根据段落向量形成分类任务。根据论文所述,单词向量不会被存储,PV-DBOW被称为与word2vec中的skip gram工作方式相似。
Skip-gram是在word2vec参数学习中解释的。 在skip gram模型中,单词向量被映射到隐藏层。 执行此映射的矩阵在训练期间更新。 在PV-DBOW中,隐藏层的维度应为一个段落向量的维度。当我想要将样本示例的单词向量与段落向量相乘时,它们应具有相同的大小。 单词的原始表示大小为(词汇量大小×1)。如何进行映射以获得正确的大小(段落维数×1)在隐藏层中。当未存储单词向量时,如何执行此映射? 我假设由于word2vec参数学习中的方程式26,单词和段落表示在隐藏层中应具有相同的大小。

我有和你几乎一样的问题。我理解PV-DBOW与word2vec非常相似,除了使用整个句子作为输入,而不是单词。我的目标是评估句子之间的相似性。因此,我希望以这种方式训练我的神经网络,然后获取句子的嵌入并计算它们的余弦距离。我计划使用tensorflow编写这个程序。如果你已经实现了类似的程序,我很感兴趣。 :-) - Ludovic Pénet
不,我还没有实现PV-DBOW,但我已经在Python中使用了Gensim的实现。也许你已经自己发现了它。 - саша
1个回答

10

是的,可以使用word2vec skip-gram模型轻松实现PV-DBOW。

假设您有以下句子:

孩子们在公园里奔跑

skip-gram模型尝试预测固定窗口上下文中的周围单词以学习单词向量。如果窗口大小为2,则目标如下:

word ->  context words to predict
--------------------------------
Children -> (are, running)
are -> (children, running, in)
running -> (children, are, in, the)
in -> (are, running, the, park)
the -> (running, in, park)
park -> (in, the)

现在,您可以简单地修改如何将 word -> context to predict 数据提供给您的skip-gram实现,方法如下:

word ->  context words to predict
--------------------------------
PAR#33 -> (Children, are, running, in, the, park)

PAR#33,实际上是代表整个段落(句子)的令牌,其长度与您的模型相同。

它类似于具有“段落大小窗口”的skip-gram模型。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接