Prhub

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

原始 PR 作者 ekagra-ranjan 合并时间 2026-04-10 03:46 文件变更 5 提交数 8 评论 6 代码增减 +315 / -4

执行摘要

修复 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

关键符号

asr_inter_chunk_separator _create_speech_to_text _speech_to_text_stream_generator transcription_stream_generator translation_stream_generator

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

评论区精华

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 链接,后续同步到相关引用后会出现在这里。

完整报告

参与讨论