执行摘要
该PR修复了vLLM中自动语音识别(ASR)在多块音频转录时块间缺少空格的问题,通过引入语言特定分隔符逻辑,在流式和非流式路径中正确插入空格,显著提升Cohere和Qwen3 ASR模型的输出质量。新增测试确保修复覆盖各种场景。
功能与动机
当前ASR转录在处理多块音频时,连续块的文本输出间无空格分隔,导致文本粘连(如"Hello, thisis vllm")。此问题影响Cohere ASR和Qwen3 ASR,而Whisper模型因总是预加空格未被发现。修复旨在确保输出文本格式正确,提升用户体验。
实现拆解
- 核心辅助函数:在
speech_to_text.py中新增asr_inter_chunk_separator函数,根据语言代码返回空格或空字符串(默认日语和中文无空格)。
- 非流式路径:在
_create_speech_to_text方法中计算分隔符,使用separator.join(text_parts)合并文本块。
- 流式路径:更新
_speech_to_text_stream_generator、transcription_stream_generator和translation_stream_generator方法,传递分隔符参数,并确保仅在非第一个块前添加分隔符。
- 协议扩展:在
SupportsTranscription协议中添加no_space_languages类变量,提供默认值,并在Cohere ASR模型中显式定义。
- 测试覆盖:新增测试文件
test_transcription_inter_chunk_spacing.py,验证分隔符逻辑和流式/非流式行为。
评论区精华
review中,gemini-code-assist[bot]指出关键问题:
-
"The translation_stream_generator method ... has not been updated to accept the new separator argument. This will cause a `TypeError"
-
"Accessing self.model_cls.no_space_languages directly may raise an AttributeError ... Using getattr is safer"
-
"In streaming mode, the separator is prepended to every chunk, including the first one. This results in an unwanted leading space"
作者ekagra-ranjan回应认为所有转录模型应继承SupportsTranscription协议,因此无需额外安全措施。最终PR被批准,提交历史显示流式前导空格问题已修复。
风险与影响
风险:
- 属性访问风险:如果模型未定义
no_space_languages,直接访问可能引发AttributeError,尽管协议有默认值。
- 流式逻辑错误:需确保分隔符仅在非第一个块添加,否则导致前导空格,提交显示已修复。
- 协议兼容性:新增协议变量需现有模型适配,但默认值应覆盖常见情况。
影响:
- 用户:ASR输出质量提升,特别是英语等需要空格的语言。
- 系统:修改限于前端入口点,性能影响轻微。
- 团队:新增测试增强可靠性,协议变更需未来模型实现遵循。
关联脉络
与近期PR关联较弱,但PR 38538(Nemotron-Nano-VL音频处理)和PR 39409(多模态错误信息)同属前端和多模态领域,显示团队在完善ASR和相关功能。此PR聚焦于ASR转录的细节修复,是整体语音处理改进的一部分。
参与讨论