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

关于未指定oov_token参数时TensorFlow Tokenizer处理测试集未登录词的机制咨询

未指定oov_token时,TensorFlow如何处理测试集的未登录词?

你观察到的现象其实是TensorFlow/Keras Tokenizer的默认行为——它不会触发报错,而是直接忽略所有未登录词,下面给你详细拆解这个逻辑:

默认行为的具体逻辑

当你初始化Tokenizer时没有设置oov_token参数,这个分词器只会基于训练数据(X_train)构建词汇表,完全不会为未登录词预留占位符。

当你调用texts_to_sequences(X_test)处理测试数据时:

  • 对于测试文本里存在、但训练阶段从未出现过的词,Tokenizer会直接跳过它们,不会生成对应的序列编号。
  • 最终得到的test_tweets序列里,只会保留训练词汇表中存在的词的编号,所有未登录词都会被悄悄丢弃。

举个直观的例子帮你理解:
假设训练数据只有["I love machine learning"],生成的词汇表是{"I":1, "love":2, "machine":3, "learning":4}。如果测试文本是["I love deep learning"],处理后得到的序列就是[1,2,4],其中deep这个未登录词直接被忽略,不会留下任何痕迹,也不会触发错误。

对应你的代码场景

回到你写的这段代码:

tokenizer = Tokenizer()
tokenizer.fit_on_texts(X_train)
encoded_docs = tokenizer.texts_to_sequences(X_train)
padded_sequence = pad_sequences(encoded_docs, maxlen=60)
test_tweets = tokenizer.texts_to_sequences(X_test)
test_padded_sequence = pad_sequences(test_tweets, maxlen=60)

因为tokenizer没有配置oov_token,所以处理X_test中的未登录词时,只会默默丢弃它们,自然不会出现报错。

如何让未登录词被明确标记?

如果你不想让未登录词被忽略,而是希望用一个统一的标记代替,只需要在初始化Tokenizer时指定oov_token参数即可:

tokenizer = Tokenizer(oov_token="<OOV>")

这样训练时词汇表里会自动加入<OOV>对应的编号(默认是1,因为Tokenizer的词汇编号从1开始),测试时遇到未登录词就会用这个编号代替,而不是直接丢弃。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.28 17:07:31