了解 Word2Vec

机器算法验证 word2vec 词嵌入 词袋
2022-04-09 11:46:15

我正在尝试理解 word2vec 算法(Mikolov 等人),但有几件事我不明白。

我知道来自输入层或隐藏层的激活是线性的,并且h只是所有线性组合的平均值xik向量。此外,我了解每个节点的最终输出yi输出向量的y只是softmax从隐藏层到输出层的激活函数。

在此处输入图像描述

我不明白的是我的实际词向量到底是什么?我目前只看到一种可能性,那就是采取以下任一列WV×N或行WN×V因为我假设这些权重现在是该算法的“信息承载”实体。

我对这个假设是否正确?

独立于此,我想了解谷歌如何设法训练他们的谷歌新闻词向量模型。

从网站:

我们正在发布在部分 Google 新闻数据集(约 1000 亿字)上训练的预训练向量。

如果使用 one-hot 编码向量进行训练,这简直是疯了。这意味着每个输入矩阵WV×N将会(1×1011)×300在尺寸方面!?

这引出了我的最后一个问题:难道不能使用低维向量吗?在我脑后的某个地方,我有一个想法,您可以简单地为词汇表中的所有给定单词随机初始化单词向量,然后对其应用 word2vec。然而,这也意味着不仅权重必须更新,而且每个输入词的词向量也必须更新。是这样的事情真的完成了还是我在这里完全弄错了?

1个回答

我的实际词向量到底是什么?

实际的词向量是隐藏的表示h 基本上,将一个热向量与WV×N会给你一个1×N向量,它表示您输入的一个热门词的词向量。

在这里,我们乘以一个热1×5用突触 1 说“鸡”WV×N得到向量表示:1×3

基本上,WV×N以查找表的形式捕获隐藏的表示。要获得查找值,请乘以WV×N用那个词的一个热点。

在此处输入图像描述

这意味着每个输入矩阵WV×N将会(1×1011)×300在尺寸方面!?

对,那是正确的。请记住两件事:

  1. 它是谷歌。他们有很多计算资源。

  2. 许多优化被用来加速训练。您可以浏览公开可用的原始代码。

难道不能使用低维向量吗?

我假设您的意思是使用像 [ 1.2 4.5 4.3] 这样的向量来表示“鸡”。将其输入网络并对其进行训练。似乎是个好主意。我无法充分证明这一推理的合理性,但我想指出以下几点:

  1. One Hots 允许我们一次只激活一个输入神经元。因此,单词的表示下降到仅针对该单词的特定权重。 在此处输入图像描述 在这里,“果汁”的热门话题是每个突触仅激活 4 个突触链接。

  2. 使用的损失函数可能是交叉熵损失,它通常采用一种热表示。这种损失函数严重惩罚了由一个热表示辅助的不正确分类。事实上,大多数分类任务都使用一个带有交叉熵损失的热点。

我知道这不是一个令人满意的推理。

我希望这可以解决一些问题。

这里有一些资源:

  1. 克里斯·麦考密克著名文章
  2. 交互式 w2v 模型:wevi
  3. 通过在tensorflow中理解w2v来理解它(我的文章(无耻的广告,但它涵盖了我想说的话))