用神经网络训练词向量的逻辑是,让网络去预测单词(目标词/上下文)这样的任务,句向量也是同样,咱们给定从句子里的一些上下文,让网络去预测下一个单词。在句(Paragraph)向量模型中,每个句子都被映射成一个独立的向量,这个句向量做为矩阵 D 的一列;同时,每个词也被映射成一个独立的向量,这个词向量做为矩阵 W 的一列。对这个句向量和这些词向量求平均或者首尾相连,用来预测文本中的下一个词。这里,咱们选用首尾相连来组合这些矩阵。算法
严格的说,与 Word2vec 的公式相比,惟一的不一样点在于这里从 W 和D 两个矩阵中构造 h。句子的标识(Token)被当作另一个“词”看待。它扮演一个“Memory”的角色,用来记忆当前文本或文章主题中漏掉了什么。所以,这个模型被称为“句向量的分布记忆模型”(PV-DM: Distributed Memory Model of Paragraph Vectors)。网络
上下文是固定长度的,从句子的一个滑动窗口中取样。句向量被这这个句子产生的全部上下文共享,但不超越句子。可是词向量矩阵 W 是超越句子,全局共享的。好比说,”powerful”的词向量也对全部的句子有效。机器学习
经过随机梯度降低法来训练这些句向量和词向量,在此过程当中经过反向传播得到梯度。在随机梯度降低的每一步,均可以从一个随机的句子中抽取一个定长的上下文,从网络中计算出梯度偏差,而后更新模型的参数。学习
在预测阶段,须要执行一个“推断(inference)”步骤计算新句子的句向量。也是经过梯度上升来获取。在这个阶段,其他的模型参数、词向量矩阵 W 和 softmax 权重是固定的。继承
假设语料库中有 N 个句子,字典里有 M 个词汇;咱们试图将每个句子映射到 p 维空间,每个词映射到 q 维空间,因而这个模型就有总共 N×p+M×q 个参数(包括softmax参数)。即便句子的数量会随着 N 的增大而增大,训练中的更新仍是稀疏且高效。ip
通过训练,这些句向量就能够当作句子的特征使用。咱们能够把这些特征直接用于传统的机器学习技术,好比逻辑回归、支持向量机或者 K-means 聚类。
总而言之,这个算法有两个关键阶段:io
句向量有两个显著的优势:效率
上面的方法讨论了在一个文本窗口内,经过句向量和词向量的首尾相接来预测下一个词。另外一种方法不把上下文中的词做为输入,而是强制这个模型在输出中从句子中随机抽取词汇来进行预测。实际上,其意义在于在每个随机梯度降低的迭代中,咱们抽取一个文本窗口,而后从这个文本窗口中抽取一个词,而后经过一个分类任务获得句向量。这项技术如图所示。咱们把这个版本称为句向量的分布词袋(PV-DBOW): Distributed Bag of Words version of Paragraph Vector)。基础
句向量被训练出来,用来预测在一个小窗口中的词汇。神经网络
除了在概念上简单之外,这个模型只须要存储少许的数据。相比于上一个模型须要存储 softmax 权重和词向量,这个模型只须要存储 softmax 权重。一样的,这个模型也近似于 Skip-gram 模型。
能够把每个句向量看成两个向量的组合:一个经过 PV-DM 训练,另外一个经过 PV-DBOW 训练。PV-DM 可以很好地执行多种任务,可是它结合 PV-DBOW 后,经常可以更加出色完成任务。