如果有多个文本功能,如何使用Keras嵌入图层

时间:2018-04-02 05:28:49

标签: keras word2vec word-embedding

我理解如何使用Keras嵌入层,以防有像IMDB审查分类中的单个文本功能。但是,当我遇到分类问题时,我很困惑如何使用嵌入层,其中有多个文本功能。例如,我有一个包含2个文本特征诊断文本和请求过程的数据集,标签是二进制类(1表示已批准,0表示未批准)。在下面的示例中,与IMDB数据集不同,x_train有2列诊断和过程。我是否需要创建2个嵌入层,一个用于诊断和过程?如果是这样,需要更改哪些代码?

x_train = preprocessing.sequences.pad_sequences(x_train, maxlen=20)
x_test = preprocessing.sequences.pad_sequences(x_test, maxlen=20)
model = Sequential()
model.add(Embedding(10000,8,input_length=20)
model.add(Flatten())
model.add(Dense(1, activation='sigmoid')
model.compile(optimizer='rmsprop', loss='binary_crossentropy', metrics=['acc'])
model.fit(x_train, y_train, epochs=10, batch_size=32, validation_split=0.2)

1 个答案:

答案 0 :(得分:2)

您有一些选择,您可以将这两个功能连接成一个 并为它们创建一个嵌入。这是逻辑

all_features = np.hstack(X['diag'] + X['proc'])
X = pad_sequence(all_features, max_len)
# build model as usual, as you can see on a single embedding layer is
# needed.

或者您可以使用Functional api并构建多个输入模型

diag_inp = Input()
diag_emb = Embedding(512)(diag_input)
proc_inp = Input()
proc_emb = Embedding(512)(proc_input)

# concatenate them to makes a single vector per sample
merged = Concatenate()[diag_emb, proc_emb]
out = Dense(2,  activation='sigmoid')
model = Model(inputs=[diag_inp, proc_inp], outputs=[out])

那就是你可以学习嵌入连接或者你可以学习 多次嵌入并在训练时将它们连接起来。