使用 word2vec 的隐藏层而不是“one-hot”,以减少其他网络中的权重数量?

数据挖掘 word2vec
2022-03-05 15:06:10

我一直在阅读有关 word2vec 的内容,它能够将单词编码为向量表示。这些词的坐标(概率)与它们通常的上下文相邻词聚集在一起。

例如,如果我们的数据集中有 10k 个唯一词,我们将向网络提供 10000 个特征。该网络可以有例如 300 个隐藏神经元,每个神经元都具有线性激活函数。

网络的输出是 10 000 个神经元,每个神经元都有一个 softmax 分类器。每一个这样的“soft-maxed output”都代表了从我们的 10k 字典中选择合适单词的概率。 在此处输入图像描述

问题 1:嗯,我能够通过最终的 softmaxed 输出层从“语义分组”的单词中受益。然而,它似乎太大了——它仍然有 10 000 个概率的维度。

我真的可以使用这 300 个神经元导致我的其他一些网络吗?说,在我的 LSTM 等中?

然后我的 LSTM 的权重就不会占用太多磁盘空间。但是,我需要将 300 维状态解码回我的 10k 维状态,以便查找

问题 2: ......“编码”向量实际上已经位于隐藏层或输出层中了吗?

参考资料: 第一第二第三


2个回答

您是在问 300 维“中间层”是否已经学会将单词编码为 word2vec 之类的嵌入?

如果是这种情况,我会说不。one-hot 向量中没有任何内容可以指定两个单词之间的距离。例如,cattable的 one-hot 向量与catlion的距离相同使用嵌入,显然您希望第二个示例更接近。

回答我自己帖子的问题 1: :

我真的可以使用这 300 个神经元导致我的其他一些网络吗?说,在我的 LSTM 等中?

是的,我可以,因为隐藏的结果(图片中的橙色)已经代表了实际的嵌入向量。它现在应该用于任何其他自定义网络(LSTM 等),而不是 one-hot 编码向量。如果有多个自定义网络正在开发中,使用这个橙色向量确实会大大减少所需权重的数量。

注意,one-hot 向量和橙色层之间的连接由一个特殊的矩阵表示。

该矩阵是特殊的,因为每一列(或行,取决于您的首选符号)已经代表了这 300 个神经元中的这些预激活 - 对相应传入的 one-hot 向量的响应。所以你只取一列,把它当成整个橙色层,超级方便

更多信息在这里:https ://datascience.stackexchange.com/a/29161/43077

回答问题 2:确实,编码值已经在隐藏层的结果中(图片上的橙色)。您可以在任何其他算法中使用它们。

红色输出层仅在训练期间需要。从 InputVector 到 HiddenLayer 的权重是你最终关心的