如何使用faster_whisper从转录结果中获取置信度分数?
如何通过faster_whisper获取转录片段的置信度分数
faster_whisper的Segment对象确实没有直接提供confidence属性,但可以通过词级概率的聚合计算得到片段级置信度,无需修改库源码,具体实现方式如下:
实现步骤
开启词级元数据输出
调用transcribe方法时添加word_timestamps=True参数,模型会返回每个片段下的词级信息,包括每个词的probability(该词预测正确的概率,取值范围0-1)。聚合词级概率得到片段置信度
对当前Segment下所有词的probability取平均值(或根据需求做加权平均),即可得到该片段的整体置信度。
修改后的完整代码
import os import numpy as np import speech_recognition as sr import faster_whisper def main(): os.environ['KMP_DUPLICATE_LIB_OK'] = 'True' audio_file_path = "audios/no_accent.wav" model = "medium" audio_model = faster_whisper.WhisperModel(model) recognizer = sr.Recognizer() with sr.AudioFile(audio_file_path) as source: audio = recognizer.record(source) raw_data = audio.get_raw_data() if not raw_data: print("No data found in audio file.") return try: audio_np = np.frombuffer(raw_data, dtype=np.int16).astype(np.float32) / 32768.0 except ValueError as e: print("Error converting audio data to numpy array:", e) return # 开启词级时间戳与概率输出 segments, _ = audio_model.transcribe(audio_np, language="de", word_timestamps=True) print("\nTranscription:") for segment in segments: print(f"Text: {segment.text}") # 计算当前片段的置信度 if segment.words: word_probabilities = [word.probability for word in segment.words] segment_confidence = sum(word_probabilities) / len(word_probabilities) print(f"Confidence: {segment_confidence:.4f}\n") if __name__ == "__main__": main()
补充说明
- 词级概率是faster_whisper基于底层Whisper模型的token输出计算得出的,属于官方支持的功能,无需修改库代码。
- 若需要更精细的置信度计算(比如按词的时长加权),可以调整聚合逻辑,例如用每个词的持续时间作为权重计算加权平均。
- 若需直接获取模型的原始logits输出,可查看faster_whisper的底层API实现,但该方式复杂度较高,词级概率的聚合已能满足大多数场景需求。
内容的提问来源于stack exchange,提问作者Hankie
相关产品推荐
相关产品推荐

