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

Tokenizer.word_index无"START"/"END"却含"start"/"end"的问题排查

问题原因分析

这个现象的核心原因是Keras Tokenizer的默认行为会自动将所有文本转为小写,具体拆解如下:

  • 当你初始化Tokenizer时,如果没有显式设置lower=False,它的默认参数lower=True会在处理文本时把所有单词转换成小写形式。
  • 你的代码里手动给描述添加了大写的"START"和"END"标记,但在调用tokenizer.fit_on_texts()处理这些文本时(这是生成word_index的必要步骤,虽然你没贴这部分代码,但流程上必然存在),Tokenizer会自动把这两个标记转成小写的"start"和"end",因此最终生成的word_index字典里只会存在小写形式的键。

对应你的代码流程

  1. 你在train_test_data函数中给每个描述首尾加上了大写的"START "和" END";
  2. 之后用Tokenizer基于这些带标记的描述构建词汇表;
  3. 由于Tokenizer默认开启小写转换,"START"被转为"start","END"被转为"end",所以word_index里只有小写形式的键。
解决方案

你有两种直观的解决方式:

  1. 统一使用小写标记
    修改train_test_data函数里的标记为小写:

    l = "start " + " ".join(l) + " end"
    

    同时同步修改createCaptions函数里的初始序列和结束判断:

    inSeq = "start"
    # ...
    if ID == "end":
        break
    
  2. 关闭Tokenizer的自动小写转换
    在初始化Tokenizer时显式设置lower=False,保留文本的大小写:

    from keras.preprocessing.text import Tokenizer
    tokenizer = Tokenizer(lower=False)
    

    这样word_index里就会保留你手动添加的"START"和"END"键,无需修改其他代码。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 10:01:42