主要问题: 如何创建一个能够同时对文本数据和数值特征进行分类的神经网络?
这听起来很简单,但我一定是哪里理解错了。
背景
我正在尝试使用TensorFlow 2/Keras构建一个文本分类器(这是我第一次尝试),目的是分析应用商店的评论,并将它们分类到以下类别:happy, pricingIssue, techIssue, productIssue, miscIssue
我的数据集包含以下内容:star_rating, review_text
以及相关的标签。
问题
根据TensorFlow的这个教程,我了解到需要使用tensorflow hub层将句子嵌入为固定形状的输出。
embedding = "https://tfhub.dev/google/tf2-preview/gnews-swivel-20dim/1"hub_layer = hub.KerasLayer(embedding, input_shape=[], dtype=tf.string, trainable=True)
然后我会使用这个作为输入层来构建模型。
model = tf.keras.Sequential()model.add(hub_layer)model.add(tf.keras.layers.Dense(16, activation='relu'))model.add(tf.keras.layers.Dense(1, activation='sigmoid'))
那么我的问题是,如何将数值评级插入到模型的数据中?
潜在解决方案?
使用两个输入层并以某种方式合并它们? 我认为我会希望使用hub层来嵌入数据,另一个输入层用于数值数据,然后将它们都导入到下一层?
先嵌入字符串然后附加评级? 我还可以考虑创建一个函数来预处理数据到数组中,并将评级附加到嵌入的字符串末尾,然后将整个东西用作输入对象。
我很困惑,任何指导都会有帮助!!
回答:
在咨询了专家之后,以上两种解决方案都可以使用,但各有不同的权衡:
-
使用两个输入层:你可以这样做,但不能使用顺序模型,因为这不再是按顺序进行的。这是一个更传统的图形模型
-
先附加字符串:因为嵌入层是预训练的,它不需要在模型内部进行,文本可以被嵌入然后与数值评级一起添加到张量中。
由于我对Tensorflow 2和Keras最为熟悉,我选择了第二种方法,这样我可以继续使用顺序模型。