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

Keras加载Tokenizer后报错:'Tokenizer'对象无'oov_token'属性

解决AttributeError: 'Tokenizer' object has no attribute 'oov_token'问题

这个错误通常出现在两种场景下:要么你加载的Tokenizer是用旧版Keras保存的(当时Tokenizer类还没有oov_token属性),要么你在保存Tokenizer之前根本没设置过这个参数。下面给你几个可行的解决办法:

方法一:重新训练并保存Tokenizer(推荐)

如果能拿到当初训练Tokenizer的文本数据,最稳妥的方式是重新初始化Tokenizer并明确设置oov_token,再重新保存:

from keras.preprocessing.text import Tokenizer
import pickle

# 初始化Tokenizer时指定OOV标记,比如"<OOV>"
tokenizer = Tokenizer(oov_token="<OOV>")
# 用你的训练文本拟合tokenizer
tokenizer.fit_on_texts(your_training_texts)

# 重新保存tokenizer,用最高协议版本保证兼容性
with open('tokenizer_new.pickle', 'wb') as handle:
    pickle.dump(tokenizer, handle, protocol=pickle.HIGHEST_PROTOCOL)

这样后续加载这个新保存的Tokenizer时,oov_token属性就会存在,而且模型训练时也能正确处理未见过的词汇。

方法二:手动给已加载的Tokenizer添加属性(应急方案)

如果没办法重新训练,也可以在加载后手动添加oov_token属性,同时补充词汇表映射:

import pickle

# 加载原tokenizer
tok = open('tokenizer.pickle', 'rb')
tokenizer = pickle.load(tok)
tok.close()

# 手动设置oov_token属性
tokenizer.oov_token = "<OOV>"

# 检查词汇表中是否已有这个标记,没有的话添加索引映射
if "<OOV>" not in tokenizer.word_index:
    new_index = len(tokenizer.word_index) + 1
    tokenizer.word_index["<OOV>"] = new_index
    tokenizer.index_word[new_index] = "<OOV>"

⚠️ 注意:这种方法只是补全了属性,但如果你的模型在训练时没有处理过OOV词汇,预测时可能还是会有问题,所以优先推荐方法一。

为什么会出现这个错误?

oov_token是后来在TensorFlow整合Keras之后才添加到Tokenizer类中的属性,旧版独立Keras(比如2.2.4及更早版本)的Tokenizer并没有这个参数。如果你的Tokenizer是用旧版Keras保存的,加载到新版TensorFlow Keras环境中,就会触发这个属性不存在的报错;另外,如果当初保存Tokenizer时根本没设置过oov_token,加载后自然也找不到这个属性。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 04:13:48