doc2vec - PV-DBOW 中的推理步骤如何工作

数据挖掘 word2vec 词嵌入
2021-09-30 22:37:51

我很困惑我们如何在 PV-DBOW 中生成新的段落向量?

如果我想使用嵌入对某些文本进行分类,我将如何为新段落生成向量?

原始论文中,作者写道:

在预测时,需要执行推理步骤来计算新段落的段落向量。这也是通过梯度下降获得的。

我不清楚他们将如何使用梯度下降计算新段落的段落向量。

2个回答

原始论文对推理步骤的实现做了很多挥手,并不清楚。所以你的困惑是有道理的。我将在下面进行高级解释。我假设只有 PV-DBOW 模型。

训练阶段

  1. 在这个模型中,我们忘记了词序信息并建立了一个非常简单的神经网络。
  2. 表示词汇表中的所有输入文档标签,以获得每个文档标签的唯一 ID。对单词做同样的事情。
  3. 对于给定的文档 ID,输入是文档标签 ID 的 one-hot 编码表示。输出是随机选择的单词的一种热编码表示。
  4. 我们希望设置训练,使得对于给定的标签 ID,从该文档中随机选择的单词将以高概率被预测。
  5. 因此,经过训练的神经网络将一种热编码表示转换为文档/标签向量。标签向量通过另一层,输出为 softmax。两组权重都在训练阶段进行调整。
  6. 训练实现了什么:它表示一个新空间中的所有文档标签,以便从该向量空间表示到 softmax 输出,每个文档中随机选择的单词的概率最大化。
  7. 重要的是要注意有两组权重输入到隐藏层并隐藏到 softmax 输出。

推理阶段

  1. 单词在文档中是唯一的。因此,训练和推理阶段的单词“印度”被映射到词汇表中的相同 ID。
  2. 但是文档 ID 没有这样的概念,因为文档被认为是唯一的,并且在训练和推理之间没有共享 ID。
  3. 推理阶段运行(某种)反向计算。如果我使用从隐藏空间到输出层的相同权重集,哪种向量空间表示最适合本文档?从隐藏层到 softmax 输出的权重保持不变!
  4. 从新文档中随机选择一个单词。从文档向量的随机表示开始(输入到隐藏层)。将其通过神经网络从隐藏到具有恒定权重的 softmax 输出(在训练期间学习)。调整随机初始化的权重,使所选单词的 softmax 概率最大化。多次重复此过程。
  5. 这就是您需要随机梯度下降并需要指定步数的原因。

概括

  1. 文档 ID 在训练和推理阶段并不常见(如 w2v 中的单词 ID)。
  2. 有两组权重,根据从训练阶段的学习,在推理阶段保持一组不变。使用 SGD 调整另一个。
  3. 您将新文档映射到文档向量空间,以便在训练短语期间具有相似单词的文档在文档向量空间中接近。

这是 Richard Berendsen 的一个非常好的实现教程我从解释中忽略了额外的复杂性,如负采样、上下文窗口。

hssay的答案写得很好,但我想我会添加自己的解释以进一步简化它,并展示它如何适用于 PV-DM

Doc2Vec 与 Word2Vec 不同,它以独特的方式构建,使得每次对同一文档的预测(或他们称之为推理)都略有不同。这种稍微不稳定的预测的原因是,预测操作实际上每次都试图调整网络内部神经元的一些权重,以便能够“正确”地预测结果。您可能首先会觉得它很奇怪,但这就是为什么该算法能够预测文档的嵌入而不仅仅是单词。

解释

分布式内存模型架构

在训练开始之前,我们为训练数据集中的每个文档分配一个文档 ID。所以每个数据点都有 2 个组件:1)文档 ID 2)一个文档(单词列表。)

首先,我们使用传统的 Word2Vec 算法将语料库中的每个单词转换为一个向量。

其次,我们通过向网络提供两件事来训练模型:1)文档 ID 和 2)来自该文档的上下文。训练阶段的目标是调整权重,以便对于任何文档 ID 和上下文(固定长度并从文档上的滑动窗口采样),模型可以以高概率预测下一个单词。为此,我们形成 2 层,一层将文档 ID 转换为向量(层 A),另一层隐藏层(层 B)在输出处使用 softmax,将 的平均值(或连接)作为输入:

1- A层的输出(文档ID的向量)

2- Word2Vec 将单词嵌入到上下文中

Softmax 层输出文档的向量表示。模型训练直到所有权重都以某种方式设置以实现最高预测概率(或尽可能接近)。

现在是预测阶段。预测的数据点只是我们要预测它的向量的 Document(我们没有像以前那样有 Document ID)。我们需要 Document ID 作为 Layer A 的输入,否则我们将无法使用网络,那么我们该怎么办?我们尝试预测文档 ID,这就是为什么它不是确定性的 :)

为了能够预测文档 ID:

1- 我们冻结从训练中学到的隐藏层权重(层 B)

2- 我们给网络一个来自我们想要预测其向量的文档的上下文。

3- 我们使用我们的 Word2Vec 模型来获取上下文中每个单词的嵌入

4-我们提出一个随机向量

5- 我们在上面的第 3 步和第 4 步中取向量的平均值(或连接),并将其用作隐藏层(权重冻结)的输入

4- 我们检查我们选择的随机向量是否最大化了上下文中预测的下一个单词的 softmax 概率。

5- 我们通过在文档 ID 向量上随机梯度下降来重复这个过程,直到我们发现文档 ID 向量表示最大化所选单词的概率

6- 我们使用预测的文档 ID 和文档词向量来预测文档向量表示(这将与预测的文档 ID 一样好)

这就是为什么我们不能总是为 Document 向量获得完全相同的值。

这就是分布式内存模型架构的工作原理,分布式词袋也依赖于预测 Document ID 来预测 Documents 向量,但算法不同(如果您有兴趣,请在下面解释)

分布式词袋架构:

在训练阶段,我们通过向网络提供两件事来训练模型:1)文档 ID 和 2)从该文档中随机选择的单词。训练阶段的目标是调整权重,以便对于任何文档 ID,模型可以高概率地预测从该文档中随机选择的单词。为此,我们形成 2 层,一层将文档 ID 转换为向量(A 层),隐藏层(B 层)在输出处使用 softmax,将 A 层的输出(文档 ID 的向量)作为输入. Softmax 层输出文档的向量表示。

模型训练直到所有权重都以某种方式设置(或尽可能接近)。

对于预测:

1- 我们冻结从训练中学到的隐藏层权重(层 B)

2- 我们从该文档中随机选择我们想要预测其向量的单词给网络。

3- 我们提出一个随机向量作为隐藏层(B 层)的输入

4- 我们检查我们选择的随机向量是否最大化了所选单词的 softmax 概率。

5- 我们通过在文档 ID 向量上随机梯度下降来重复此过程,直到我们发现文档 ID 向量表示最大化所选单词的概率

6- 我们使用预测的文档 ID 作为隐藏层的输入来预测文档向量表示(这将与预测的文档 ID 一样好)