我在yelp https://www.yelp.com/dataset餐厅数据集上训练了LSTM网络。这是一个很大的数据集,在我的PC上花了几天的时间进行训练。无论如何,我保存了模型和权重,现在希望将其用于实时情感评估的预测。
执行此操作的常见/良好/最佳做法是什么: 我加载模型和权重,然后进行编译。这不是问题,文档中或Internet上有很多示例。但是接下来呢? 我要做的就是标记新收到的评论,然后填充并传递给模型。预测?
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万条评论是一项昂贵的操作?
谢谢您的任何建议。
答案 0 :(得分:1)
您将要保存Tokenizer
并在推断时重用它,以确保将您的测试句子分解为正确的整数。有关如何执行此操作的示例,请参见this answer。
答案 1 :(得分:1)
是的,谢谢您的完美配合。只是为了完成该线程:
我使用以下命令保存/加载了令牌生成器:
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))
感谢您的帮助。