我刚开始做RNN。我正在做一个LSTM模型,需要接受twitter帖子作为文本和情感。我遇到了如何为模型准备预处理数据的问题。
我使用的是tesorflow v2.12.0。
posts是一个twitter帖子数组。情绪分为neg,neu和pos。
posts=data['post'].values.tolist()
sent_neg=np.array(data['sent_neg'])
sent_neu=np.array(data['sent_neu'])
sent_pos=np.array(data['sent_pos'])
sequences=tokenizer.texts_to_sequences(posts)
maxlen = max(len(seq) for seq in sequences)
padded_sequence = tf.keras.preprocessing.sequence.pad_sequences(sequences, truncating='post', padding='post', maxlen=maxlen)
我使用的是VaderSentiment,它返回文本的情感,它的形式是[0,1,2]。由于RNN接受顺序数据,我想知道如何将情感添加到填充数据中。sent_array
是一个数组,每个post都有sent,其中sent_array[0]
是posts[0]
的sent。
目前,我已经添加发送到这样的填充数据。
input = np.concatenate((padded_sequence, sent_array), axis=1)
尽管colab让我运行和训练这个模型,但当我试图通过flask在我的localhost上进行预测时,它给了我一个错误,我接受了一个单一的文本,并在上面运行维达情绪
这是 flask 上的密码
text = request.get_json()['text']
padded = preprocessing(text)
sentiment_dict = sent_analysis(text) # returns sent in [0,1,2,3] format
print(sentiment_dict)
sent_arr = [value for value in sentiment_dict.values()]
sent_arr.pop() # last value not needed
sent_neg = np.array(sent_arr[0])
sent_neu = np.array(sent_arr[1])
sent_pos = np.array(sent_arr[2])
sentiment_array = np.stack((sent_neg,sent_neu,sent_pos), axis=0)
sentiment_array = sentiment_array.reshape((1, -1))
input = np.concatenate((padded, sentiment_array), axis=1) `
返回以下错误这,
ValueError:串联轴的所有输入数组维度必须完全匹配,但沿着维度,索引为的数组的大小为248,索引为1的数组的大小为1
我想知道我是否已经在两端正确地预处理了我的数据。提前感谢您的任何反馈:)
1条答案
按热度按时间k2fxgqgv1#
如果我理解正确的话,你有一组帖子作为输入,它们的形状经过标记化后为
(nr. of posts, max_len)
。现在你想以某种方式在其输入中包含每篇帖子的情感信息。我认为有两种方法可以做到这一点。
首先,您可以在每个分词输入之前添加其情感值,因此您将获得一个新的输入形状
(nr. of posts, 1 + max_len)
。在这里,您必须注意情感值[0,1,2]不要与分词器的值重叠。因此,您需要找出分词器不使用的值。可能,[-1,-2,-3]应该有效。另一种选择是在嵌入输入标记之后添加情感信息。在这种情况下,您可以再次将值前置或实际将情感值求和到嵌入的向量(在这种情况下,我会将情感值重新缩放为[-1,0,1])。
我认为在代码中它看起来像这样:
padded_sequence现在在该帖子的每个序列的开始处嵌入了情感值。我使用
-3
,因为这些值不应该与tokenisers的输出值重叠。希望,这有助于我正确理解你的问题。