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

使用tensorflow、transformer及whisper-base模型遇输入无效错误求助

解决Whisper音频转写的输入无效问题

核心错误分析

你的代码存在两个关键问题:

  • 直接将音频二进制数据传入tokenizer.encode():Tokenizer的作用是处理文本,不是音频,Whisper模型需要的是预处理后的音频特征(梅尔频谱),而非原始音频二进制。
  • 使用TFWhisperModel基础模型但未遵循序列到序列模型的推理流程:基础模型需要手动处理音频特征输入和解码器的文本启动输入,无法直接传入token值进行推理。

方案1:用Pipeline快速实现(推荐新手)

Hugging Face的pipeline已经封装了音频处理、模型推理、结果解码的全流程,无需手动处理细节:

from transformers import pipeline

# 加载Whisper自动语音识别pipeline,指定TensorFlow后端
transcriber = pipeline(
    "automatic-speech-recognition",
    model="openai/whisper-base",
    framework="tf"
)

# 直接传入音频文件路径即可完成转写
audio_file = "data/preamble.wav"
result = transcriber(audio_file)

# 保存转写结果
with open("something.txt", "w") as f:
    f.write(result["text"].strip())

方案2:手动实现完整流程(理解底层逻辑)

如果需要手动控制每一步,必须使用WhisperFeatureExtractor处理音频,再配合模型完成推理:

import tensorflow as tf
from transformers import TFWhisperModel, WhisperTokenizer, WhisperFeatureExtractor
import librosa

# 加载模型、Tokenizer和音频特征提取器
model = TFWhisperModel.from_pretrained('openai/whisper-base')
tokenizer = WhisperTokenizer.from_pretrained('openai/whisper-base')
feature_extractor = WhisperFeatureExtractor.from_pretrained('openai/whisper-base')

# 1. 加载并预处理音频:将原始音频转为16kHz单声道,提取梅尔频谱
audio_file = "data/preamble.wav"
audio_array, sampling_rate = librosa.load(audio_file, sr=16000)
inputs = feature_extractor(
    audio_array,
    sampling_rate=sampling_rate,
    return_tensors="tf"
)

# 2. 准备解码器启动输入:Whisper需要以<|startoftranscript|>作为解码起始标识
decoder_input_ids = tf.constant(tokenizer.encode("<|startoftranscript|>", return_tensors="tf"))

# 3. 模型推理
outputs = model(
    input_features=inputs.input_features,
    decoder_input_ids=decoder_input_ids
)

# 4. 解码获取转写文本
predicted_ids = tf.argmax(outputs.logits, axis=-1)
transcription = tokenizer.decode(predicted_ids[0], skip_special_tokens=True)

# 保存结果
with open("something.txt", "w") as f:
    f.write(transcription.strip())

关键注意事项

  • 确保音频是16kHz单声道:Whisper模型默认要求此格式,librosa.load中指定sr=16000会自动采样转换。
  • 区分Tokenizer和FeatureExtractor:前者处理文本,后者处理音频,两者不能混用输入类型。
  • 如果使用基础模型(如TFWhisperModel),必须同时提供音频特征和解码器的启动文本输入,不能仅传入单一输入。

内容的提问来源于stack exchange,提问作者Rendo Hugh Mann Sama

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 06:15:38