在使用Tensorflow将其输入模型之前,如何在文本数据集上执行特征选择

时间:2019-01-21 09:52:12

标签: python tensorflow keras deep-learning feature-selection

我目前正在研究用于Twitter数据情感分析的深度学习模型。我正在按照Here

的示例进行操作

为提高准确性,我想先对Twitter文本数据进行特征选择,然后再将其输入作为神经网络模型的输入。我正在研究tensorflow和keras。

如何使用张量流实现这一目标?

    data = tweets[['text','airline_sentiment']]
data = data[data.airline_sentiment != "neutral"]
data['text'] = data['text'].apply(lambda x: x.lower())
data['text'] = data['text'].apply((lambda x: re.sub('[^a-zA-z0-9\s]','',x)))

max_fatures = 2000
tokenizer = Tokenizer(num_words=max_fatures, split=' ')
tokenizer.fit_on_texts(data['text'].values)
X = tokenizer.texts_to_sequences(data['text'].values)
X = pad_sequences(X)

embed_dim = 128
lstm_out = 196
model = Sequential()
model.add(Embedding(max_fatures, embed_dim,input_length = X.shape[1]))
model.add(Dropout(0.5))
model.add(LSTM(lstm_out, dropout=0.2, recurrent_dropout=0.2))
model.add(Dense(2,activation='softmax'))
model.compile(loss = 'categorical_crossentropy', optimizer='adam',metrics = ['accuracy'])
print(model.summary())

Y = pd.get_dummies(data['airline_sentiment']).values
X_train, X_test, Y_train, Y_test = train_test_split(X,Y, test_size = 0.33, random_state = 42)

X_val = X_train[:500]
Y_val = Y_train[:500]

partial_X_train = X_train[500:]
partial_Y_train = Y_train[500:]

batch_size = 512
history = model.fit(partial_X_train, 
                    partial_Y_train, 
                    epochs = 10, 
                    batch_size=batch_size, 
                    validation_data=(X_val, Y_val))

1 个答案:

答案 0 :(得分:1)

有几种方法可以做到这一点。一个简单的想法是使用TF-IDF作为特征重要性的度量。调用RESOURCES += a.qrc b.qrc后,可以使用Keras令牌生成器访问TF和IDF。

您可以简单地过滤出低于某个阈值的值:看一下Text Preprocessing

无论如何,我不建议您走这条路,因为您要进行深度学习,因此您的模型应该自动了解这一重要性。此外,您正在使用单词嵌入,减少出现的单词会影响这些嵌入。

您的字典(max_fatures)非常低,我将首先开始增加此数字。 Keras丢弃了所有其他令牌:

  

num_words:无或整型。可处理的最大字数(如果已设置,   标记化将仅限于最常用的num_words个单词   在数据集中)