doc2vec

Doc2vec

常用于短文本向量化的方法包括:

  • Bag of words
  • LDA
  • Average word vectors
  • tfidf-weighting word vector

上述方法存在公共的问题是没有考虑单词的顺序。而本文介绍的doc2vec是2014年谷歌的两位大牛Quoc Le 和 Tomas Mikolov提出的。文章提出一种无监督学习模型通过预测句子/段落中word来得到句子/段落/文档的向量表示。

模型

word2vec

文章提出的得到句子/段落/文档向量的方法是受到word2vec的启发,因此先回顾一下word2vec。如下图所示,word2vec是通过给定单词预测另一个单词,如CBOW根据前后词预测中间词,以及Skip-gram根据中间词预测前后词。
1
在模型中,每个词都用唯一的向量表示,是通过一个W矩阵通过index索引得到的每个词的向量表示,通过concat/average所有词的向量表示作为feature去预测另外一个词。在CBOW中,通过前后词预测中间词,模型最终优化的是最大化给定前后词的条件下当前词出现的概率,即:

$\frac{1}{T} \sum_{t=k}^{T-k} \log p\left(w_{t} | w_{t-k}, \ldots, w_{t+k}\right)$

最终模型通过softmax得到每个词出现的概率:

$p\left(w_{t} | w_{t-k}, \ldots, w_{t+k}\right)=\frac{e^{y_{w_{t}}}}{\sum_{i} e^{y_{i}}}$

上式中的$\boldsymbol{y}_{i}$是未归一化的每个词出现的概率:

$y=b+U h\left(w_{t-k}, \dots, w_{t+k} ; W\right)\qquad ...(1)$

原始论文中还提到使用层次softmax代替softmax来提升训练速度。详细细节见原文.

Paragraph Vector: A distributed memory model

受word2vec的启发,Paragraph Vector也是通过给出上下文预测下一个word来进行学习的,对应的框架如下:
2
每个段落/句子通过矩阵D映射到向量空间中,用D的一列代替,同样,每个单词也被映射到向量空间,用矩阵W的一列表示,然后通过段落/句子向量和词向量级连或求平均得到特征预测下一个单词。与word2vec唯一不同的是在计算$y_{i}$时的h是通过W和D average/concat 得到的。

对于D我们可以理解为其他的word,它相当于是上下文的记忆单元活着这个段落的主题,因此我们叫这种训练方法为Distributed Memory Model of Paragraph Vector(PV-DM)。在训练时,通常采用固定长度的滑动窗口得到训练集,段落/句子向量在上下文中是共享的。

总结doc2vec的过程主要是两步:

  • 训练阶段,在已知数据集上训练得到模型参数D,W,U,b
  • 预测阶段,得到未知段落的向量D即在固定W,U,b的情况下利用上述方法进行梯度下降,得到新的D(D中会加入表征新段落的column)

优点:

  • 使用无监督学习,不需要大量有标记数据
  • 能够解决bag-of-words模型的缺点:
    • 能够学到词之间的语义信息
    • 考虑到了词之间的顺序

Paragraph Vector without worf ordering: Distributed bag of words

上面提到的训练方法是要综合paragraph vector和word vector去预测下一个词,另一种训练方法可以忽略词的上下文来预测随机从段落/句子采样得到的一个词,具体来说就是每次迭代训练时,采样一个窗口的文本,然后从窗口文本中随机选一个词做预测。我们称这种方法为Distributed Bag of Words version of Paragraph Vector(PV-DBOW)。模型架构如下:
3


参考文献:

  1. Distributed Representations of Sentences and Documents
  2. https://papers.nips.cc/paper/5021-distributed-representations-of-words-and-phrases-and-their-compositionality.pdf