在Keras中嵌入单词也是降维技术吗?

问题描述

我想了解embedding_dim的目的,而不是使用整个vocab_size一个热向量,它是将一个热向量的尺寸从vocab_size降为{{ 1}}尺寸还是直观上还有其他实用程序?另外,应该如何确定embedding_dim的数字?

代码-

embedding_dim

O / P-

    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()

解决方法

如果分类功能少且训练数据少,则必须使用单热编码。如果您有大量的训练数据和大量的分类功能,则必须使用嵌入。

为什么开发嵌入?
如果您具有大量分类特征,并且使用了一键编码,则最终将获得一个庞大的稀疏矩阵,其中大多数元素为零。这不适用于训练ML模型。您的数据将遭受维度诅咒。使用嵌入,您基本上可以使用较小的维表示大量分类特征。而且,输出是一个密集向量,而不是稀疏向量。

嵌入的缺点:

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

优势

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

要为嵌入矢量选择的大小。

embedding_dimensions =  vocab_size ** 0.25

您可以看到here

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