我知道在python(gensim)中已经存在PV-DBOW(段落向量)的实现。 但我有兴趣知道如何自己实现它。 来自official paper的PV-DBOW的解释如下:
另一种方法是忽略输入中的上下文单词,但强制模型预测从输出中的段落中随机抽样的单词。实际上,这意味着在随机梯度下降的每次迭代中,我们对文本窗口进行采样,然后从文本窗口中采样随机词,并在给定段落向量的情况下形成分类任务。
根据该论文,不存储单词向量 据说PV-DBOW的工作方式类似于word2vec中的跳过克。
Skip-gram在word2vec Parameter Learning中有解释。 在跳过克模型中,单词向量被映射到隐藏层。 执行此映射的矩阵在训练期间更新。 在PV-DBOW中,隐藏层的维度应该是一个段落向量的维度。当我想将采样示例的单词向量与段落向量相乘时,它们应该具有相同的大小。 单词的原始表示具有大小(词汇量x 1)。执行哪种映射以获得正确的大小(段落尺寸x 1) 在隐藏层。当没有存储单词向量时,如何执行此映射? 我假设隐藏层中的单词和段落表示应该具有相同的大小,因为2中的等式26
答案 0 :(得分:3)
是的,PV-DBOW可以使用word2vec skip-gram模型轻松实现。
说你有以下句子:
孩子们正在公园里跑步
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
,这只是你模型的另一个词(相同的长度)实际上是一个表示整段(句子)的标记
它是一种带有#34;段大小窗口的跳过式克模型"