Keras文本预处理-将Tokenizer对象保存到文件中以进行评分
deep-learning
keras
machine-learning
neural-network
5
0

我已经按照以下步骤(广泛地)使用Keras库训练了情感分类器模型。

  1. 使用Tokenizer对象/类将文本语料库转换为序列
  2. 使用model.fit()方法构建模型
  3. 评估这个模型

现在,使用该模型进行评分,我能够将模型保存到文件中并从文件中加载。但是我还没有找到一种方法来将Tokenizer对象保存到文件中。没有这个,我每次需要评分甚至一个句子时都必须处理语料库。有没有解决的办法?

参考资料:
Stack Overflow
收藏
评论
共 3 个回答
高赞 时间 活跃

接受的答案清楚地说明了如何保存令牌生成器。以下是关于拟合或保存 (通常)得分问题的评论。假设一个列表texts是由两个列表的Train_textTest_text ,其中集令牌Test_text是集令牌的一个子集Train_text (乐观的假设)。然后fit_on_texts(Train_text)给出了不同的结果texts_to_sequences(Test_text)与第一通话相比fit_on_texts(texts) ,然后text_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会得到一个空括号[].的列表[].

收藏
评论

最常见的方法是使用picklejoblib 。在这里,您有一个有关如何使用pickle保存Tokenizer的示例:

import pickle

# saving
with open('tokenizer.pickle', 'wb') as handle:
    pickle.dump(tokenizer, handle, protocol=pickle.HIGHEST_PROTOCOL)

# loading
with open('tokenizer.pickle', 'rb') as handle:
    tokenizer = pickle.load(handle)
收藏
评论

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))

可以使用keras_preprocessing.text tokenizer_from_json函数加载数据:

with open('tokenizer.json') as f:
    data = json.load(f)
    tokenizer = tokenizer_from_json(data)
收藏
评论
新手导航
  • 社区规范
  • 提出问题
  • 进行投票
  • 个人资料
  • 优化问题
  • 回答问题

关于我们

常见问题

内容许可

联系我们

@2020 AskGo
京ICP备20001863号