Keras中Tokenizer的fit_on_texts作用、用法及与fit_on_sequences的区别
Keras Tokenizer类相关方法答疑
1. fit_on_texts方法的核心作用
这个方法是Tokenizer做文本预处理的核心初始化方法,作用是基于输入的原始文本语料完成词汇表的构建:
- 统计所有输入文本中每个词汇的出现频次
- 为每个唯一词汇分配对应的唯一整数ID,默认按照频次从高到低排序分配
- 自动生成Tokenizer实例的几个核心属性:
word_index(词到ID的映射字典)、index_word(ID到词的映射字典)、word_counts(每个词的出现频次统计)、document_count(输入的文本总条数)
2. fit_on_texts的正确使用方式
基础使用示例
from tensorflow.keras.preprocessing.text import Tokenizer # 准备原始文本数据集,每个元素是一条文本字符串 train_texts = [ "我爱深度学习", "深度学习很有趣", "Keras框架很好用", "我常用Keras做文本分类任务" ] # 初始化Tokenizer,num_words参数指定保留的最高频词汇数量,这里设为100 tokenizer = Tokenizer(num_words=100, oov_token="<OOV>") # 调用fit_on_texts方法完成词汇表构建 tokenizer.fit_on_texts(train_texts) # 后续可以用训练好的tokenizer做文本转序列操作 sequences = tokenizer.texts_to_sequences(train_texts)
关键注意事项
- 必须仅在训练集上调用该方法,禁止把测试集/验证集数据加入fit_on_texts的输入,否则会造成数据泄露,影响模型泛化能力
oov_token参数建议显式指定,用来表示词汇表中没有的生僻词,否则遇到未登录词会直接被丢弃num_words不会改变word_index的完整映射,只会在后续texts_to_sequences、序列转矩阵等操作时限制仅使用频次最高的前N个词
3. 与fit_on_sequences方法的核心差异
两者的定位完全不同,核心区别有三点:
- 输入类型不同:
fit_on_texts的输入是原始字符串组成的列表;fit_on_sequences的输入是已经完成词到ID转换的整数序列组成的列表 - 使用场景不同:
fit_on_texts是预处理第一步调用,用于从0构建词汇映射关系;fit_on_sequences是在已经有现成词表的场景下使用,比如你已经有了预定义的词到ID的映射,现在要基于分批次的序列数据更新频次统计,不需要再处理原始文本 - 生成属性不同:
fit_on_texts会生成完整的词-ID双向映射、词频统计等所有属性;fit_on_sequences仅能更新ID对应的频次统计,不会生成词-ID映射关系,因为它的输入只有整数ID,不知道ID对应的原始文本内容
内容的提问来源于stack exchange,提问作者kiriloff
相关产品推荐
相关产品推荐

