python - 具有多个输入的神经网络(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 个不同的网络并将它们连接成一个?我可以同时使用演讲者和主题作为同一网络的输入吗?如果我将它们连接起来,我会怎么做(使用每个已经分类的输出作为输入?)?
解决方案
我过去曾像这样连接不同的输入类型。文档说,你不能再使用 Sequential
在以下情况下不适合使用顺序模型: • 您的模型有多个输入或多个输出 • 您的任何层都有多个输入或多个输出
在Keras.functional 文档中,有一个名为“具有多个输入和输出的模型”的部分,这几乎就是您要问的确切问题。
但是,我写了一个答案说:不排除将您的结构化数据转换为文本,例如在您当前拥有的文本前加上“xxspeaker firstname lastname xxtopic topicname”。它可能不适用于您当前的模型,它看起来很小......但是如果您要使用更大的模型,或者为任务微调大型 LM,例如使用 fast.ai 或 huggingface,您几乎可以肯定有能力从文本中学习它。
推荐阅读
- node.js - 由于 sanbox 问题,无法在 Heroku 上运行 Chromium/puppeteer
- amazon-web-services - EMR 中出现错误(S3 存储桶访问被拒绝)
- c++ - C++ 纯虚派生函数
- string - 在 Python 中搜索和替换嵌套列表字符串的某些关键字
- javascript - 来自 Angular 的 Powershell 脚本
- aws-cli - 使用 python 执行 AWS CLI
- scala - 在 Scala Spark 中以编程方式将所有特定数据类型列转换为其他数据类型
- python - 如何从字符串中解析日期时间和时间以及如何在 Python 中添加这些解析的日期时间和时间值
- json - 输入'未来
' 不是 Flutter 类型 'int' 的子类型 - python - OpenCV DNN 因 keras DenseNet121 而失败