我刚开始研究文本分类,就在嵌入层上遇到了困难。如果我有一批序列编码成对应每个词的整数,嵌入层是什么样的?它像普通的神经层那样有神经元吗?
我看到了keras.layers.Embedding
,但在查看了文档后,我对它的工作原理感到非常困惑。我能理解input_dim
,但为什么output_dim
是一个二维矩阵?我在这个嵌入层中有多少权重?
如果我的问题解释得不够清楚,我很抱歉,我在自然语言处理方面没有经验,如果这个问题关于词嵌入是NLP中的常见基础知识,请告诉我,我会去查阅的。
回答:
嵌入层只是一个可训练的查找表:它以整数索引作为输入,并返回与该索引相关联的词嵌入:
index | word embeddings============================================================================= 0 | 索引为0的词的词嵌入(通常用于填充)----------------------------------------------------------------------------- 1 | 索引为1的词的词嵌入----------------------------------------------------------------------------- 2 | 索引为2的词的词嵌入----------------------------------------------------------------------------- . | . | . |----------------------------------------------------------------------------- N | 索引为N的词的词嵌入-----------------------------------------------------------------------------
它的可训练性在于嵌入值不一定是固定的,可以在训练过程中改变。input_dim
参数实际上是词的数量(或者更普遍地说,是序列中不同元素的数量)。output_dim
参数指定了每个词嵌入的维度。例如,如果使用output_dim=100
,每个词嵌入将是一个大小为100的向量。此外,由于嵌入层的输入是一系列整数(对应于句子中的词),因此它的输出形状将是(num_sequences, len_sequence, output_dim)
,即对于序列中的每个整数,将返回一个大小为output_dim
的嵌入向量。
至于嵌入层中的权重数量,很容易计算:有input_dim
个独特的索引,每个索引与一个大小为output_dim
的词嵌入相关联。因此,嵌入层中的权重数量是input_dim x output_dim
。