2016-04-18 16 views
5

Ich versuche zu verstehen, wie man LSTM verwendet, um einen bestimmten Datensatz zu klassifizieren, den ich habe.Keras - Textklassifikation - LSTM - Wie Text eingeben?

Ich recherchieren und fand dieses Beispiel keras und imdb: https://github.com/fchollet/keras/blob/master/examples/imdb_lstm.py

jedoch im verwirrt darüber, wie muss der Datensatz zur Eingabe verarbeitet werden.

Ich weiß Keras hat vorverarbeitende Textmethoden, aber ich bin nicht sicher, welche zu verwenden.

Die x enthalten n Zeilen mit Texten und die y klassifizieren den Text nach Glück/Traurigkeit. Grundsätzlich bedeutet 1.0 100% glücklich und 0.0 bedeutet total traurig. die Zahlen können variieren, zum Beispiel 0,25 ~~ und so weiter.

Also meine Frage ist, wie ich x und y richtig eingeben? Muss ich Beutel mit Wörtern benutzen? Jeder Tipp ist willkommen!

codierte ich dies unten, aber ich immer wieder die gleichen Fehler #('Bad input argument to theano function with name ... at index 1(0-based)', 'could not convert string to float: negative')

import keras.preprocessing.text 
import numpy as np 

np.random.seed(1337) # for reproducibility 

from keras.preprocessing import sequence 
from keras.models import Sequential 
from keras.layers.core import Dense, Activation 
from keras.layers.embeddings import Embedding 
from keras.layers.recurrent import LSTM 

print('Loading data...') 
import pandas 

thedata = pandas.read_csv("dataset/text.csv", sep=', ', delimiter=',', header='infer', names=None) 

x = thedata['text'] 
y = thedata['sentiment'] 

x = x.iloc[:].values 
y = y.iloc[:].values 

################################### 
tk = keras.preprocessing.text.Tokenizer(nb_words=2000, filters=keras.preprocessing.text.base_filter(), lower=True, split=" ") 
tk.fit_on_texts(x) 

x = tk.texts_to_sequences(x) 


################################### 
max_len = 80 
print "max_len ", max_len 
print('Pad sequences (samples x time)') 

x = sequence.pad_sequences(x, maxlen=max_len) 

######################### 
max_features = 20000 
model = Sequential() 
print('Build model...') 

model = Sequential() 
model.add(Embedding(max_features, 128, input_length=max_len, dropout=0.2)) 
model.add(LSTM(128, dropout_W=0.2, dropout_U=0.2)) 
model.add(Dense(1)) 
model.add(Activation('sigmoid')) 

model.compile(loss='binary_crossentropy', optimizer='rmsprop') 

model.fit(x, y=y, batch_size=200, nb_epoch=1, verbose=1, validation_split=0.2, show_accuracy=True, shuffle=True) 

# at index 1(0-based)', 'could not convert string to float: negative') 
+0

Sie verwenden einen CSV-Parser, um den Text einzulesen. Ist Ihr Datensatz/text.csv als Satz, Sentiment eingerichtet? Wenn nicht, müssen Sie es entweder so machen oder überdenken, wie Sie die beiden Komponenten aus der Struktur, die Sie haben, analysieren. –

+0

Sie hatten Recht! So habe ich die Etiketten geladen! – KenobiShan

+0

Fügen Sie eine Antwort hinzu, ich werde es als korrekt angeben! – KenobiShan

Antwort

3

Bewertung bekommen, wie Sie Ihren CSV-Parser verwenden, in den Text zu lesen. Stellen Sie sicher, dass die Felder im Format Text, Gefühl, wenn Sie möchte den Parser verwenden, wie Sie ihn in Ihrem Code geschrieben haben.

+0

So habe ich die Etiketten geladen! – KenobiShan