当有超过 1 个文本特征时如何使用 Keras 嵌入层

How to use Keras Embedding layer when there are more than 1 text features

我了解如何使用 Keras 嵌入层,以防像 IMDB 评论 classification 中那样存在单个文本功能。但是,当我遇到分类问题时,我很困惑如何使用嵌入层,其中有多个文本特征。例如,我有一个包含 2 个文本特征诊断文本和请求过程的数据集,标签是二进制 class(1 表示已批准,0 表示未批准)。在下面的示例中,x_train 有 2 列 Diagnosis 和 Procedure,这与 IMDB 数据集不同。我是否需要创建 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)

你有一些选择,你可以将两个特征连接成一个 并为它们创建一个单一的嵌入。这是逻辑

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')(merged)
model = Model(inputs=[diag_inp, proc_inp], outputs=[out])

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