首页 文章

如何使用keras RNN进行数据集中的文本分类?

提问于
浏览
2

我使用keras编码了ANN分类器,现在我正在学习自己在keras中编码RNN以进行文本和时间序列预测 . 在网上搜索了一段时间后,我发现Jason Brownlee的这个tutorial对于RNN的新手学习者来说是不错的 . 原始文章使用IMDb数据集进行LSTM文本分类,但由于数据集大小较大,我将其更改为小型短信垃圾邮件检测数据集 .

# LSTM with dropout for sequence classification in the IMDB dataset
import numpy
from keras.datasets import imdb
from keras.models import Sequential
from keras.layers import Dense
from keras.layers import LSTM
from keras.layers.embeddings import Embedding
from keras.preprocessing import sequence
import pandaas as pd
from sklearn.cross_validation import train_test_split

# fix random seed for reproducibility
numpy.random.seed(7)

url = 'https://raw.githubusercontent.com/justmarkham/pydata-dc-2016-tutorial/master/sms.tsv'
sms = pd.read_table(url, header=None, names=['label', 'message'])

# convert label to a numerical variable
sms['label_num'] = sms.label.map({'ham':0, 'spam':1})
X = sms.message
y = sms.label_num
print(X.shape)
print(y.shape)

# load the dataset 
X_train, X_test, y_train, y_test = train_test_split(X, y, random_state=1)
top_words = 5000

# truncate and pad input sequences
max_review_length = 500
X_train = sequence.pad_sequences(X_train, maxlen=max_review_length)
X_test = sequence.pad_sequences(X_test, maxlen=max_review_length)

# create the model
embedding_vecor_length = 32
model = Sequential()
model.add(Embedding(top_words, embedding_vecor_length, input_length=max_review_length, dropout=0.2))
model.add(LSTM(100, dropout_W=0.2, dropout_U=0.2))
model.add(Dense(1, activation='sigmoid'))
model.compile(loss='binary_crossentropy', optimizer='adam', metrics=['accuracy'])
print(model.summary())
model.fit(X_train, y_train, nb_epoch=3, batch_size=64)

# Final evaluation of the model
scores = model.evaluate(X_test, y_test, verbose=0)
print("Accuracy: %.2f%%" % (scores[1]*100))

我已成功将数据集处理为训练和测试集,但现在我应该如何为此数据集建模我的RNN?

2 回答

  • 2

    在训练神经网络模型之前,您需要将 raw text 数据表示为 numeric vector . 为此,您可以使用 scikit-learn 提供的 CountVectorizerTfidfVectorizer . 从原始文本格式转换为数字矢量表示后,您可以训练RNN / LSTM / CNN用于文本分类问题 .

  • -1

    如果你仍然坚持这个,check out this example by Jason Brownlee . 看起来你大部分都在那里 . 您需要添加LSTM图层和Dense图层以获取应该起作用的模型 .

相关问题