doc2vec 模型

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

(一) 提出动机

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

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

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

(二)核心思想

对于wod2vec模型,示意图如下
在这里插入图片描述
通过上下文来预测缺失值‘on’,在给定上下文后,通过更新参数使得出现缺失值的可能性最大,要最大化的函数如下,其中ww表示单词
1Tt=kTklogp(wtwtk,,wt+k)\frac{1}{T} \sum_{t=k}^{T-k} \log p\left(w_{t} | w_{t-k}, \ldots, w_{t+k}\right)
最终通过softmax的形式将输出转化为多分类问题:
p(wtwtk,,wt+k)=eywtieyip\left(w_{t} | w_{t-k}, \ldots, w_{t+k}\right)=\frac{e^{y_{w_{t}}}}{\sum_{i} e^{y_{i}}}
模型的输出可以写成:
y=b+Uh(wtk,,wt+k;W)y=b+U h\left(w_{t-k}, \ldots, w_{t+k} ; W\right)其中UbU和b都是softmax函数的参数,WW为词向量矩阵,hh表示把上下文单词融合到一起的方法,可以是拼接也可以是求平均。

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

(三)模型训练

doc2vec模型中需要训练得到的主要有词向量和段落向量,需要训练Np+MqN*p + M*q个参数(不包括softmax参数),

  • NN:词汇表数目
  • MM:段落数目
  • pp:词向量维度
  • qq:段落向量维度

训练方式主要有如下两种

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

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

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

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

在这里插入图片描述

(四)模型预测

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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章