Prhub

#39116 [ASR] Fix spacing bw chunks in multi chunk audio transcription

vllm-project/vllm · 作者 ekagra-ranjan · 合并时间 2026-04-10 03:46

分析状态 已生成
文件变更 5提交数 8 · 评论 6
代码增减 +315 / -4
bugfix frontend v1 test

执行摘要

修复 ASR 多块音频转录时块间缺少空格问题,提升 Cohere 和 Qwen3 模型输出质量。

根据PR描述,当前ASR转录在连续块输出间无空格分隔,例如块1输出'Hello, this',块2输出'is vllm',最终输出为'Hello, thisis vllm'。此问题影响Cohere ASR和Qwen3 ASR,而Whisper因总是预加空格未被发现。修复旨在确保输出文本的正确格式。

建议工程师精读此PR,以理解ASR流式处理中分隔符的设计决策和协议扩展模式。重点关注asr_inter_chunk_separator函数的实现、流式生成器的参数传递逻辑,以及如何通过测试确保正确性,这对处理类似多块文本拼接问题有参考价值。

讨论亮点

review中,gemini-code-assist[bot]指出三个关键问题:一是translation_stream_generator方法未更新接受separator参数,可能导致TypeError;二是直接访问self.model_cls.no_space_languages可能存在AttributeError风险,建议使用getattr;三是流式模式中分隔符被添加到每个块的开始,导致第一个块出现前导空格。作者ekagra-ranjan回应认为所有转录模型都应继承SupportsTranscription协议,因此无需额外安全措施。最终PR被DarkLight1337批准,提交历史显示流式前导空格问题已修复。

实现拆解

实现方案包括:1) 在vllm/entrypoints/openai/speech_to_text/speech_to_text.py中新增asr_inter_chunk_separator函数,根据语言设置返回空格或空字符串;2) 在_create_speech_to_text方法中计算分隔符,用于非流式连接的separator.join和流式路径的参数传递;3) 更新serving.py中的transcription_stream_generatortranslation_stream_generator方法以接受分隔符参数;4) 在interfaces.pySupportsTranscription协议中添加no_space_languages类变量,默认包含日语和中文;5) 在cohere_asr.py中显式定义该属性;6) 新增测试文件验证分隔符逻辑和流式/非流式行为。

文件 模块 状态 重要度
vllm/entrypoints/openai/speech_to_text/speech_to_text.py speech_to_text modified 8.0
vllm/entrypoints/openai/speech_to_text/serving.py speech_to_text modified 7.0
vllm/model_executor/models/interfaces.py model_interfaces modified 6.0
tests/entrypoints/openai/speech_to_text/test_transcription_inter_chunk_spacing.py testing added 5.0

分析完成后,这里会展示 LLM 生成的相对完整源码片段和详细注释。

关键符号

asr_inter_chunk_separator _create_speech_to_text _speech_to_text_stream_generator transcription_stream_generator translation_stream_generator

评论区精华

translation_stream_generator 参数缺失 正确性

gemini-code-assist[bot] 指出该方法未更新接受 separator 参数,会导致 TypeError

结论:作者可能在后续提交中修复,因 PR 被批准,提交历史显示翻译路径更新 · 已解决

属性访问安全 设计

bot 建议使用 getattr 避免 AttributeError,作者认为所有模型应继承协议无需此安全

结论:未采纳建议,依赖协议继承,可能存在兼容性风险 · unresolved

流式前导空格 正确性

bot 指出流式模式中 separator 被添加到每个块开始,导致第一个块有前导空格

结论:提交历史显示修复,添加条件避免第一个块添加分隔符 · 已解决

风险与影响

技术风险包括:1) 如果模型类未定义no_space_languages属性,直接访问可能引发AttributeError,尽管协议提供了默认值;2) 流式生成器逻辑需确保分隔符仅在非第一个块添加,否则导致前导空格错误,提交历史显示已修复;3) 跨语言支持需兼容现有模型,如Whisper可能不受影响,但新逻辑需全面测试;4) 性能影响轻微,因额外字符串操作,但可能增加流式处理的复杂度。

影响范围:用户ASR转录输出质量显著提升,特别是英语等需要空格的语言,改善用户体验;系统层面,修改涉及核心ASR处理逻辑,但限于前端入口点,对后端模型影响小;团队需注意协议变更,未来模型实现需遵循SupportsTranscription协议,新增测试增强代码可靠性。影响程度中等,修复重要bug但非关键路径。

属性访问风险 流式逻辑错误 协议兼容性

关联 Issue

未识别关联 Issue

当前没有检测到明确关联的 Issue 链接,后续同步到相关引用后会出现在这里。

完整报告

执行摘要

该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_generatortranscription_stream_generatortranslation_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转录的细节修复,是整体语音处理改进的一部分。

参与讨论