我只是从文本分类开始,然后陷入了嵌入层。如果我有一批编码为与每个单词对应的整数的序列,则嵌入层是什么样的?是否有像正常神经层一样的神经元?
我看过<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的基本知识,请告诉我,我会进行检查。
答案 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]
。