【问题标题】:is word embedding in Keras a dimensionality reduction technique also?Keras 中的词嵌入也是一种降维技术吗?
【发布时间】:2020-09-05 16:13:37
【问题描述】:

我想了解embedding_dim 与使用整个vocab_size 的一个热向量的目的,它是从vocab_size 暗淡到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
_________________________________________________________________

【问题讨论】:

    标签: tensorflow keras deep-learning nlp word-embedding


    【解决方案1】:

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

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

    嵌入的缺点:

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

    优势

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

    为嵌入向量选择什么尺寸。

    embedding_dimensions =  vocab_size ** 0.25
    

    你可以看到here

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

    【讨论】:

    • 解释得很好!谢谢!
    • 只是一个后续问题,除了时间增加 embedding_dim #s 有什么影响?
    • 您提供的嵌入维度越多,您生成的嵌入质量就越高。但需要更多的训练数据以及更多的分类特征。
    • 但是维度的诅咒也开始进入那里,对吗?假设我的 vocab_size 为 100,并且我创建了一个 50 维的嵌入,这也会导致过拟合吗?
    • 是的,您可以使用拇指规则来近似嵌入尺寸。也就是说,这一切都归结为一个问题,那就是what works best for my problem/dataset。使用 50 个维度来表示大小为 100 的词汇是多余的。这就像在 10 维平面中表示一个点 (x,y)。
    猜你喜欢
    • 2020-12-27
    • 1970-01-01
    • 1970-01-01
    • 2013-07-29
    • 2010-09-07
    • 2017-11-01
    • 1970-01-01
    • 2020-09-24
    • 2020-06-28
    相关资源
    最近更新 更多