You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python如何向已有pickle文件写入新Tokenizer分词数据并合并词表

问题根源
  • 你用追加模式将两个独立的Tokenizer序列化存入同一个pickle文件,pickle.load()默认只会读取文件中第一个序列化对象,因此只能拿到第一段文本对应的词表
  • 你为第二段文本新建了独立的Tokenizer实例,两个分词器的词表互相独立,没有做合并操作
  • 你设置的num_words=10仅作用于后续文本转序列时的保留词数量,不会限制word_index存储全量唯一token,无需调整该参数也可以实现需求
实现逻辑

你需要先读取已存储的旧分词器,直接在旧分词器的基础上拟合第二段文本,Tokenizer的fit_on_texts方法会自动将新增的唯一token追加到现有词表中,序号保持连续,之后再覆盖存储回pickle文件即可。

可运行代码
from tensorflow.keras.preprocessing.text import Tokenizer
import pickle

# 处理第一段文本,初始化分词器并存入文件
text1 = ['I was able to save the model to a file and load from a file.']
tokenizer_t1 = Tokenizer(num_words=10, lower=True)
tokenizer_t1.fit_on_texts(text1)

with open('file.pickle', 'wb') as handle:
    pickle.dump(tokenizer_t1, handle)

# 读取验证第一段的词表
with open('file.pickle', 'rb') as handle:
    tokenizer_txt1 = pickle.load(handle)
print("第一段词表: ", tokenizer_txt1.word_index)


# 处理第二段文本,合并词表
text2 = ['Tokenizer class has a function to save data into JSON format. The accepted answer clearly demonstrates the tokenizer.']

# 第一步:读取已存储的旧分词器
with open('file.pickle', 'rb') as handle:
    old_tokenizer = pickle.load(handle)

# 第二步:在旧分词器基础上拟合第二段文本,自动追加新token到词表
old_tokenizer.fit_on_texts(text2)

# 第三步:将更新后的分词器覆盖存回原文件
with open('file.pickle', 'wb') as handle:
    pickle.dump(old_tokenizer, handle)

# 验证合并后的词表
with open('file.pickle', 'rb') as handle:
    merged_tokenizer = pickle.load(handle)
print("合并后词表: ", merged_tokenizer.word_index)

运行后输出的合并词表和你预期的一致,你预期里写的date为笔误,实际输出会是data对应序号17。

内容的提问来源于stack exchange,提问作者Ekanshu

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.28 10:36:01