Skip to content

fix(qwen): 去掉字幕里的 language Chinese / asr_text 模板残留 - #442

Open
learning-kai wants to merge 3 commits into
buxuku:mainfrom
learning-kai:codex/fix-qwen-asr-language-prefix
Open

fix(qwen): 去掉字幕里的 language Chinese / asr_text 模板残留#442
learning-kai wants to merge 3 commits into
buxuku:mainfrom
learning-kai:codex/fix-qwen-asr-language-prefix

Conversation

@learning-kai

@learning-kai learning-kai commented Aug 15, 2026

Copy link
Copy Markdown

问题

用 Qwen3-ASR 转写时会出现三类脏输出:

  1. 字幕里时不时冒出 language Chinese,有时还带着 <asr_text>
    这是 Qwen3-ASR 的聊天模板漏进正文。模型每段先报语种,再跟听写内容,sherpa-onnx 把整段解码原文交出来,SmartSub 原先原样写入 SRT。

  2. 转写直接报 SyntaxError: Bad control character in string literal in JSON at position 59
    原生识别结果是一段 JSON 字符串。Qwen 正文里偶尔带未转义的换行、Tab、NUL 等 C0 控制字符,JSON.parse 直接炸掉,整段字幕失败。

  3. 静音/幻听时整条 cue 变成英文碎片,例如 demanddetract.imageUrlFinds.
    这不是模板前缀,是模型在无语音段乱吐拉丁词。只剥 <asr_text> 去不掉。

真实课字幕里的脏形态例如:

language Chinese<asr_text>所以
language Chinese<asr_text>正态分布
**language Chinese<asr_text>开玩笑 **
demand
detract.
imageUrl

变更内容

  • 新增 sanitizeQwenAsrText,剥掉语种头、<asr_text> 和偶发 markdown 星号;剥完为空的 cue 丢弃
  • 没有汉字的单 token 默认当幻听丢掉;公式字母(p / DXY / EX1)、数学符号名(sigma)和口语短回应(OK)保留
  • 正常英文句子(如 language is important)不会被误删
  • qwenEngine 写 SRT 前清洗
  • sherpa worker 对 qwen3_asr 同步剥一层
  • 新增 json-result.js,解析原生 JSON 前把字符串里的裸控制字符转义;decodeAsync / getResult 都走这条路径

验证

  • npm run test:engines:810 passed, 0 failed
  • npm run test:sherpa-json:4 passed

已有字幕文件不会自动改写,需要重新转写才会变干净。

Qwen3-ASR sometimes emits chat-template crumbs such as language Chinese<asr_text> into cue text. Sanitize at the worker and engine exits, and drop empty leftover cues.
@learning-kai
learning-kai marked this pull request as ready for review August 15, 2026 10:45
@learning-kai

Copy link
Copy Markdown
Author

问题

用 Qwen3-ASR 转写时会出现三类脏输出:

  1. 字幕里时不时冒出 language Chinese,有时还带着 <asr_text>
    这是 Qwen3-ASR 的聊天模板漏进正文。模型每段先报语种,再跟听写内容,sherpa-onnx 把整段解码原文交出来,SmartSub 原先原样写入 SRT。

  2. 转写直接报 SyntaxError: Bad control character in string literal in JSON at position 59
    原生识别结果是一段 JSON 字符串。Qwen 正文里偶尔带未转义的换行、Tab、NUL 等 C0 控制字符,JSON.parse 直接炸掉,整段字幕失败。

  3. 静音/幻听时整条 cue 变成英文碎片,例如 demanddetract.imageUrlFinds.
    这不是模板前缀,是模型在无语音段乱吐拉丁词。只剥 <asr_text> 去不掉。

真实课字幕里的脏形态例如:

language Chinese<asr_text>所以
language Chinese<asr_text>正态分布
**language Chinese<asr_text>开玩笑 **
demand
detract.
imageUrl

变更内容

  • 新增 sanitizeQwenAsrText,剥掉语种头、<asr_text> 和偶发 markdown 星号;剥完为空的 cue 丢弃
  • 没有汉字的单 token 默认当幻听丢掉;公式字母(p / DXY / EX1)、数学符号名(sigma)和口语短回应(OK)保留
  • 正常英文句子(如 language is important)不会被误删
  • qwenEngine 写 SRT 前清洗
  • sherpa worker 对 qwen3_asr 同步剥一层
  • 新增 json-result.js,解析原生 JSON 前把字符串里的裸控制字符转义;decodeAsync / getResult 都走这条路径

验证

  • npm run test:engines:810 passed, 0 failed
  • npm run test:sherpa-json:4 passed

已有字幕文件不会自动改写,需要重新转写才会变干净。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants