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

时间:2016-12-22 19:35:14

标签: deep-learning sentiment-analysis lstm

我正在尝试此链接http://deeplearning.net/tutorial/lstm.html中的代码,并已将imdb数据更改为我自己的数据。我正在尝试将此模型扩展为3级多项式模型,其中添加了“中性”类,而不是教程中提供的二项式模型,该模型仅对“正”和“负”类进行分类。

为了构建这个新模型,我重写了 build_dict grab_data 函数来构建我的自定义字典并返回三个类的数据,并对 imdb_preprocess.py :

中的> 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_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 数据迭代器详细=错误。我为这些参数传递了什么?我猜这个函数调用会是这样的:

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

1 个答案:

答案 0 :(得分:0)

经过几周的讨论,我终于找到了一个工作模式。事实证明我对 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)

至于如何对新例子进行分类,我有正确的想法:

new_example_pair = (new_example, 0)
pred_probs(f_pred_prob, prepare_data, new_example_pair, iterator, verbose=False)
应该修改

pred_probs 以容纳三个类,并且正确地更改它应该返回每个可能类的概率值。