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

使用to_tf_dataset()遇TypeError: 'NoneType'对象不可下标问题求助

问题描述

尝试使用自定义Tokenizer训练Transformer,代码如下:

def tokenization(examples):
    tokenized_examples = tokenizer.encode_plus(
        examples["text"],
        add_special_tokens=True,
        return_attention_mask=True,
        padding=True,
        truncation=True,
        pad_to_max_length=True,
        max_length=MAX_LENGTH,
        return_tensors='tf',
        return_token_type_ids=True
        
    )

tokenized_dataset = dataset.map(
    tokenization, remove_columns=["text"], 
)

collater = DataCollatorForLanguageModeling(tokenizer=tokenizer, return_tensors="tf")

train = tokenized_dataset['train'].to_tf_dataset(
    columns=["input_ids", "token_type_ids", "attention_mask"],
    label_cols=["labels"],
    batch_size=TRAIN_BATCH_SIZE,
    shuffle=True,
    collate_fn=collater
)

运行后报错:TypeError: 'NoneType' object is not subscriptable

解决方案

1. 修复tokenization函数的返回值问题

这是报错的核心原因:你的tokenization函数没有返回任何处理后的结果,调用dataset.map()后得到的tokenized_dataset是None,尝试访问tokenized_dataset['train']时就会触发NoneType下标访问错误。

修改后的tokenization函数:

def tokenization(examples):
    tokenized_examples = tokenizer.encode_plus(
        examples["text"],
        add_special_tokens=True,
        return_attention_mask=True,
        padding=True,
        truncation=True,
        pad_to_max_length=True,
        max_length=MAX_LENGTH,
        return_tensors='tf',
        return_token_type_ids=True
    )
    # 必须返回处理后的字典
    return tokenized_examples

2. 额外注意事项

  • 确保你的自定义Tokenizer已经正确初始化,包含必要的特殊token(如<bos>、<eos>、<pad>、<mask>),否则DataCollatorForLanguageModeling无法正常生成labels。
  • 如果你是在做文本分类任务而非自监督语言建模,那么DataCollatorForLanguageModeling并不适用,需要替换为DataCollatorWithPadding,同时你的数据集需要包含label列,而非依赖整理器生成labels。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.26 07:35:07