文字特征多于1种时如何使用Keras嵌入层

use*_*866 5 word2vec keras word-embedding

我了解在IMDB审阅分类中只有一个文本功能的情况下如何使用Keras嵌入层。但是,当我遇到一个分类问题(其中有多个文本功能)时,我对如何使用嵌入层感到困惑。例如,我有一个具有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)
Run Code Online (Sandbox Code Playgroud)

ors*_*ady 5

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

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.
Run Code Online (Sandbox Code Playgroud)

或者您可以使用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])
Run Code Online (Sandbox Code Playgroud)

也就是说,您可以学习用于连接的嵌入,或者您可以学习多个嵌入并在训练时将它们连接起来。

  • 在 concat 步骤中,创建合并。难道不应该是像“out = Dense(2,activation='sigmoid')(merged)”这样的东西吗? (3认同)