使用OpenAI Whisper模型实现说话人分离遇AttributeError问题求助
问题解决:AttributeError: 'WhisperProcessor' object has no attribute 'config'
错误原因
你错误地将WhisperProcessor(用于处理音频输入和文本输出的工具类)赋值给了model变量,而HuggingFace的ASR pipeline需要传入的是Whisper的模型本体,不是processor,这才触发了属性缺失的错误。
修改步骤及修正后代码
- 加载正确的模型类:使用
WhisperForConditionalGeneration加载Whisper模型本体,这是Whisper专门用于语音转写的模型类。 - 简化tokenizer使用:
WhisperProcessor已经集成了特征提取器和tokenizer,无需单独调用AutoTokenizer,直接使用processor的tokenizer属性即可。 - 清理冗余导入:移除不需要的模型导入类。
修正后的代码:
import torch from transformers import WhisperProcessor, WhisperForConditionalGeneration, pipeline from langchain.llms import HuggingFacePipeline model_id = 'openai/whisper-large-v2' # 加载processor(集成特征提取器+tokenizer) processor = WhisperProcessor.from_pretrained(model_id) # 加载Whisper模型本体 model = WhisperForConditionalGeneration.from_pretrained(model_id) # 若有GPU可启用加速 model = model.to("cuda" if torch.cuda.is_available() else "cpu") # 创建ASR pipeline pipe = pipeline( "automatic-speech-recognition", model=model, tokenizer=processor.tokenizer, feature_extractor=processor.feature_extractor, # 需传入特征提取器 max_length=100 ) # 接入LangChain的HuggingFacePipeline local_llm = HuggingFacePipeline(pipeline=pipe)
额外说明:关于说话人分离
Whisper本身不具备说话人识别/分离能力,要实现说话人分离,需要结合专门的说话人分割工具(比如pyannote.audio),流程如下:
- 先用pyannote的说话人分割模型将音频分割为不同说话人的片段
- 对每个片段单独用Whisper转写
- 合并转写结果并标注说话人
示例流程(需额外安装pyannote.audio):
from pyannote.audio import Pipeline # 初始化说话人分割管道(需在HuggingFace获取访问权限) diarization_pipeline = Pipeline.from_pretrained( "pyannote/speaker-diarization-3.1", use_auth_token="你的HF令牌" ) # 对音频做说话人分割 diarization = diarization_pipeline("你的音频文件路径.wav") # 遍历分割结果,对每个片段转写 for segment, _, speaker in diarization.itertracks(yield_label=True): # 提取对应片段的音频(需用librosa或soundfile处理) # 然后用Whisper pipe转写该片段 transcription = pipe(segment_audio) print(f"说话人{speaker}: {transcription['text']}")
内容的提问来源于stack exchange,提问作者san1
相关产品推荐
相关产品推荐

