【问题标题】:Keras: Embadding on Sentences Array as InputKeras:嵌入句子数组作为输入
【发布时间】:2018-07-05 01:10:26
【问题描述】:

我是 keras 的新手。我尝试创建一个以嵌入层作为输入层的神经网络。据我目前了解,结构如下:

model.add(Embedding(word_count,embedding_size,input_length=sentence_length).

这适用于标记句子的数据集。

现在我想更改数据集的结构。我将标记句子集(句子数组)。

据我所知,我不能再将 Embedding 层用作输入层。这是因为它期望一个句子作为输入,而不是一个句子数组。我可以改变一些东西,以便我仍然可以在我的模型中使用嵌入层,但将句子数组作为输入?

我的句子数组的数组长度始终与我的句子长度保持相同的整体句子相同。

【问题讨论】:

  • Embedding 层的输入形状是(batch_size, input_length),其中input_length 可以是None(条件是之后不要立即使用 Flatten 或 Dense 层)。您需要传递一组句子的用例是什么?它们是否相互关联,即段落的句子或同一段文本?如果是这种情况,那么为什么不将它们作为一个大向量传递,特别是当所有句子的长度相同时,这使得在后续层中处理它们变得更加容易?如果我的话似乎有点模糊,让我举个例子。
  • @today 我想传递一组句子,因为一个数组指向一个用户。所以我想传递一个用户的输入。有一个大数组会是什么样子,你能举个例子吗?非常感谢你:)

标签: python machine-learning neural-network keras word-embedding


【解决方案1】:

假设您有一组固定长度的句子,并且正如您所提到的,所有数组中的句子数量都是相同的。因此,如果您将所有数据存储在一个张量中,它将具有(num_of_arrays, num_of_sentences, length_of_sentence) 的形状。每个句子数组都有自己的标签。所以基本上你的模型应该将一组句子作为输入并预测它的标签。现在要使用嵌入层,我们首先重塑我们的数据,然后将其传递给嵌入层,然后(如有必要)我们将其重塑回来。这是一个例子:

from keras import models, layers

# the following numbers are just for demonstration
vocab_size = 1000
embed_dim = 50

num_arrays = 100
num_sentences = 200
len_sentence = 300

model = models.Sequential()
model.add(layers.Reshape((num_sentences*len_sentence,), input_shape=(num_sentences, len_sentence)))
model.add(layers.Embedding(vocab_size, embed_dim, input_length=num_sentences*len_sentence))
model.add(layers.Reshape((num_sentences, len_sentence, embed_dim)))
# add whatever layers as you wish to complete your model

model.summary()

这是模型摘要:

_________________________________________________________________
Layer (type)                 Output Shape              Param #   
=================================================================
reshape_1 (Reshape)          (None, 60000)             0         
_________________________________________________________________
embedding_1 (Embedding)      (None, 60000, 50)         50000     
_________________________________________________________________
reshape_2 (Reshape)          (None, 200, 300, 50)      0         
=================================================================
Total params: 50,000
Trainable params: 50,000
Non-trainable params: 0
_________________________________________________________________

如您所见,数组中的每个句子现在都由形状为(sentence_length, embed_dim) 的矩阵表示。现在您可以添加更多层来完成您的模型。我不确定这是否是您要求的。如果您还有其他意思,请在 cmets 中告诉我。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-10
    • 2019-09-15
    • 2018-08-23
    • 2020-04-17
    • 2019-11-13
    相关资源
    最近更新 更多