如何在 100D 词向量之外添加更多特征

数据挖掘 Python nlp 喀拉斯 词嵌入 情绪分析
2021-09-15 03:15:08

我正在使用推文文本进行情绪分析。我能够使用text_to_sequence()Keras 方法和 Python 中预训练的 GloVe 嵌入来构建词向量。

问题是如何在创建的 GloVe 嵌入旁边添加额外的特征并以正确的方式对其进行整形以馈送到嵌入层和一般算法?例如,假设嵌入的长度是 100,额外的特征是 3,将 3 个特征附加到 100 向量导致 103 向量长度是正确的方法吗?如果是这样,您将如何实现它。

在哪里:

corpusAsList 是将语料库作为列表中的文本。

maxlen 是填充单词序列的最大列数,以便所有向量具有相同的长度。

maxVocabulary 是要在序列中使用的最大单词量,并忽略其余单词。

andtokenizer用于将单词表示为词汇表中的数字。

例如,如果我们这样调用texts_to_sequences()

   # Create tokenized corpuss
    listTokenized = tokenizer.texts_to_sequences(corpusAsList)

    # Sequence dataset
    sequenceMatrixPrediction = sequence.pad_sequences(listTokenized, maxlen=maxlen)

然后像这样训练一个双向 LSTM 模型:

def getLSTMModel(maxlen, maxVocabulary, embedSizeLSTM=100, weights=None):

    inp = Input(shape=(maxlen,))
    x = Embedding(maxVocabulary, embedSizeLSTM,
                 weights=[weights], trainable=False)(inp)
    x = Bidirectional(LSTM(80, return_sequences=True))(x)
    x = GlobalMaxPool1D()(x)
    x = Dropout(0.25)(x)
    x = Dense(70, activation="relu")(x)
    x = Dropout(0.25)(x)
    x = Dense(1, activation="sigmoid")(x)
    model = Model(inputs=inp, outputs=x)
    model.compile(loss='binary_crossentropy',
                  optimizer='adam',
                  metrics=['accuracy'])


return model

我们如何为这个模型添加三个额外的功能?

1个回答

您可以将第二个输入层添加到您的架构中。

查看此链接Keras Guide Multiple Inputs以获得更详细的说明。

嵌入层的输出可以与辅助输入结合并传递给下一层。

auxiliary_input = Input(shape=(5,), name='aux_input')
x = keras.layers.concatenate([lstm_out, auxiliary_input])