|
| 1 | +# 熵减 ASR 质量与链路优化方案(2026-09 盘点 · 技术栈不受限) |
| 2 | + |
| 3 | +> 状态:调研方案(未立项,供用户裁决批次与范围) |
| 4 | +> 数据源与证据分级: |
| 5 | +> - **【代码证】** 已逐一核对 `app/src-tauri/src` 源码/单测,可作事实依据; |
| 6 | +> - **【wiki: 文件(行)】** 出自 `.qoder/repowiki/zh/content/`(2026-09-03 由 Qoder 依 dev 生成、AI 撰写)。wiki 与代码已发现多处背离(见附 A 定案案例),**凡 wiki 断言一律以代码互证为准**; |
| 7 | +> - **【推断】** 未验证的分析判断; |
| 8 | +> - **【前沿】** 2026-09 web 检索所得外部资料(口径不一,仅作方向与量级参考,引用见附 B)。 |
| 9 | +> 关联:ADR-003(流式 ASR 架构)· ADR-012(流式质量修复批)· REQ-041/068/101 · Foresight 长期优化清单/视频提取极限 · v0.19 检索与发现层设计(检索质量同样受 ASR 文本质量影响) |
| 10 | +
|
| 11 | +## 一、一句话结论 |
| 12 | + |
| 13 | +ASR 感知质量的提升空间主要**不在"换更大的模型"**,而在这五件事,按杠杆排序: |
| 14 | + |
| 15 | +1. **真实基线缺失**:90% 保真度是经验估计(原文档自注"需实测校准"),大量模块"真机验收待执行"——没有尺子,一切优化都是猜; |
| 16 | +2. **既定规则链参数全员经验化**:VAD 倍率/窗口/预热、端点 rule1/2/3、重打分门限、融合权重、去重阈值——wiki 多处自注"需实测校准",工具(`bin/cer_bench`/`asr_forensic`/阈值共享槽)已就绪,缺的是语料与 runner; |
| 17 | +3. **实时会话缺"会话级全量精修"档**:现在实时只对端点句重打分(3s 超时)、停止补尾句;文件导入却是 SenseVoice 全窗转写。S4 音频落盘已交付,补一个"会话结束全量离线精修(可预览采纳/回退)"是最大单品杠杆; |
| 18 | +4. **感知杀手是术语/专名错**(贝塞尔→被萨尔进笔记即知识资产污染),热词/词表闭环的覆盖面与加固优先级高于模型换芯; |
| 19 | +5. **技术栈外确实存在 2026 年更强的中文模型档**(FireRedASR v2/Qwen3-ASR/Fun-ASR-Nano 等),但换芯必须过"同一评测集 + 本地约束(离线/TLS/体积/许可/热词支持)"的裁决门,且跨运行时接入(FunASR 服务形态等)属 ADR 级决策。 |
| 20 | + |
| 21 | +## 二、现状基线缺口与现成工具(代码证) |
| 22 | + |
| 23 | +| 项 | 现状 | 证据 | |
| 24 | +|---|---|---| |
| 25 | +| 保真度 | 字幕 100% / 字幕 OCR ~99% / 纯 ASR ~90%(+hotwords 纠偏)为**经验估计,需实测校准** | Foresight 提取极限文档自注 | |
| 26 | +| 验收 | 多版本"代码已交付,真机验收待执行" | versions/ 系列 | |
| 27 | +| 预处理微基准 | `bin/cer_bench <wav> <ref.txt>`:S4 落盘音频"预处理开/关"两路 SenseVoice 转写 → CER 对比 + `recommend_preproc` 结论(REQ-101 验收口径);`src/cer.rs` 提供纯函数 | 代码证(bin/cer_bench.rs) | |
| 28 | +| 截断取证/阈值诊断 | `bin/asr_forensic`:疑似截断段窗口重转写(TAIL_MARGIN 1.2s)+ RMS 弱音块统计 | 代码证 | |
| 29 | +| 诊断共享槽 | VadThresholdSlot 跨会话暴露 VAD 阈值 | 代码证(wiki 亦述) | |
| 30 | +| 指标聚合 | 引擎失败/超时/缓存命中计数入质量报告 | 代码证(模块注释)+ wiki 述 | |
| 31 | +| 预处理配置持久化 | `audio_preproc_config.rs`(同 OcrDeviceConfig 模式,下次实时会话生效) | 代码证 | |
| 32 | +| **缺口** | ①真实语料集(分档案桶 + 人工/字幕参考)②corpus 回归 runner ③错误聚类工具 | 推断 | |
| 33 | + |
| 34 | +**基线先行(P0)** = 把 `cer_bench` 泛化为多文件 corpus 模式(分网课/实操/口播/圆桌/混说桶),输出首轮 CER 与错误聚类——之后所有 A/B 与换芯裁决共用同一把尺。 |
| 35 | + |
| 36 | +## 三、全链路机会清单 |
| 37 | + |
| 38 | +### 3.1 信号捕获 / 前处理 |
| 39 | + |
| 40 | +| 机会 | 现状与证据 | 技术栈内 | 技术栈外/前沿 | 优先级 | |
| 41 | +|---|---|---|---|---| |
| 42 | +| 预处理链默认定案 | AGC+削波+噪声底动态阈值链,**默认关**,生产启用待 CER 微基准(代码证 audio_preprocess.rs:RNNoise 曾评估延后) | 用 cer_bench + 语料集跑开/关 CER 定默认;REQ-101 验收口径已立 | RNNoise/模型化降噪(净收益需评估;环回是"成品音频",降噪慎用——代码注) | **P1** | |
| 43 | +| 噪声底陈旧 | 噪声底仅静音块更新,连续语音期可能漂移(wiki: 音频捕获系统 185,需互证实现细节) | 语音期低频次更新/能量窗校准 | — | P2 | |
| 44 | +| 停录句尾丢失 | flush 时静默尾块直接丢弃(登记豁免;wiki: 音频重采样与处理 193) | 保留尾部缓冲入句音频,末句完整重打分 | — | P2 | |
| 45 | +| 双声道取一 | 立体声按声道 RMS 取最大声道(wiki: 音频重采样 300 待互证) | 场景评估(课堂双声源少见),低优 | — | P3 | |
| 46 | + |
| 47 | +### 3.2 VAD / 端点(切句与漏音是全链路起点) |
| 48 | + |
| 49 | +| 机会 | 现状与证据 | 技术栈内 | 技术栈外/前沿 | 优先级 | |
| 50 | +|---|---|---|---|---| |
| 51 | +| 参数标定族 | 自适应能量 VAD(P10 分位数+平滑限幅);预热 50 块、窗口 400 块≈80s、±20%/块;rule1 2.4s / rule2 1.2s / rule3 8s(env 可覆盖)——代码证(streaming_endpoint/streaming_asr/vad_adaptive);wiki 自注"须按业务数据校准倍率/上下限/预热"(自适应 VAD 304、VAD 静音检测 109-112) | `asr_forensic` RMS 弱音块统计 + VadThresholdSlot 观测 → 语料标定;**档案化阈值**(口播/圆桌/实操噪声不同) | 模型化 VAD(见下行) | **P1** | |
| 52 | +| **文档/实现落差:Silero VAD** | AGENTS.md 技术栈记载"Silero VAD",**代码零引用**(全仓 grep 无 silero;实际为能量自适应 + sherpa 端点规则;ADR-003 原文待核) | 决策留痕:修订 AGENTS/(如涉)ADR-003 口径(规范先行) | 若重开 VAD 选型:Silero-ONNX(rust 绑定成熟、sherpa-onnx 生态内置)做模型 VAD spike,与标定后能量 VAD 同评测集对比 | P3 决策项 | |
| 53 | +| rule3 等参数入口 | 仅 env `ENTROPY_ASR_RULE3_SECS`(代码证 live_session_lifecycle/prepare 两处口径一致) | 配置 UI/JSON 校准 + 档案化(audio_preproc_config 先例) | — | P2 | |
| 54 | +| 阈值槽蓝图 | 多阈值/多数投票为设计蓝图未实现(wiki: 阈值槽式 VAD 自述) | 先量化收益(当前单阈值标定后是否还缺?)再定 | — | P3 | |
| 55 | + |
| 56 | +### 3.3 流式解码 / 引擎 |
| 57 | + |
| 58 | +| 机会 | 现状与证据 | 技术栈内 | 技术栈外/前沿 | 优先级 | |
| 59 | +|---|---|---|---|---| |
| 60 | +| 重打分积压丢内容 | rescore 3s 超时(代码证 RESCORE_TIMEOUT_MS)有界;SenseVoice 慢于语音速率时 channel 积压、停止时内容缺失(wiki: 流式 135/349) | 积压计数/背压统计 + 停止前 drain 策略验证 | — | **P1 验证** | |
| 61 | +| 热词加固 | 热词依赖 modified_beam_search(wiki: 模型管理 126/149:表外字 abort、下个端点生效——**需互证**);领域热词预热注入已有(video_profile_domain_fine 代码证 + wiki 智能分析 197-200) | 注入前 tokens 过滤 + 崩溃防护单测;注入源扩展(文件标题/章节名/术语候选自动入词) | 前沿:三代热词方案(FunASR:热词属性绑定/多策略,[阿里云文章](https://developer.aliyun.com/article/1587443));zero-shot trie 上下文偏置([IEEE 11249064](https://xplorestaging.ieee.org/document/11249064));hotword retrieval+RL([arXiv 2512.21828](https://arxiv.org/abs/2512.21828v1))——sherpa 内已具 hotwords 机制,方向=覆盖面与排序策略 | **P1** | |
| 62 | +| 词级时间戳 | 流式默认 None 省内存,近似按字符比例(wiki: 转写片段实体 101/118——需互证) | 对齐精度敏感场景(字幕融合/时间回跳)评估开启成本 | — | P2 | |
| 63 | + |
| 64 | +### 3.4 第二遍 / 离线精修档(技术栈内外机会最集中处) |
| 65 | + |
| 66 | +| 机会 | 现状与证据 | 技术栈内 | 技术栈外/前沿 | 优先级 | |
| 67 | +|---|---|---|---|---| |
| 68 | +| **会话级全量离线精修** | 实时=端点句 rescore(门限:编辑距离≤较短 40%、前缀扩展 max(8,流式长)、短句≤4 放宽——wiki: 重打分 146;代码证 asr_rescore);导入=全窗 SenseVoice 30s+2s(代码证 import_transcribe) | 新命令:会话结束后用落盘 S4 音频全量 SenseVoice 第二遍 → 段级 diff → 预览采纳/回退(原料层不动、产物可逆——既有契约);O4 登记项落地 | — | **P1** | |
| 69 | +| 第二遍模型档升级 | 现 SenseVoice;同 crate 候选需核 sherpa-onnx 模型表 | SenseVoice 系变体/Paraformer-zh 220M(sherpa 生态支持,AISHELL-1 ~1.95% 参考口径不一)/zipformer 新 checkpoint | FireRedASR v2(中文基准第一,AED 1.1B 需 GPU、60s 窗、自带 VAD/标点/时间戳,Apache-2.0);Qwen3-ASR(0.6B/1.7B、22 方言、流式);Fun-ASR-Nano(800M、流式+7 方言+26 口音、ONNX 可导出);Moonshine 中文出局(CER ~36%)——数据源附 B(口径不一仅量级参考) | P3 spike(门控见 §四) | |
| 70 | +| 门限与代理置信 | "相似度代置信度"(wiki: 重打分 135/175)+ 权重 0.6/0.4 经验值 | 离线回放 A/B 标定(同 P0 语料) | — | P1 | |
| 71 | + |
| 72 | +### 3.5 融合 / 对齐 |
| 73 | + |
| 74 | +| 机会 | 现状与证据 | 技术栈内 | 技术栈外/前沿 | 优先级 | |
| 75 | +|---|---|---|---|---| |
| 76 | +| **DTW 漂移校正未接线** | `dtw_align.rs`(estimate_drift_ms/correct_subtitles/alignment_accuracy)纯函数+测试齐备,**全仓无生产调用点**(代码证 grep)——wiki"spike 预留"属实 | 接线进字幕融合入口 + 真机漂移观测(字幕时间戳漂移是"字幕权威"路线错位主因) | — | **P1** | |
| 77 | +| 融合参数族标定 | gap 1000ms / SIM 0.8 / LOW 0.6 / 概率加权 0.6-0.4 / 去重窗与编辑距离 ≤1/≤2——wiki 多处自注"需实测校准"(字幕融合 319-322、智能分析 240、去重净化 199) | corpus runner 端到端 A/B(融合输出 vs 人工,而非单阈值) | — | P1 | |
| 78 | +| 融合性能 | DTW O(nm) 限带宽/预过滤(wiki: 字幕对齐 346) | 长会话触发后评估 | — | P3 | |
| 79 | + |
| 80 | +### 3.6 文本后处理 / 纠错(感知质量主战场) |
| 81 | + |
| 82 | +| 机会 | 现状与证据 | 技术栈内 | 技术栈外/前沿 | 优先级 | |
| 83 | +|---|---|---|---|---| |
| 84 | +| **ASR 同音混淆画像闭环** | OCR 侧已有完整机制:混淆画像→替换候选→先验兜底→JSON 原子持久化→确认入库(代码证 ocr_confusion/commands;wiki OCR 混淆矩阵页)——ASR 侧无 | 迁移同款:语音同音错对画像(以人工/字幕为参考对齐)→ 候选纠错表(JSON 校准、共现才替换——"保守替换"哲学 OCR 结果校正 198 先例)→ 反哺 hotwords | LLM 校对(见下) | **P1/P2** | |
| 85 | +| 可选 LLM 文本校对 | 现有 AI 平台(本地 Ollama preset/云端 BYOK + content_gate 默认关 + 成本审计) | 逐句"建议制"纠错:仅文本上云(**语音不出本机**),建议确认才替换 | 前沿方向:LLM 系 ASR 纠错(如 FireRedASR2-LLM 等 audio-LLM 路线需 GPU/云端;文本级 correction 是其轻量近似) | P2(产品化纪律:默认关) | |
| 86 | +| 净化阈值与复核 | asr_clean 幻觉过滤/asr_dedupe(重叠≥2 字+Jaccard)/语篇精确表零误杀哲学(note_filter_discourse 代码证) | 去重阈值语料标定防误删;边界段"人工/AI 复核"闭环核实(wiki: 去重净化 364 待互证) | — | P2 | |
| 87 | +| bigram O(nm) | 两两比较(wiki: 去重净化 337 待互证) | 长会话索引化(低优) | — | P3 | |
| 88 | + |
| 89 | +### 3.7 健康 / 资源 / 指标 |
| 90 | + |
| 91 | +| 机会 | 现状与证据 | 技术栈内 | 技术栈外/前沿 | 优先级 | |
| 92 | +|---|---|---|---|---| |
| 93 | +| 健康阈值标定 | 无产出 5s→离线重打分、15s→静音占位、恢复 3s(wiki: 健康监控 102-104——asr_health.rs 存在代码证) | 真实场景标定 + 事件落库分析 | — | P2 | |
| 94 | +| 指标可视化 | 引擎计数入质量报告;wiki"延迟/CER/超时聚合"为建议层(流式 338-342) | 会话报告 UI 暴露 ASR 指标(降级次数/重打分率/CER 抽样) | — | P2 | |
| 95 | +| GPU/CPU 口径 | **已定案:ASR 无 GPU 分支**(device_config 仅 OCR/structure_engine 引用,代码证)——wiki ASR"模型管理"页含 OCR 设备决策为生成混淆 | 不动作;仅修订 wiki 口径 | 若 ASR 上 GPU:sherpa-onnx 无 CUDA EP 流式档(其生态以 CPU 优化为要)——不具性价比,出局 | — | |
| 96 | + |
| 97 | +### 3.8 评测 / 工具(横切,P0 一并建) |
| 98 | + |
| 99 | +corpus runner(分档案桶)+ 错误聚类(借鉴 OCR 混淆矩阵以参考文本对齐建画像 [wiki: 混淆矩阵 91])+ 盲测对比;所有 A/B 与模型裁决共用。 |
| 100 | + |
| 101 | +## 四、换芯评估框架(不被技术栈束缚,但要有裁决门) |
| 102 | + |
| 103 | +| 档位 | 候选 | 优劣 | 裁决要点 | |
| 104 | +|---|---|---|---| |
| 105 | +| 同 crate 微调档 | sherpa-onnx 现模型(Zipformer 双语/SenseVoice)参数与链路优化 | 零架构风险 | §三 P0~P2 先行 | |
| 106 | +| 同 crate 换模型档 | sherpa-onnx 生态内其他转换模型(Paraformer-zh 系/新版 zipformer/在线 CTC——sherpa 已支持 [online CTC 模型页](https://k2-fsa.github.io/sherpa/onnx/pretrained_models/online-ctc/index.html)) | 低风险试验 | 同一 corpus runner:CER×延迟×分发体积×热词支持;替换仅影响引擎池加载 | |
| 107 | +| 跨运行时档 | FunASR(fsmn-vad+paraformer-streaming+ct-punc+cam+++三代热词,Python/服务形态);FireRedASR v2(GPU、基准第一);Qwen3-ASR(方言);Fun-ASR-Nano(方言/流式,ONNX 导出) | 更强精度/方言;但 = sidecar 服务或新推理栈(Python 运行时/GPU 依赖/体积),与 Rust 单机本地架构冲突 | **先出 ADR 草案**:产品场景(用户多为普通话网课)是否买单方言/多出的 3-5% CER;本地约束(TLS/离线/许可 Apache-2.0 可商,Moonshine-zh 例外) | |
| 108 | +| 可选云端档 | 语音上云高精度/LLM 纠错 | 效果最好 | **隐私红线冲突**:语音=学习数据,默认不出本机;若要评估须独立用户授权决策 + 明示 + 独立 ADR;文本级后处理上云走既有 content_gate | |
| 109 | + |
| 110 | +> 量级参考([第三方汇总文,2026-03,口径不一仅作量级](https://cloud.tencent.com.cn/developer/article/2642961)):普通话平均 CER FireRedASR2-LLM 2.89 / AED 3.05 / Qwen3-ASR 3.76;AISHELL-1:Paraformer-zh ~1.95、SenseVoice-Small ~3.0(各自口径)。**任何数字都不替代自测。** |
| 111 | +
|
| 112 | +## 五、分批路径(建议,供裁决) |
| 113 | + |
| 114 | +| 批 | 内容 | 预估 | 退出标准 | |
| 115 | +|---|---|---|---| |
| 116 | +| P0 基线 | corpus runner(分档案桶)+ 首轮 CER/错误聚类;文档/实现落差三案留痕(Silero/GPU/DTW,改 ADR-003/AGENTS 口径) | 1-2d | 首轮基线报告(分桶 CER + top 错误类型) | |
| 117 | +| P1 定案批 | 预处理默认定案;VAD/端点/融合/去重阈值族标定(同 runner A/B);DTW 接线+漂移观测;重打分积压验证;热词过滤加固+注入源扩展 | 3-5d | 每项 1 页 A/B 结论;goldens 全绿;误删零回归 | |
| 118 | +| P2 质量新档 | 会话全量离线精修(采纳/回退 UX);ASR 混淆画像→纠错/热词闭环;可选 LLM 文本校对(建议制·默认关) | 3-5d | 盲测对比报告;默认关合规 | |
| 119 | +| P3 换芯 spike | 同 crate 候选档评测;如需跨运行时 → ADR-029 式草案(服务形态/许可/方言需求) | 2-3d + | 评测矩阵;ADR 裁决 | |
| 120 | + |
| 121 | +## 六、纪律与红线 |
| 122 | + |
| 123 | +- 原料层(session_segments 原文)永不可变,一切净化/重打分/纠错作用于产物层并保留来源标记(既有可逆契约); |
| 124 | +- 模型文件不入库;新依赖下载受本机 TLS 约束(本地归档先例);换推理栈 = ADR; |
| 125 | +- 语音数据不出本机;文本级 AI 调用走 content_gate 双闸门默认关 + 成本审计(v0.19 检索层同款纪律); |
| 126 | +- 全部参数改动可配置/可回退(JSON 校准先例),golden 语料防误删回归。 |
| 127 | + |
| 128 | +## 附 A:wiki 断言 vs 代码核查清单 |
| 129 | + |
| 130 | +**已定案(代码证)** |
| 131 | +1. ~~wiki: ASR"模型管理"页称 GPU/CPU 自动选择~~ → **GPU 决策仅属 OCR**(device_config.rs/OcrBackend 只被 ocr/structure_engine 引用);wiki 生成混淆,不改代码。 |
| 132 | +2. ~~wiki: 说话人分离"无实现仅建议"~~ → 弱化版已实现(speaker_engine.rs 离线懒加载 + speaker_change.rs 阈值 0.75 + commands_speaker.rs + SpeakerSwitchCard 下载 UI)。 |
| 133 | +3. ~~AGENTS.md 记"Silero VAD"~~ → **代码零引用**(能量自适应 VAD + sherpa 端点规则);规范口径需修订或重开选型(P3 决策项)。 |
| 134 | +4. wiki"DTW 漂移校正 spike 预留" → 属实:dtw_align.rs 纯函数+测试齐备但**无生产调用点**。 |
| 135 | +5. rule1/2/3、hangover 3 块、rescore 3s、rule3 env 覆盖 → 与代码一致(代码证)。 |
| 136 | + |
| 137 | +**待核查(wiki 行号源,实施时逐条互证)**:重打分积压丢内容(流式 135/349);热词表外字 abort 与下端点生效(模型管理 126/149/271);健康阈值 5s/15s/3s(健康监控 102);静音尾块丢弃(音频重采样 193);边界段复核闭环(去重净化 364);word_timestamps None 与字符近似(转写片段 101/118);bigram O(nm)(去重净化 337);噪声底仅静音块更新(音频捕获 185);双声道取最大 RMS(音频重采样 300)。 |
| 138 | + |
| 139 | +## 附 B:外部参考(2026-09 检索,口径以各自出处为准) |
| 140 | + |
| 141 | +- 中文开源 ASR 模型/工具生态与 CER 汇总:[腾讯云开发者社区(2026-03)](https://cloud.tencent.com.cn/developer/article/2642961) |
| 142 | +- sherpa-onnx:模型生态([在线 CTC 模型](https://k2-fsa.github.io/sherpa/onnx/pretrained_models/online-ctc/index.html)) |
| 143 | +- FunASR(VAD/标点/CAM++/热词工具链,[FunASR README](https://raw.githubusercontent.com/alibaba-damo-academy/FunASR/main/README_zh.md))· [第三代热词方案](https://developer.aliyun.com/article/1587443) |
| 144 | +- FireRedASR([仓库](https://github.com/FireRedTeam/FireRedASR))· Qwen3-ASR([仓库](https://github.com/QwenLM/Qwen3-ASR))· Fun-ASR-Nano([Fun-ASR 仓库](https://github.com/FunAudioLLM/Fun-ASR))· SenseVoice([FunAudioLLM](https://developer.baidu.com/article/detail.html?id=7726618)) |
| 145 | +- VAD:Silero([silero-vad-rust](https://lib.rs/crates/silero-vad-rust))· 标点:FireRedChat-punc([HuggingFace](https://huggingface.co/FireRedTeam/FireRedChat-punc)) |
| 146 | +- 前沿论文:zero-shot trie 上下文偏置([IEEE](https://xplorestaging.ieee.org/document/11249064))· LLM-ASR 热词检索+强化([arXiv 2512.21828](https://arxiv.org/abs/2512.21828v1)) |
0 commit comments