Distributed Representations of Sentences and Documents 该论文提出了一种训练段落向量的方法。

(一) 提出动机

已经有比较优秀的模型可以很好的生成词向量,但是对于生成句子或者段落的向量,目前还没有比较好将单词向量变为句子向量的方法,常见的方法以及缺点如下:

  • bag of words: 缺乏顺序性和语义性
  • average word vectors:缺乏单词顺序性
  • tfidf-weighting word vectors:缺乏单词顺序性
  • LDA(待研究)

所以需要一种有效的方法来生成段落或者句子向量。

(二)核心思想

对于wod2vec模型,示意图如下

gensim 使用word2vec模型怎么使用_词向量


通过上下文来预测缺失值‘on’,在给定上下文后,通过更新参数使得出现缺失值的可能性最大,要最大化的函数如下,其中gensim 使用word2vec模型怎么使用_词向量_02表示单词

gensim 使用word2vec模型怎么使用_Distributed_03

最终通过softmax的形式将输出转化为多分类问题:

gensim 使用word2vec模型怎么使用_Distributed_04

模型的输出可以写成:

gensim 使用word2vec模型怎么使用_缺失值_05其中gensim 使用word2vec模型怎么使用_缺失值_06都是softmax函数的参数,gensim 使用word2vec模型怎么使用_Distributed_07为词向量矩阵,gensim 使用word2vec模型怎么使用_词向量_08表示把上下文单词融合到一起的方法,可以是拼接也可以是求平均。

训练段落向量思想跟word2vec训练词向量的思想其实差不多,首先构建一个共享的段落向量lookup矩阵,该矩阵中的维度m*n,m是段落个数,n是段落向量的维度。核心就是通过误差反向传播和梯度下降来更新该矩阵中的参数,方式类似于word2vec,即利用词向量和段落向量去预测上下文,来产生误差和梯度。

(三)模型训练

doc2vec模型中需要训练得到的主要有词向量和段落向量,需要训练gensim 使用word2vec模型怎么使用_词向量_09个参数(不包括softmax参数),

  • gensim 使用word2vec模型怎么使用_缺失值_10:词汇表数目
  • gensim 使用word2vec模型怎么使用_缺失值_11:段落数目
  • gensim 使用word2vec模型怎么使用_词向量_12:词向量维度
  • gensim 使用word2vec模型怎么使用_Distributed_13:段落向量维度

训练方式主要有如下两种

(1)PV-DM(Distributed Memory Model of Paragraph Vectors)

gensim 使用word2vec模型怎么使用_Distributed_14


如上图所示上,该方法类似word2vec中的CBOW,通过上下文预测缺失值,通过上下文的词向量以及当前段落向量通过某种方式融合到一起,在经过softmax层,得到词汇表中单词的预测结果,再通过label计算loss反向传播更新梯度。最终既可以得到词向量又可以得到段落向量。

(2)PV-DBOW(Distributed Bag of Words version of Paragraph Vector)

PV-DBOW类似于word2vec中的n-gram模型,用当前段落的词预测上下文中的词,注意下图中最上面的部分是分类器(用softmax加交叉熵产生损失函数)而不是单词对应的向量(我之前还在想这些词一直作为label,词向量一直不动啊)

gensim 使用word2vec模型怎么使用_词向量_15

(四)模型预测

对于一个新的段落,在固定单词向量gensim 使用word2vec模型怎么使用_Distributed_07和softmax参数gensim 使用word2vec模型怎么使用_缺失值_17gensim 使用word2vec模型怎么使用_词向量_18时,对当前向量进行初始化,然后利上述两种方法更新段落向量即可。
在论文中,作者推荐将PV-DM和PV-DBOW产生的向量进行拼接得到最后使用的段落向量。