【问题标题】:LSTM Networks for Sentiment Analysis - How to extend this model to 3 classes and classify new examples?LSTM Networks for Sentiment Analysis - 如何将此模型扩展到 3 个类并对新示例进行分类?
【发布时间】:2017-05-08 12:18:17
【问题描述】:

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

为了构建这个新模型,我重写了 build_dictgrab_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_ytest_y 的修改是否正确?

假设它们是正确的,我继续在我的数据上训练了这个模型,并且我成功地保存了 lstm_model.npzlstm_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_datadata >、迭代器verbose=False。我应该为这些参数传递什么?我猜函数调用会是这样的:

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

【问题讨论】:

    标签: deep-learning sentiment-analysis lstm


    【解决方案1】:

    在翻了几个星期之后,我终于得到了一个工作模型。事实证明,我在 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 应该被修改以适应三个类,并且适当地改变它应该返回每个可能的类的概率值。

    【讨论】:

      猜你喜欢
      • 2012-09-30
      • 1970-01-01
      • 1970-01-01
      • 2021-10-17
      • 1970-01-01
      • 2011-03-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多