Skip to content

fix(asr): 过滤高置信度重复循环字幕 - #407

Open
nightt5879 wants to merge 1 commit into
buxuku:mainfrom
nightt5879:nightt5879/fix-402-asr-repetition-guard
Open

fix(asr): 过滤高置信度重复循环字幕#407
nightt5879 wants to merge 1 commit into
buxuku:mainfrom
nightt5879:nightt5879/fix-402-asr-repetition-guard

Conversation

@nightt5879

Copy link
Copy Markdown
Contributor

变更内容

  • 新增模型无关的 ASR 重复循环后处理,依据字幕文本、时间邻近和顺序检测,不硬编码“点赞/转发/关注”等特定词
  • 覆盖 7 个实际 ASR 出口,且均只在最终写 SRT 前处理一次:
    • whisper.cpp builtin
    • faster-whisper
    • FunASR
    • Qwen3-ASR
    • FireRedASR
    • Cloud ASR
    • Local CLI
  • 检测三类高置信模式:连续滑动/轮转、五连完全重复、2–3 条字幕组成的多轮窗口循环
  • 命中后保留前两次,只压制后续循环;同时限制相邻间隔和窗口跨度
  • 归一化支持 CJK、英文、阿拉伯文、希伯来文及 Unicode 字母数字
  • 日志只记录引擎、删除数量、时长和原因统计,不记录用户字幕文本
  • local CLI 仅在成功解析并命中时重写 SRT;解析失败保留原输出并记录 warning

安全边界

默认、accuratebalanced 路径严格不处理。只有用户明确选择“最干净最稳”或在自定义档开启 reduceRepetition 时才启用护栏,避免合法歌词、强调和滚动式真实内容被静默删除。中英文提示已同步说明。

验证

  • npm run test:asr-repetition-guard:34/34
    • 包含 issue 截图形态的中英文滑动循环
    • 包含滚动歌词、短句强调、长间隔重复等负例
    • 包含阿拉伯文、希伯来文归一化
  • npm run test:engines:715/715
  • npm run check:i18n
  • Prettier、git diff --check
  • npm run build:Renderer 与 Main production build 通过
  • 添加更多的自定义参数 #294/能否支持扩展自定义语言 #149 按计划顺序集成无冲突,组合完整构建通过

Closes #402

@buxuku

buxuku commented Jul 29, 2026

Copy link
Copy Markdown
Owner

感谢贡献,也仔细看了实现和测试。

我对 #402 的理解是:根因在于 ASR 模型幻觉——模型在有声段也可能听错,并进入循环输出;用户截图里「转发 / 打赏 / 周末愉快」这类滑动循环就是典型表现。

当前 PR 的思路是在写 SRT 前做 重复循环后处理,对「前面正常、后面无限刷屏」的场景能减轻文件被循环淹没的问题;但若某段时间 本身有正常说话内容,却被模型幻觉成错误文本,后处理 无法恢复真实内容,只能从「很多条重复」变成「少量错误字幕**,不能从根上解决识别准确性问题

因此我倾向于把这项能力定位为 症状缓解,而非对 #402 的根治方案。现阶段我会 先保持观望,继续观察更多真实样本和上游参数/引擎侧能否更好抑制幻觉,之后再决定是否合并以及如何定位(例如是否默认开启、文档如何说明边界)。

再次感谢 PR 的工作量和完整测试。

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