python - 将顺序特征添加到 1D CNN 分类模型
问题描述
我正在构建一个使用 Keras 进行文本分类的 1D CNN 模型,其中输入是由tokenizer.texts_to_sequences
. 有没有办法为序列中的每个单词输入一系列数字特征(例如分数)?例如,对于句子 1,输入将是 ['the', 'dog', 'barked'],并且这个特定序列中的每个单词都有分数 [0.9, 0.75, 0.6]。分数不是特定于单词的,而是特定于句子的单词分数(如果这对如何格式化输入有影响的话)。在这种情况下,LSTM 会更合适吗?
提前谢谢了!
解决方案
是的,只需在输入张量中使用 2 个通道。
更好的说法是,如果您之前输入有形状:(batch_size, seq_len)
现在你可以拥有:(batch_size, seq_len, 2)
如果您查看Keras 文档,您会看到使用参数data_format
传递的字符串是channels_last
(默认)或channels_first
. 在这种情况下,默认值就可以了,因为2
(通道数是最后一个)。
您可以将 2 个输入数组堆叠成具有此形状的张量。
现在,如果您使用词嵌入,通道数可能不会是 2,但会是embedding_dim + 1
,因此最终输入形状将是:(batch_size, seq_len, embedding_dim + 1)
一般来说,您也可以参考这个其他Stack Overflow 问题。
无论如何,CNN 1D 和 LSTM 都可能是很好的模型……但这需要您根据您的任务、数据和模型约束来发现自己。
现在作为最后一点,您甚至可以考虑一个具有多个输入的模型,一个是单词序列,另一个是分数。请参阅此文档页面或我在 Internet 上找到的此随机教程。您也可以再次参考相同的SO question。
推荐阅读
- php - 比较2个对象数组php并返回匹配
- android - 无法在 android studio 中加载 .so
- gcc - 如何为 arm64 构建 gcc 交叉编译器
- haskell - 使用 freer-simple 之类的库时,如何合并效果解释器?
- python - 什么是 Python 中的正则表达式,可以检测字符串中 +1 ***-***-**98 格式的电话号码?
- objective-c - 在 iOS 11 上启动应用程序时如何获取 CFBundleIdentifier
- java - 无法在 servlet 中发送参数
- django - Django 表单初始化问题 - 如何在超类中设置本地化?
- visual-studio-code - 如何在 VS Code 中将默认文件类型设置为所有文件(*。*)?
- python - 从背景图像上的浅色文本中提取文本