【问题标题】:Keras and sentiment analysis predictionKeras 和情感分析预测
【发布时间】:2018-07-28 21:34:03
【问题描述】:

早上好,

我在 yelp https://www.yelp.com/dataset 餐厅数据集上训练了一个 LSTM 网络。这是一个大型数据集,在我的 PC 上训练需要几天时间。无论如何,我保存了模型和权重,现在希望将其用于预测实时情绪评估。

执行此操作的常见/良好/最佳做法是什么: 我加载模型和权重,然后编译它。这不是问题,文档或 Internet 上有很多示例。然而接下来呢? 我需要做的就是将新收到的评论标记化,然后将其填充并传递给 model.predict?

tokenizer = Tokenizer(num_words = 2500, split=' ')
tokenizer.fit_on_texts(data['text'].values)
print(tokenizer.word_index)  
X = tokenizer.texts_to_sequences(data['text'].values)
X = pad_sequences(X)

不可能那么简单……如果这就是所需要的,那么它是如何与用于训练模型的标记器连接的?对最初从 yelp 数据集下载的超过 250 万条评论进行标记是一项昂贵的操作吗?

感谢您的任何建议。

【问题讨论】:

    标签: python tensorflow keras lstm recurrent-neural-network


    【解决方案1】:

    您需要保存 Tokenizer 并在推理时重用它,以确保您的测试句子被分解为正确的整数。有关如何执行此操作的示例,请参阅 this answer。

    【讨论】:

      【解决方案2】:

      是的,谢谢你工作得很好。只是为了这个线程的完整性:

      我使用以下方法保存/加载了标记器:

      import pickle
      
      def save_tokenizer(file_path, tokenizer):
          with open(file_path, 'wb') as handle:
              pickle.dump(tokenizer, handle, protocol=pickle.HIGHEST_PROTOCOL)
      
      def load_tokenizer(file_path):
          with open(file_path, 'rb') as handle:
              tokenizer = pickle.load(handle)
          return tokenizer
      

      然后使用分词器进行预测:

      tokenizer = u.load_tokenizer("SavedModels/tokenizer.pcl")
      
      X = tokenizer.texts_to_sequences(data['text'].values)
      X = pad_sequences(X, maxlen = maxLength)
      print(X)
      
      model = u.load_model_from_prefix("single layer")
      model.compile(loss = 'categorical_crossentropy', optimizer='adam',metrics = ['accuracy'])
      
      prediction = model.predict(X)
      
      print(prediction)
      print(np.argmax(prediction))
      

      感谢您的帮助。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2016-02-05
        • 1970-01-01
        • 2019-06-15
        • 1970-01-01
        • 2011-08-10
        • 2020-04-06
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多