首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Keras文本预处理-将Tokenizer对象保存到文件中以进行评分

Keras文本预处理-将Tokenizer对象保存到文件中以进行评分
EN

Stack Overflow用户
提问于 2017-08-17 12:25:32
回答 6查看 44.2K关注 0票数 63

我使用Keras库训练了一个情感分类器模型,方法是遵循以下步骤(大致上)。

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

现在,为了使用这个模型进行评分,我能够将模型保存到一个文件中,并从一个文件中加载。但是,我还没有找到一种将Tokenizer对象保存到文件中的方法。没有这个,我将不得不处理语料库,每次我需要得分,甚至一个句子。有办法绕道吗?

EN

回答 6

Stack Overflow用户

回答已采纳

发布于 2017-08-17 14:15:49

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

代码语言:javascript
运行
复制
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)
票数 112
EN

Stack Overflow用户

发布于 2019-02-01 10:58:31

Tokenizer类具有将日期保存为JSON格式的函数:

代码语言:javascript
运行
复制
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加载数据。

代码语言:javascript
运行
复制
with open('tokenizer.json') as f:
    data = json.load(f)
    tokenizer = tokenizer_from_json(data)
票数 31
EN

Stack Overflow用户

发布于 2018-07-06 06:04:29

接受的答案清楚地演示了如何保存令牌程序。以下是关于(一般)在拟合或保存后得分问题的评论。假设一个列表texts由两个列表Train_textTest_text组成,其中Test_text中的令牌集是Train_text中令牌集的子集(乐观的假设)。然后,fit_on_texts(Train_text)给出了与第一次调用fit_on_texts(texts)text_to_sequences(Test_text)不同的texts_to_sequences(Test_text)结果。

具体例子:

代码语言:javascript
运行
复制
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,))

结果:

代码语言:javascript
运行
复制
result for test 1:
[[3], [10, 3, 9]]
result for test 2:
[[1, 19], [5, 1, 4]]

当然,如果上述乐观假设没有得到满足,而且Test_text中的令牌集与Train_test中的令牌不相交,那么测试1将生成一个空括号[].列表。

票数 10
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45735070

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档