首页 > 解决方案 > 将顺序特征添加到 1D CNN 分类模型

问题描述

我正在构建一个使用 Keras 进行文本分类的 1D CNN 模型,其中输入是由tokenizer.texts_to_sequences. 有没有办法为序列中的每个单词输入一系列数字特征(例如分数)?例如,对于句子 1,输入将是 ['the', 'dog', 'barked'],并且这个特定序列中的每个单词都有分数 [0.9, 0.75, 0.6]。分数不是特定于单词的,而是特定于句子的单词分数(如果这对如何格式化输入有影响的话)。在这种情况下,LSTM 会更合适吗?

提前谢谢了!

标签: pythonkerasdeep-learningconv-neural-networktext-classification

解决方案


是的,只需在输入张量中使用 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


推荐阅读