我使用Keras库训练了一个情感分类器模型,方法是遵循以下步骤(大致上)。
现在,为了使用这个模型进行评分,我能够将模型保存到一个文件中,并从一个文件中加载。但是,我还没有找到一种将Tokenizer对象保存到文件中的方法。没有这个,我将不得不处理语料库,每次我需要得分,甚至一个句子。有办法绕道吗?
发布于 2017-08-17 14:15:49
发布于 2019-02-01 10:58:31
Tokenizer类具有将日期保存为JSON格式的函数:
tokenizer_json = tokenizer.to_json()
with io.open('tokenizer.json', 'w', encoding='utf-8') as f:
f.write(json.dumps(tokenizer_json, ensure_ascii=False))
可以使用tokenizer_from_json
函数从keras_preprocessing.text
加载数据。
with open('tokenizer.json') as f:
data = json.load(f)
tokenizer = tokenizer_from_json(data)
发布于 2018-07-06 06:04:29
接受的答案清楚地演示了如何保存令牌程序。以下是关于(一般)在拟合或保存后得分问题的评论。假设一个列表texts
由两个列表Train_text
和Test_text
组成,其中Test_text
中的令牌集是Train_text
中令牌集的子集(乐观的假设)。然后,fit_on_texts(Train_text)
给出了与第一次调用fit_on_texts(texts)
和text_to_sequences(Test_text)
不同的texts_to_sequences(Test_text)
结果。
具体例子:
from keras.preprocessing.text import Tokenizer
docs = ["A heart that",
"full up like",
"a landfill",
"no surprises",
"and no alarms"
"a job that slowly"
"Bruises that",
"You look so",
"tired happy",
"no alarms",
"and no surprises"]
docs_train = docs[:7]
docs_test = docs[7:]
# EXPERIMENT 1: FIT TOKENIZER ONLY ON TRAIN
T_1 = Tokenizer()
T_1.fit_on_texts(docs_train) # only train set
encoded_train_1 = T_1.texts_to_sequences(docs_train)
encoded_test_1 = T_1.texts_to_sequences(docs_test)
print("result for test 1:\n%s" %(encoded_test_1,))
# EXPERIMENT 2: FIT TOKENIZER ON BOTH TRAIN + TEST
T_2 = Tokenizer()
T_2.fit_on_texts(docs) # both train and test set
encoded_train_2 = T_2.texts_to_sequences(docs_train)
encoded_test_2 = T_2.texts_to_sequences(docs_test)
print("result for test 2:\n%s" %(encoded_test_2,))
结果:
result for test 1:
[[3], [10, 3, 9]]
result for test 2:
[[1, 19], [5, 1, 4]]
当然,如果上述乐观假设没有得到满足,而且Test_text中的令牌集与Train_test中的令牌不相交,那么测试1将生成一个空括号[].
列表。
https://stackoverflow.com/questions/45735070
复制相似问题