2016-04-18 12 views
5

मैं समझने की कोशिश कर रहा हूं कि मेरे पास एक निश्चित डेटासेट को वर्गीकृत करने के लिए एलएसटीएम का उपयोग कैसे करें।केरास - पाठ वर्गीकरण - एलएसटीएम - पाठ इनपुट कैसे करें?

मैं शोध किया और keras के इस उदाहरण और आईएमडीबी पाया: https://github.com/fchollet/keras/blob/master/examples/imdb_lstm.py

हालांकि, im कैसे डेटा सेट इनपुट करने के लिए संसाधित किया जाना चाहिए के बारे में उलझन।

मुझे पता है कि केर्स में प्री-प्रोसेसिंग टेक्स्ट विधियां हैं, लेकिन मुझे यकीन नहीं है कि किस का उपयोग करना है।

एक्स में ग्रंथों के साथ एन लाइनें हैं और वाई खुशी/उदासी से पाठ को वर्गीकृत करता है। असल में, 1.0 का मतलब है 100% खुश और 0.0 का मतलब पूरी तरह उदास है। संख्या भिन्न हो सकती है, उदाहरण के लिए 0.25 ~~ और इसी तरह।

तो मेरा सवाल यह है कि, मैं एक्स और वाई को सही तरीके से कैसे इनपुट करता हूं? क्या मुझे शब्दों के बैग का उपयोग करना है? किसी भी टिप की सराहना की जाती है!

लिए मैंने नीचे कोडित लेकिन मैं अगर आप एक ही त्रुटि मिल रही है #('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

आप पाठ को पढ़ने के लिए एक CSV पार्सर का उपयोग कर रहे हैं। क्या आपका डेटासेट/text.csv वाक्य, भावना के रूप में स्थापित है? यदि नहीं, तो आपको या तो इसे बनाने या फिर से सोचने की आवश्यकता होगी कि आप जिस संरचना को प्राप्त कर चुके हैं, उससे दो घटकों को कैसे पार्स करते हैं। –

+0

आप सही थे! मैं जिस तरह से लेबल लोड कर रहा था! – KenobiShan

+0

एक उत्तर जोड़ें मैं इसे सही के रूप में रखूंगा! – KenobiShan

उत्तर

3

समीक्षा कैसे आप अपने सीएसवी पार्सर का उपयोग कर रहे में पाठ पढ़ने के लिए रहते हैं। सुनिश्चित करें कि खेतों प्रारूप पाठ में हैं, भावना जैसा कि आपने इसे अपने कोड में लिखा है, पार्सर का उपयोग करना चाहते हैं।

+0

यह तरीका था कि मैं लेबल लोड कर रहा था! – KenobiShan

संबंधित मुद्दे