Keras 中的词嵌入也是一种降维技术吗?

is word embedding in Keras a dimensionality reduction technique also?

我想了解 embedding_dim 与使用整个 vocab_size 的一个热向量的目的,它是对从 vocab_size dim 到 one hot 向量的降维吗embedding_dim 尺寸或者是否有任何其他直观的实用程序?另外应该如何决定embedding_dim个数?

代码-

    vocab_size = 10000
    embedding_dim = 16
    max_length = 120
    
    model = tf.keras.Sequential([
        tf.keras.layers.Embedding(vocab_size, embedding_dim, input_length=max_length),
        tf.keras.layers.Flatten(),
        tf.keras.layers.Dense(6, activation='relu'),
        tf.keras.layers.Dense(1, activation='sigmoid')
    ])
    model.compile(loss='binary_crossentropy',optimizer='adam',metrics=['accuracy'])
    model.summary()

O/P -

Model: "sequential"
_________________________________________________________________
Layer (type)                 Output Shape              Param #   
=================================================================
embedding (Embedding)        (None, 120, 16)           160000    
_________________________________________________________________
flatten (Flatten)            (None, 1920)              0         
_________________________________________________________________
dense (Dense)                (None, 6)                 11526     
_________________________________________________________________
dense_1 (Dense)              (None, 1)                 7         
=================================================================
Total params: 171,533
Trainable params: 171,533
Non-trainable params: 0
_________________________________________________________________

当您的分类特征和训练数据较少时,您必须使用 one-hot 编码。如果你有大量的训练数据和大量的分类特征,你必须使用嵌入。

为什么要开发嵌入?
如果你有大量的分类特征并且你使用了 one-hot 编码,你最终会得到一个巨大的稀疏矩阵,其中大部分元素为零。这不适合训练 ML 模型。您的数据将遭受维数灾难。使用嵌入,您基本上可以使用较小的维度表示大量分类特征。此外,输出是密集向量而不是稀疏向量。

嵌入的缺点:

  • 需要时间训练
  • 需要大量训练数据

优势

  • 嵌入可以告诉您有关项目的语义。它将相关项目组合在一起。 one-hot 编码不是这种情况。 One-hot 编码只是一个项目在另一个维度上的正交表示。

嵌入向量的大小 select。

embedding_dimensions =  vocab_size ** 0.25

可以看到here.

注意:这只是一个经验法则。您可以 select 嵌入尺寸小于或大于此尺寸。词嵌入的质量随着维度的增加而增加。但达到某个点后,边际收益会减少。