了解语音识别模型Whisper

Whisper 是由 OpenAI 于 2022 年发布的开源语音识别模型。它是一个基于 Transformer 架构的端到端模型,具有以下核心特点:多任务模型、多语言支持、多种格式、强鲁棒性和无需微调开箱即用。

whisper虽然开箱即用,但是首次使用的时候需要下载模型,下载的时候可以选择不同大小的模型tiny、base、small、medium、large,他们的准确率与模型的大小成正比(越大准确率越高),速度与模型大小成反比(越大速度越慢)。

whisper生态系统:以OpenAI的Whisper模型为核心,由社区驱动的工具、框架、应用和服务组成的完整技术栈,如下图

| 生态工具 | 场景 | 理由 |
| openai/whisper | 研究和实验 | 功能完整,调试方便 |
| faster-whisper | 生产环境部署 | 平衡性能与功能 |
| whisper.cppfaster-whisper | 实时转写/直播 | 延迟低,资源占用少 |
| whisperX | 需要说话人分离 | 集成diarization |
| whisper-jaxfaster-whisper | 云端大批量处理 | 吞吐量高 |
| whisper.cpp | 移动端/嵌入式 | 内存小,无GPU依赖 |

whisperX 需要词级时间戳 词对齐准确

针对whisper衍生出的工具包在调用transcribe()函数的时候会返回不同的结构内容。

1、官方实现------openai-whisper/whisper.cpp的返回结构

openai-whisper包返回的是以下格式:其中text是所有的文本,segments表示每一段的信息(包括文本、开始/结束时间、偏移量),words表示每个词/字的信息。

python 复制代码
result = {
    "text": "完整文本,所有分段合并",  # 最常用的结果
    
    "segments": [  # 最重要的部分,包含详细分段信息
        {
            "id": 0,                    # 分段序号
            "seek": 0,                  # 在音频中的搜索位置(秒)
            "start": 0.0,               # 开始时间(秒)
            "end": 4.0,                 # 结束时间(秒)
            "text": "你好,",           # 该段落的文本
            
            # 🔬 解码质量指标(判断准确性)
            "avg_logprob": -0.2,        # 平均对数概率:-1(差)~ 0(完美)
            "no_speech_prob": 0.02,     # 无语音概率:0(是语音)~1(不是语音)
            "compression_ratio": 1.2,   # 压缩比:>2.4可能有问题
            "temperature": 0.0,         # 解码温度
            
            # 🔢 技术细节
            "tokens": [50364, 1234, ...],  # 该段的token序列
            
            # 🆕 large-v3新增(需要word_timestamps=True)
            "words": [  # 词级时间戳
                {
                    "word": "你",        # 单个词/字
                    "start": 0.0,        # 词开始时间
                    "end": 0.2,          # 词结束时间
                    "probability": 0.95   # 词置信度
                }
            ]
        }
    ],
    
    "language": "zh"  # 检测到的语言(ISO 639-1代码)
}

whisper.cpp返回 json 格式,以下是返回示例:transcription表示转录文本

python 复制代码
{
  "transcription": [
    {
      "timestamps": {
        "from": "00:00:00,000",  # SRT格式时间戳
        "to": "00:00:04,000"
      },
      "offsets": {
        "from": 0,               # 字符偏移量(在全文中的位置)
        "to": 3
      },
      "text": "你好,",
      "tokens": [50364, 1234, ...]
    }
  ],
  "text": "完整文本",            # 可选,根据参数
  "language": "zh",
  "response_time": 2.3
}

2、推理优化------faster-whisper的返回结构

faster-whisper中使用transcribe()函数一般返回两个对象:生成器和信息对象,如下

python 复制代码
# 返回两个对象:生成器和信息对象
segments, info = model.transcribe("audio.mp3")

# 📊 info对象(TranscriptionInfo)
print(info.__dict__)
# {
#     'language': 'zh',                   # 检测语言
#     'language_probability': 0.98,       # 语言检测置信度
#     'duration': 30.5,                   # 音频时长
#     'all_language_probs': {             # 所有语言概率
#         'zh': 0.98, 'en': 0.01, ...
#     },
#     'transcription_time': 2.3,          # 转录耗时(秒)
#     'initial_prompt': None              # 初始提示词
# }

# 🔄 segments生成器(迭代获取Segment对象)
for segment in segments:
    print(segment.__dict__)
    # {
    #     'start': 0.0,                   # 开始时间
    #     'end': 4.0,                     # 结束时间
    #     'text': '你好,',               # 文本
    #     
    #     # 可选(word_timestamps=True时)
    #     'words': [
    #         Word(start=0.0, end=0.2, word='你', probability=0.95),
    #         Word(start=0.2, end=0.4, word='好', probability=0.92)
    #     ]
    # }

3、功能增强------whisperX的返回结构

python 复制代码
result = {
    # 🎯 语音活动检测结果
    "segments": [  # 类似官方格式
        {
            "start": 0.0,
            "end": 4.0,
            "text": "你好,",
            
            # 🎤 词级对齐(比官方更准)
            "words": [
                {
                    "word": "你",
                    "start": 0.0,
                    "end": 0.2,
                    "score": 0.95,      # 对齐分数
                    "speaker": None     # 可扩展说话人分离
                }
            ]
        }
    ],
    
    # 📝 另一种词片段格式
    "word_segments": [
        {
            "word": "你",
            "start": 0.0,
            "end": 0.2,
            "score": 0.95
        }
    ],
    
    # 🗣️ 说话人分离结果(需要额外模型)
    "speaker_segments": [
        {
            "start": 0.0,
            "end": 10.0,
            "speaker": "SPEAKER_00",
            "text": "第一段话..."
        }
    ],
    
    "language": "zh"
}
工具包 返回类型 主要字段 额外特性 语言检测
openai-whisper dict text, segments, language 官方实现,功能完整 返回语言代码
faster-whisper tuple + Generator (segments_generator, info) 速度快,内存小 包含概率值
whisper.cpp JSON/文本 各种自定义格式 可嵌入式部署 需要参数指定
whisper-jax dict text, chunks GPU利用率高 HF格式
whisperX dict segments, word_segments 词级对齐,说话人分离 同官方
相关推荐
汤姆yu1 天前
基于深度学习的车牌识别系统
人工智能·深度学习
数智大号1 天前
艾利特×迈幸机器人:引领智能操作新范式,开启具身智能新纪元
人工智能·数据挖掘
wechat_Neal1 天前
智能座舱_车载语音交互相关技术术语简介
人工智能·语音识别
lpfasd1231 天前
《21世纪金融资本论:投机资本的新理论》精读导引笔记
人工智能·笔记·金融
虫小宝1 天前
电商AI导购系统设计:基于深度学习的商品推荐算法与架构实践
人工智能·深度学习·推荐算法
skywalk81631 天前
Auto-Coder常用秘籍 autocoder.chat启动之后的处理
开发语言·人工智能
課代表1 天前
大语言模型能够理解的11种文件格式
人工智能·语言模型·自然语言处理·llm·markdown·token·模型
洛卡卡了1 天前
2025:从用 AI 到学 AI,我最轻松也最忙碌的一年
人工智能·后端·ai编程
受之以蒙1 天前
Rust + Wasm + AI (一):开启浏览器与边缘端的高性能推理时代
人工智能