2016-12-22 9 views
0

Я пробую код по этой ссылке http://deeplearning.net/tutorial/lstm.html и изменил данные imdb на свои собственные данные. Я пытаюсь расширить эту модель до трехмерной многомерной модели с добавлением «нейтрального» класса вместо биномиальной модели, представленной в учебнике, который классифицирует только «положительные» и «отрицательные» классы.LSTM Networks for Sentiment Analysis - Как расширить эту модель до 3 классов и классифицировать новые примеры?

Чтобы построить эту новую модель, я переписал build_dict и grab_data функции построить свой собственный словарь и возвращающие данные для трех классов и были сделаны следующие изменения в основной() в imdb_preprocess.py :

dictionary = build_dict() 

train_x_pos, train_x_neu, train_x_neg = grab_data('train', dictionary) 
test_x_pos, test_x_neu, test_x_neg = grab_data('test', dictionary) 

train_x = train_x_pos + train_x_neu + train_x_neg 
train_y = [1] * len(train_x_pos) + [0] * len(train_x_neu) + [-1] * len(train_x_neg) 

test_x = test_x_pos + test_x_neu + test_x_neg 
test_y = [1] * len(test_x_pos) + [0] * len(test_x_neu) + [-1] * len(test_x_neg) 

ли мои модификации train_y и test_y правильно?

Предполагая, что они правильны, я пошел вперед и обучил эту модель на своих данных, и я был успешно сохранить новые версии lstm_model.npz и lstm_model.npz.pkl.

Теперь, как проверить эту модель на новом примере? Пусть новый, невидимый примером является следующий текст:

new_example = "I am very happy that I've been able to create a new LSTM sentiment model!" 

Мое понимание, что функция pred_probs должен быть вызван, который принимает параметры f_pred_prob, prepare_data, данных, итератор и verbose = False. Что я могу передать этим параметрам? Я предполагаю, что вызов функции тогда будет примерно таким:

pred_probs(f_pred_prob, prepare_data, data=new_example, iterator, verbose=False) 

ответ

0

После того, как вы проработали это несколько недель, я наконец получил рабочую модель. Оказывается, мои изменения в основной() в imdb_preprocess.py были почти правильно, соответствующие линии:

train_y = [2] * len(train_x_pos) + [1] * len(train_x_neu) + [0] * len(train_x_neg) 
test_y = [2] * len(test_x_pos) + [1] * len(test_x_neu) + [0] * len(test_x_neg) 

Что касается того, как классифицировать новый пример, я была правильная идея:

new_example_pair = (new_example, 0) 
pred_probs(f_pred_prob, prepare_data, new_example_pair, iterator, verbose=False) 

pred_probs должен быть изменен для размещения трех классов, и его правильное изменение должно возвращать значение вероятности для каждого возможного класса.