我正在创建一个NLP
模型,其中我使用了tokenizing
num_words = 5000tokenizer = Tokenizer(num_words=num_words)tokenizer.fit_on_texts(data)
然后我将文本转换为sequences
,计算max_tokens
以确定输入维度,并对它们进行pad
处理:
X_train_tokens = tokenizer.texts_to_sequences(X_train)X_test_tokens = tokenizer.texts_to_sequences(X_test)num_tokens = [len(tokens) for tokens in X_train_tokens + X_test_tokens]num_tokens = np.array(num_tokens)max_tokens = np.mean(num_tokens) + (2 * np.std(num_tokens))max_tokens = int(max_tokens)X_train_pad = pad_sequences(X_train_tokens, maxlen=max_tokens)X_test_pad = pad_sequences(X_test_tokens, maxlen=max_tokens)
然后我构建了一个Keras模型并保存它。
之后,我加载了上述信息训练的模型。然而,这次没有tokenizer来准备我的文本输入,我也不知道输入维度是多少,因为这是两个不同的Python类。
如何在测试中使用我在训练中使用过的信息?NLP测试的正确方法是什么?如何在另一个Python文件中使用相同的已拟合的tokenizer和计算出的num_words?
回答:
你也需要保存你已拟合的Tokenizer。这可以通过pickle轻松完成:
import picklepickle.dump( tokenizer, open( "tokenizer.pickle", "wb" ) )
然后在你加载你的Keras模型时,也加载tokenizer:
tokenizer = pickle.load( open( "tokenizer.pickle", "rb" ) )
理想情况下,你应该将tokenizer和模型包装到一个pipeline中,这样你就可以一起保存和加载它们,而不会忘记保存一些关键的东西。