网络的嵌入层是什么样的?

What does the embedding layer for a network looks like?

刚开始做文本分类,卡在embedding层了。如果我有一批编码为与每个单词对应的整数的序列,嵌入层是什么样的?是否有像正常神经层一样的神经元?

我看过 keras.layers.Embedding,但在查找文档后,我真的很困惑它是如何工作的。 input_dim我能看懂,但为什么output_dim是二维矩阵?我在这个嵌入层中有多少权重?

很抱歉,如果我的问题没有解释清楚,我没有 NLP 经验,如果这个关于词嵌入的问题是 NLP 中的常见基础知识,请告诉我,我会检查它。

想一想您从中获取对象的列表。

你做到了object = myList[index]

嵌入层与此列表类似。但是 "object" 是可训练值的向量。

因此,您的序列包含从嵌入中获取向量的索引。

顺序中的单词 1 说:给我单词 1 的向量
单词 2 说:给我单词 2 的向量,依此类推。

在实践中,权重将是一个二维矩阵。您可以根据序列中传递的单词索引从中获取行。

[wordIndex1, wordIndex2, wordIndex3]这样的序列会变成[wordVector1, wordVector2, wordVector3]

嵌入层只是一个可训练的查找table:它以整数索引作为输入,returns作为与该索引关联的词嵌入的输出:

index |                            word embeddings
=============================================================================
  0   |  word embedding for the word with index 0 (usually used for padding)
-----------------------------------------------------------------------------
  1   |  word embedding for the word with index 1
-----------------------------------------------------------------------------
  2   |  word embedding for the word with index 2
-----------------------------------------------------------------------------
  .   |
  .   |
  .   |
-----------------------------------------------------------------------------
  N   |  word embedding for the word with index N
-----------------------------------------------------------------------------

从这个意义上说,它是可训练的,嵌入值不一定是固定的,可以在训练期间改变。 input_dim 参数实际上是单词的数量(或者更一般地说,序列中不同元素的数量)。 output_dim 参数指定每个单词嵌入的维度。例如,在使用 output_dim=100 的情况下,每个单词嵌入将是一个大小为 100 的向量。此外,由于嵌入层的输入是一个整数序列(对应于句子中的单词),因此其输出将具有(num_sequences, len_sequence, output_dim) 的形状,即对于序列中的每个整数,返回大小为 output_dim 的嵌入向量。

至于嵌入层中权重的数量,很容易计算:有 input_dim 个唯一索引,每个索引与大小为 output_dim 的词嵌入相关联。因此嵌入层中的权重数为input_dim x ouput_dim