Python 使用Tensorflow 2.0/Keras中的其他数据功能创建文本分类器

Python 使用Tensorflow 2.0/Keras中的其他数据功能创建文本分类器,python,tensorflow,machine-learning,keras,nlp,Python,Tensorflow,Machine Learning,Keras,Nlp,主要问题:如何创建一个神经网络,将文本数据与数字特征一起分类 这听起来很简单,但我一定没有正确理解某些东西 背景 我正在尝试使用TensorFlow 2/Keras构建一个文本分类器(这是第一次)来查看应用商店评论,并将其分为以下类别:happy、pricingIssue、techIssue、productIssue、miscIssue 我有一个数据集,包含:star\u rating,review\u text和相关标签 问题 我对TensorFlow的理解是,我需要使用TensorFlow中

主要问题:如何创建一个神经网络,将文本数据与数字特征一起分类

这听起来很简单,但我一定没有正确理解某些东西

背景 我正在尝试使用TensorFlow 2/Keras构建一个文本分类器(这是第一次)来查看应用商店评论,并将其分为以下类别:
happy、pricingIssue、techIssue、productIssue、miscIssue

我有一个数据集,包含:
star\u rating,review\u text
和相关标签

问题 我对TensorFlow的理解是,我需要使用TensorFlow中心层将句子嵌入为固定形状输出

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'))
所以我的问题是,我应该在哪里将数字评级插入到模型的数据中

潜在的解决方案? 使用两个输入层并以某种方式合并它们?我想我应该使用中心层来嵌入数据,另一个输入层用于数字数据,然后将它们都导入下一层

我是否先嵌入字符串,然后将评级附加到该字符串?我还可以看到创建一个函数,该函数将数据预处理到数组中,并将评级附加到嵌入字符串的末尾,然后将整个字符串用作输入对象


我被难倒了,任何指导都是有帮助的

咨询专家后,上述两种解决方案都可以工作,但有不同的权衡:

  • 使用两个输入层:可以这样做,但不能使用顺序模型,因为这不再是顺序模型。这是一个更传统的图形

  • 首先附加字符串:因为嵌入层是预先训练的,所以它不需要发生在模型内部,文本可以嵌入,然后与数值评级一起添加到张量中


因为我最熟悉Tensorflow 2和Keras,所以我选择了第二个选项,所以我可以继续使用顺序模型。

还有一个选项可以将非文本数据添加到文本模型中:将数据文本化。您执行此操作的确切方式取决于您使用的标记器,以及您的模型如何处理以前未见过的单词(OOV单词)。但是,与您可能看到的特殊标记(如
\uuuuu EOS\uuuuu
来告诉模型一句话结束了,下一句话开始了)类似,您可以在评论字符串前面添加一个文本版本的评分:
review\u string=“\u 5\u stars\uu”+review\u string

这听起来像是一种不可能奏效的黑客行为,但我已经和AWS的某个人谈过,他们在生产中使用它将元数据传递给文本模型