流式加载Common Voice微调Whisper ASR时Tokenizer报错求助
问题:训练Whisper ASR时提示"You need to specify either text or text_target"
我正尝试从Hugging Face下载大型语音数据集,为节省磁盘空间采用流式模式加载。数据加载过程一切正常,但训练Whisper ASR模型时出现报错:'You need to specify either text or text_target',该报错来自tokenization_utils_base.py。我已尝试通过tokenizer(text=batch['text'])或tokenizer(text_target=batch['text'])为batch设置labels,但问题仍未解决。
相关代码如下:
common_voice = load_dataset("mozilla-foundation/common_voice_11_0", "en", split="train", use_auth_token=True, streaming=True) ... batch['labels'] = tokenizer(text=batch['text']).input_ids ... trainer = Seq2SeqTrainer( args=training_args, model=model, train_dataset=Dataset['train'], eval_dataset=Dataset['train'], data_collator=data_collator, compute_metrics=compute_metrics, tokenizer=processor,) Trainer.train()
附上报错截图,希望得到解决帮助。
解决方案
修正tokenizer调用逻辑:Whisper作为Seq2Seq模型,训练时需要明确用
text_target参数标记目标文本序列,且要使用processor封装的tokenizer(而非单独调用tokenizer)。修正后的标签生成代码应为:batch['labels'] = processor.tokenizer(text_target=batch['text']).input_ids完善预处理函数:确保预处理流程同时生成模型必需的
input_features(语音特征)和labels,示例预处理函数如下:def preprocess_function(batch): # 提取语音特征 audio = batch["audio"] batch["input_features"] = processor.feature_extractor( audio["array"], sampling_rate=audio["sampling_rate"] ).input_features[0] # 生成目标标签 batch["labels"] = processor.tokenizer(text_target=batch["text"]).input_ids return batch # 将预处理函数应用到流式数据集 common_voice = common_voice.map(preprocess_function)检查数据加载与Trainer参数:
- 确认
train_dataset和eval_dataset指向正确的预处理后数据集(比如上述代码中的common_voice,而非错误的Dataset['train']); - 使用Whisper专属的数据收集器
WhisperDataCollatorWithPadding,它能正确处理语音特征和标签的对齐填充:from transformers import WhisperDataCollatorWithPadding data_collator = WhisperDataCollatorWithPadding(processor=processor)
- 确认
内容的提问来源于stack exchange,提问作者PJAX
相关产品推荐
相关产品推荐

