网络的嵌入层是什么样的?
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
。
刚开始做文本分类,卡在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
。