首页 > 解决方案 > 具有多个输入的神经网络(keras、文本分类)

问题描述

我是机器学习的新手,对神经网络进行了一些实验并做了一些研究。我目前正在尝试制作一个用于假新闻检测的迷你网络。我的数据有几个特征(陈述、演讲者、日期、主题..),到目前为止,我已经尝试简单地使用虚假和真实陈述的文本作为我的网络的输入,并使用 glove 进行词嵌入。我尝试了以下网络:

model = tf.keras.Sequential(
[
    # part 1: word and sequence processing
    tf.keras.layers.Embedding(embeddings_matrix.shape[0], embeddings_matrix.shape[1], weights=[embeddings_matrix], trainable=True),
    tf.keras.layers.Conv1D(128, 5, activation='relu'),
    tf.keras.layers.GlobalMaxPooling1D(),
    tf.keras.layers.Dropout(0.2),
    # part 2: classification
    tf.keras.layers.Dense(128, activation='relu'),
    tf.keras.layers.Dense(1, activation='sigmoid')
])
model.compile(loss='binary_crossentropy',optimizer='adam',metrics=['accuracy'])

它给了我超过 90% 的训练准确率和大约 65% 的测试准确率。所以现在我想尝试添加另外 2 个功能,扬声器,给出为 [名字,姓氏] 和主题,它可以只是一个或几个词(例如疫苗或政治选举 2016),我决定限制/填充到 5 个字。

现在我不知道如何将这些功能组合到一个模型中。我认为在其他功能上使用词嵌入没有意义。我是否必须制作 3 个不同的网络并将它们连接成一个?我可以同时使用演讲者和主题作为同一网络的输入吗?如果我将它们连接起来,我会怎么做(使用每个已经分类的输出作为输入?)?

标签: pythontensorflowkerasneural-networktext-processing

解决方案


我过去曾像这样连接不同的输入类型。文档说,你不能再使用 Sequential

在以下情况下不适合使用顺序模型: • 您的模型有多个输入或多个输出 • 您的任何层都有多个输入或多个输出

Keras.functional 文档中,有一个名为“具有多个输入和输出的模型”的部分,这几乎就是您要问的确切问题。

但是,我写了一个答案说:不排除将您的结构化数据转换为文本,例如在您当前拥有的文本前加上“xxspeaker firstname lastname xxtopic topicname”。它可能不适用于您当前的模型,它看起来很小......但是如果您要使用更大的模型,或者为任务微调大型 LM,例如使用 fast.ai 或 huggingface,您几乎可以肯定有能力从文本中学习它。


推荐阅读