2016-12-25 4 views
1

Ich habe ANN-Klassifikatoren mit Keras codiert und jetzt lerne ich selbst, RNN in Keras für Text und Zeitreihenvorhersage zu kodieren. Nachdem ich eine Weile im Web gesucht habe, fand ich diese tutorial von Jason Brownlee, die für Anfänger in RNN anständig ist. Der ursprüngliche Artikel verwendet das IMDb-Dataset für die Textklassifizierung mit LSTM, aber wegen seiner großen Dataset-Größe habe ich es in ein sms-Spam-Erkennungs-Dataset geändert.Wie keras RNN zur Textklassifizierung in einem Datensatz verwendet werden kann?

# 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)) 

Ich habe erfolgreich den Datensatz in die Ausbildung verarbeitet und Set-Prüfung aber jetzt, wie soll ich meine RNN zu diesem Datensatz modellieren?

Antwort

-1

Wenn Sie immer noch auf diesem stecken, check out this example by Jason Brownlee. Sieht so aus, als wärst du am meisten da. Sie müssen eine LSTM-Ebene und eine Dichten-Ebene hinzufügen, um ein Modell zu erhalten, das funktionieren sollte.

1

Sie müssen raw text Daten als numeric vector vor dem Trainieren eines neuronalen Netzwerkmodells darstellen. Hierzu können Sie CountVectorizer oder TfidfVectorizer verwenden, die von scikit-learn bereitgestellt werden. Nach dem Konvertieren vom Raw-Textformat in die numerische Vektordarstellung können Sie ein RNN/LSTM/CNN für das Problem der Textklassifizierung trainieren.

Verwandte Themen