Keras - Classificação Text - LSTM - Como texto de entrada?

votos
5

Estou tentando entender como usar LSTM para classificar um determinado conjunto de dados que eu tenho.

Eu pesquisei e encontrei este exemplo de keras e title: https://github.com/fchollet/keras/blob/master/examples/imdb_lstm.py

No entanto, estou confuso sobre como o conjunto de dados deve ser processado para entrada.

Eu sei keras tem métodos de texto pré-processamento, mas eu não tenho certeza qual usar.

As x conter n linhas com textos e y classificar o texto de felicidade / tristeza. Basicamente, 1.0 significa 100% feliz e 0.0 significa totalmente triste. os números podem variar, por exemplo, 0,25 ~~ e assim por diante.

Então, minha pergunta é: Como i entrada x e y corretamente? Eu tenho que usar o saco de palavras? Qualquer dica é apreciada!

I codificado esta abaixo, mas eu continuo recebendo o mesmo erro:

#('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')
Publicado 18/04/2016 em 16:40
fonte usuário
Em outras línguas...                            


1 respostas

votos
3

Analise como você está usando seu parser CSV para ler o texto em. Certifique-se de que os campos estão no formato texto, sentimento, se você quiser fazer uso do analisador como você escreveu isso em seu código.

Respondeu 18/04/2016 em 22:24
fonte usuário

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more