Hugging Face 推理端点 ASR 与说话人分离流水线
Hugging Face 已发布一个自定义推理处理程序,使得能够通过 Hugging Face 推理端点部署一个模块化流水线,结合自动语音识别(ASR)、说话人分离和推测解码。此实现允许开发者暴露一个单一的 API 端点,集成多个模型,特别是利用 OpenAI 的 Whisper 进行转录,利用 Pyannote 进行说话人识别。
模块化流水线架构
该流水线被设计为模块化系统,组件可根据具体使用场景启用或禁用。核心组件包括:
- ASR 模块:利用 Whisper 模型进行高质量的语音转文本转录。
- 说话人分离模块:采用 Pyannote speaker-diarization-3.1 模型,这是一种最先进的开源实现,用于识别并按说话人划分转录。
- 推测解码:通过使用较小的辅助模型(例如蒸馏的 Whisper 模型)来建议生成内容,然后由更大的主模型进行验证,从而加速推理。
技术要求与约束
为了优化性能,实施使用 PyTorch 2.2,它通过 SDPA 提供开箱即用的 Flash Attention 2 支持。
推测解码引入了特定的技术限制:
- 架构匹配:辅助模型的解码器部分必须与主模型共享相同的架构。
- 批量大小:推测解码要求批量大小为 1。对于需要更大批量的生产环境,标准推理可能比辅助生成更快。
性能基准
在 NVIDIA A10 GPU 上使用 openai/whisper-large-v3 作为主模型,distil-whisper/distil-large-v3 作为辅助模型进行的基准测试表明,推测解码对短音频片段非常有效,但对长音频的效率较低:
- 短音频(8 秒):辅助生成平均 326.96 毫秒,而非辅助生成为 784.35 毫秒。
- 长音频(60 秒):非辅助生成平均 3.48 秒,而辅助生成平均 4.15 秒。
这种性能差异的原因是长音频会被自动分块为批次,这与推测解码的批量大小为 1 的限制相冲突。
部署与配置
部署通过一个自定义处理程序管理,该处理程序包含三个主要文件:handler.py(初始化和推理)、diarization_utils.py(前后处理)和 config.py(设置)。
配置参数
模型设置通过 ModelSettings 和 InferenceConfig 类进行管理。用户可以在创建端点时使用环境变量或 API 调用来调整参数。关键参数包括:
- 任务:在
transcribe和translate之间选择。 - 批量大小:默认是 24(辅助生成时必须为 1)。
- 辅助标志:一个布尔值,决定是否使用推测解码。
- 说话人约束:可为分离流水线定义
num_speakers、min_speakers和max_speakers选项。
API 集成
部署后,端点接受 base64 编码的音频文件。请求通过 JSON 负载发送,其中音频位于 inputs 字段,parameters 字典用于调整 InferenceConfig 设置。可以使用标准的 Python requests 或 Hugging Face 的 InferenceClient 实现。