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')
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. –
Sie hatten Recht! So habe ich die Etiketten geladen! – KenobiShan
Fügen Sie eine Antwort hinzu, ich werde es als korrekt angeben! – KenobiShan