深度学习-NLP(3)doc2vec(PV-DM)

Doc2Vec

论文|Doc2vec的算法原理、代码实现及应用启发 - Thinkgamer的文章 - 知乎 https://zhuanlan.zhihu.com/p/336921474

Doc2vec主要为了解决word2vec只包含局部窗口内的语义信息的问题,在进行词向量表示的时候融入了句子的语义表示。

Doc2vec其实包含了两种算法:

  • PV-DM(Distributed Memory Model of Paragraph Vector):PV-DM类似于Word2vec中的CBOW模型
  • PV-DBOW(Distributed Bag of Words version of Paragraph Vector)

原理

doc2vec与word2vec的不同点:在输入层增加了Paragraph id向量,来作为句子的表示向量,该向量在同一句子的不同词训练中是权值共享

原因:在word2vec训练中,每次只会选择句子中窗口内的词来进行训练学习当前词的向量表达,而忽略了窗口外的词,最终的句子向量也只是每个词的简单累加,加入Paragraph id向量在同一个句子的若干次训练中是共享的,所以同一句话会有多次训练,每次训练中输入都包含Paragraph vector,它可以被看作是句子的主旨,这样训练在获得词向量的同时也能获得准确的句子向量表示。

image-20220712163125902

PV-DM模型的输入是固定长度的,其从段落的上下文的滑动窗口中进行采样,这一点和Word2vec是一致的,在基于同一段落构造好的样本中, 段落的向量是共享的,但是在基于不同段落构造好的样本中,段落的向量是不共享的。在所有的样本中,word的向量是一致的(共享的)。

在整个训练过程中,paragraph vector能够记忆整个句子的意义,word vector则能够基于全局部分学习到其具体的含义。

训练

每次从一句话中滑动采样固定长度的词,取其中一个词作预测词,其他的作输入词。输入词对应的词向量word vector和本句话对应的句子向量Paragraph vector作为输入层的输入,将本句话的向量和本次采样的词向量相加求平均或者累加构成一个新的向量X,进而使用这个向量X预测此次窗口内的预测词(softmax)。

预测

首先将新句子对应的Paragraph vector随机初始化,固定词向量还有投影层到输出层的softmax weights参数,对句子中的单词进行预测,根据结果进行Paragraph vector更新,获得最终的Paragraph vector。利用最终Paragraph vector进行词向量预测。