2016-12-25 3 views
1

나는 keras를 사용하여 ANN 분류자를 코딩 했으므로 지금은 텍스트 및 시간 계열 예측을 위해 keras에서 RNN을 코딩하는 방법을 배우고 있습니다. 웹에서 잠시 동안 검색 한 결과 RNN의 초보 학습자에게는 괜찮은 Jason Brownlee가이 tutorial을 발견했습니다. 원본 기사는 LSTM을 사용하여 텍스트 분류를 위해 IMDb 데이터 세트를 사용하고 있지만 데이터 세트 크기가 크기 때문에 스팸 감지 데이터 세트를 작은 것으로 변경했습니다.keras RNN을 사용하여 데이터 세트에서 텍스트를 분류하는 방법은 무엇입니까?

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

교육 및 테스트 세트로 데이터 세트를 성공적으로 처리했지만이 데이터 세트에 대해 내 RNN을 어떻게 모델링해야합니까?

답변

-1

여전히 여기에 머물러 있다면 check out this example by Jason Brownlee. 당신이 그곳에있는 것처럼 보입니다. 작동해야하는 모델을 얻으려면 LSTM 레이어와 Dense 레이어를 추가해야합니다.

1

신경망 모델을 학습하기 전에 raw text 데이터를 numeric vector으로 나타내야합니다. 이를 위해 CountVectorizer 또는 TfidfVectorizerscikit-learn에서 제공 할 수 있습니다. 원시 텍스트 형식에서 숫자 벡터 표현으로 변환 한 후 텍스트 분류 문제에 대해 RNN/LSTM/CNN을 교육 할 수 있습니다.