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

时间:2018-12-13 12:49:10

标签: machine-learning keras nlp word-embedding

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

我看过<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script> <p id="copyMe"> This is the copied text! </p> <input type="hidden" class="copied"/> <button> COPY </button> <input type="text" placeholder="paste copied text here"/>,但是在查找文档后,我对它的工作原理感到非常困惑。我可以理解keras.layers.Embedding,但是为什么input_dim是2D矩阵呢?这个嵌入层中有多少个权重?

很抱歉,如果我的问题不清楚,我没有使用NLP的经验,如果有关单词嵌入的问题是NLP的基本知识,请告诉我,我会进行检查。

2 个答案:

答案 0 :(得分:1)

嵌入层只是一个可训练的查找表:它将整数索引作为输入,并返回与该索引关联的词嵌入作为输出:

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

答案 1 :(得分:0)

考虑一个从中获取对象的列表。

您做object = myList[index]

嵌入层与此列表相似。但是“对象”是可训练值的向量。

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

单词1依次说:给我单词1的载体
单词2说:给我单词2的向量,依此类推。

实际上,权重将是2D矩阵。您可以根据序列中传递的单词索引从中获取行。

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