用于情感分析的 LSTM 网络 - 如何将此模型扩展到 3 类 并对新示例进行分类?

LSTM Networks for Sentiment Analysis - How to extend this model to 3 classes and classify new examples?

我正在尝试此 link http://deeplearning.net/tutorial/lstm.html 中的代码,并将 imdb 数据更改为我自己的数据。我正在尝试将此模型扩展为 3-class 多项式模型,其中添加了 "neutral" class 而不是教程中提供的仅 class 的二项式模型 "positive" 和 "negative" classes.

为了构建这个新模型,我重写了 build_dictgrab_data 函数来构建我的自定义三个 classes 的字典和 return 数据,并对 imdb_preprocess.py[=41 中的 main() 进行了以下更改=]:

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_ytest_y 的修改是否正确?

假设它们是正确的,我继续在我的数据上训练这个模型,我成功地保存了 lstm_model.npz 和 [=27 的新版本=]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_probprepare_datadataiteratorverbose=False。我要为这些参数传递什么?我猜函数调用会是这样的:

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

经过数周的研究,我终于得到了一个可以工作的模型。原来我在 imdb_preprocess.py 中对 main() 的修改几乎是正确的,相关行是:

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)

至于如何class验证一个新的例子,我有一个正确的想法:

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

pred_probs 应该被修改以容纳三个 classes,并且适当地改变它应该 return 每个可能的概率值 class.