Keras:将语句数组作为输入添加

时间:2018-07-03 16:49:37

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

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

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

这适用于带有标签句子的数据集。

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

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

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

1 个答案:

答案 0 :(得分: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)形状的矩阵表示。现在,您可以添加更多层以完成模型。我不确定这是否是您要的。如果您还有其他意思,请在评论中告诉我。