📄 先验声学再验一遍:VISH 如何从帧后验里挑选热词
英文题目:VISH-ASR: Viterbi-Guided Selection of Hotwords for Speech-LLM Contextual ASR
评分:7.5/10 | 创新 1.5/2 | 技术严谨 1.3/1.5 | 实验充分 1.3/1.5 | 清晰度 0.8/1 | 影响力 0.8/1.5 | 开源 0/1.5 | 可复现 0.3/0.5 | 工程/实践 1.5/1.5
👥 作者与机构
- Xiaoyu Gu:机构信息未能在本次解析中与作者逐人可靠绑定
- Yu Xi:机构信息未能在本次解析中与作者逐人可靠绑定
- Chencheng Wang:机构信息未能在本次解析中与作者逐人可靠绑定
- Zonghan Zhou:机构信息未能在本次解析中与作者逐人可靠绑定
- Haoyu Li:机构信息未能在本次解析中与作者逐人可靠绑定
- Jing Peng:机构信息未能在本次解析中与作者逐人可靠绑定
- Kai Yu:机构信息未能在本次解析中与作者逐人可靠绑定
📌 核心摘要
提示式上下文语音识别需要从上千量级的动态热词表中挑出少量与当前语音声学证据相符的词,再放入提示以引导语音大模型转写,难点在于离散首遍假设可能丢掉声学证据,而另训检索模型又增加训练与维护成本。论文提出的Viterbi引导的热词选择(Viterbi-guided Selection of Hotwords,VISH)直接在帧级CTC后验轨迹上为每个候选词搜索最优局部对齐并打分,累积分数按最优路径非空帧数归一化以减轻时长偏置。多词版本(Multi-Word VISH,M-VISH)把候选词组织成共享前缀树以复用公共词元前缀的计算,并用前\(K_p\)剪枝控制活跃前缀数量。双向版本(Bidirectional M-VISH,Bi-MVISH)把后验与词序列同时反转再做一次同类搜索并与前向分数平均,以补偿词首声学证据弱时的漏检。与已有做法的差异在于验证不依赖离散转写出现该词,也不训练新的语音文本检索模型,仍保持即插即用。与复现的已学习检索基线相比,M-VISH在LibriSpeech test-other 2000词条件下最佳F1(Best-F1)从82.4%提升到87.7%,Bi-MVISH进一步到88.8%。适用范围限于能给出可靠候选词CTC词元后验的场景,发音特殊或拼写变体可能削弱分数,原文未披露训练、推理或部署成本,外部打分器在内部后验不可用时会增加一次声学编码。
🔗 开源与复现资源
本次未形成可展示的已核验资源记录,开放状态尚未核实。
可达状态仅表示本次链接检查结果,不代表许可证、本文权重或运行复现已验证。
🧭 深度解读
提示式识别为什么装不下大热词表
语音大模型做上下文识别时,输入是三部分:待识别的语音、写进提示的热词表、要求转写的指令。输出是转写文本,其中热词是否写对、背景词是否被带偏都很重要。
热词是联系人、地点、产品名这类长尾词,训练语料里很少见,通用模型容易听错,所以要靠外部词表临时补充。提示式做法不改模型权重,直接把热词放进提示,方便每次请求换表,但表太大时提示变弱,模型容易互相干扰,把背景词也替换错。
因此实际系统要先做预选:从几百到几千的动态候选里挑出一个小子集,只保留声学上真有支撑的词,再送入提示。本文要解决的就是这个预选步骤,要求不依赖离散假设、不另训检索模型。
热词 × 偏置表 × 上下文 ASR: 热词指训练中少见但语义关键的人名、地名、产品词等;偏置表是用户一次请求给出的候选热词集合;上下文 ASR 是把偏置表作为外部词法上下文送入识别,目标是只在声学支持时偏向这些词,不破坏通用词的识别。
已有预选从哪里找证据
第一类是基于假设过滤,先用 CTC 等解码出一版离散文本,再用词典索引和编辑距离去匹配热词。CTC-Assistant 就是代表。问题是如果目标词没出现在第一遍文本里,声学证据就被丢掉了,后续匹配无从谈起。
第二类是学一个语音文本检索器,如 BR-ASR、GLCLAP、CLAR,把语音和热词文本映射到同一空间算相似度。这需要额外训练检索模型,换场景或换词表时不够灵活。
第三类是搜索图方法,基于加权有限状态机组合或格重打分,往往需要解码器侧的图、格或特定搜索结构,对黑盒上下文系统不方便。另有 CTC 关键词检测做过后验上的受限对齐,但目标是检测而非为下游提示排序选子集。本文的定位是直接在帧级后验上验证并排序,不解码成文,不训练新模型。
本文把预选定义成什么搜索问题
给定一段语音和候选集合,VISH 对每个候选估计声学支持,所用信号是帧级 CTC 后验,可以来自下游模型内部编码器,也可以来自冻结的外部 CTC 打分器。
核心是把大表预选写成候选相关的受限后验搜索:对每个候选的记号序列,在整句的保留帧里找一段局部区间,使该区间能经 CTC 折叠得到目标序列,且累积对数后验最大。区间起止不限,由受限状态和累积分数决定,这样候选不必出现在离散假设里。
可扩展性是第二个问题。对 N 个候选逐个跑上述搜索会重复计算公共前缀。多词版本 M-VISH 用共享前缀树复用计算,并用有界剪枝限制活跃搜索空间。双向版本 Bi-MVISH 再利用反向声学证据增强鲁棒性。
VISH 的整体链路是怎样的
先看整体分工有助于跟上细节。下方图把三件事放在一起:左侧是即插即用接入,中间是候选组织,右侧是逐帧搜索。读图时先沿语音到提示再到大模型的箭头看主路径,再看候选表如何进入打分,最后看分数如何变成提示子集。
看图路径: 1. 先看左图语音到编码器再到大模型的箭头,确认 VISH 处在提示文本之前;2. 再看右上共享前缀树的节点复用关系,注意 dummy 根与分支;3. 最后看右下 t=1 到 t=2 的状态扩展,区分实线转移与空白转移
论文图 1。原论文 Figure 1::“Overview of VISH and the M-VISH search procedure.”。
图中最左侧是语音波形,向上有两条编码路径:下游 ASR 自身的编码器,以及需要时才启用的冻结外部 CTC 编码器。两者都只提供帧级后验,不改下游模型、不需要解码器访问。VISH 算法读入偏置表和后验,给每个候选打分,再经固定选择策略挑出小集合,填入提示模板后与语音表征一起送入大模型。
右上把候选的 CTC 记号序列组织成共享前缀树,每条边对应一个记号,dummy 根用于稳定局部匹配的初始化。右下展示按保留帧推进的维特比更新,每帧更新受限分数、保留分数最高的有限个前缀,并在到达终止节点时记录候选分数。这种设计把大表验证变成帧同步的树上搜索。
单个热词的声学分数如何算
单个候选的打分对象很具体。记 pt(k) 为第 t 帧取记号 k 的 CTC 后验,k 属于词表加空白符。先做峰值抑制解码 PSD:去掉空白概率大于阈值 τb 的帧,得到保留序列,长度 R 不大于原长 T。这一步只为跳过空白主导帧,减少无效传播。
对候选词 w,把它转成 CTC 记号序列 y,长度 L。VISH 在保留序列的任意局部区间上找一条路径,使其经 CTC 折叠恰好等于 y,且区间内对数后验之和最大,记为 mw。再除以该最优路径上的非空对齐帧数 Nw 得到 sw,这样可以减轻长路径累加分天然偏大的时长偏置。
\[m_{w}=\max_{\begin{subarray}{c}1\leq a\leq b\leq R\\ \boldsymbol{\pi}_{a:b}:B(\boldsymbol{\pi}_{a:b})=\mathbf{y}\end{subarray}}\sum_{r=a}^{b}\log\widetilde{p}_{r}(\pi_{r}),\qquad s_{w}=\frac{m_{w}}{N_{w}},\]上式就是该区间搜索与归一化的定义,其中 B 表示 CTC 折叠,π 为路径。实现上用空白交错的目标序列 y’ 计算前向受限分数,每帧的状态更新只允许 CTC 合法的停留、前进和跳过转移,并在每帧后重新引入根状态,使局部匹配可以在句中任意位置开始。
\[\alpha_{r}(s)=\log\widetilde{p}_{r}(y^{\prime}_{s})+\max_{q\in\mathcal{P}(s)}\alpha_{r-1}(q),\]上式中 αr(s) 是第 r 个保留帧到达交错序列第 s 个状态的最佳累积分数,P(s) 是合法前驱集合。分数依赖候选记号的后验证据,若发音特殊或拼写变体导致后验分散,分数会变弱,这是原文明确的适用边界。
CTC 后验 × 维特比搜索 × 声学支持分数: CTC 后验是每一帧对词表加空白符的概率分布;维特比搜索是在这些帧上找一条符合目标词记号序列且累积对数概率最大的路径;声学支持分数就是该最优路径的平均每非空帧得分,用来判断该热词是否真在音频里出现过。
多候选如何复用前缀并控制规模
逐个候选独立打分会把公共前缀算很多遍。M-VISH 把候选集合组织成共享前缀 trie,每个活跃节点 u 维护前缀分数向量和伴随的非空帧计数器,计数器沿取最大值的路径累加,用于最后的归一化。
每到一个保留帧,先按上节递推更新各活跃节点的状态,再取节点内最大状态值作为该前缀的置信度,只保留置信度最高的 Kp 个前缀继续扩展和建子节点。当扩展到终止节点时,用当前置信度和对齐长度更新对应候选的最优 mw 和 Nw。
\[\rho_{r}(u)=\max_{s}\alpha_{r}^{u}(s).\]上式就是前缀置信度的定义。原文给出复杂度对比:PSD 后独立打分约为 O(RNL),M-VISH 约为 O(RKpL),其中 Kp 远小于 N,最坏 R 等于 T。实验固定 Kp 为 40,τb 为 0.997。全过程不训练,只是树上的维特比计算与剪枝。
共享前缀 trie × top-Kp 剪枝: 共享前缀 trie 把所有候选的 CTC 记号序列按公共前缀拼成一棵树,同一前缀的维特比状态只算一次;top-Kp 剪枝是每帧只保留置信度最高的 Kp 个前缀继续扩展,两者搭配把随候选数线性增长的验算量压到随保留前缀数增长。
反向证据为什么能补上弱首音
前向搜索从词首开始累积,若候选开头声学弱或模糊,整条路径分数会被拉低,即使词尾很清晰也难以挽回。Bi-MVISH 的做法是对称的:把保留后验序列和每个候选记号序列同时反转,建反转 trie,再跑 1 次同样的 M-VISH 搜索。
因为 CTC 折叠与序列反转可交换,同时反转两边仍保持合法对齐与转移规则。把反向终止分数映射回原候选,得到后向分,再与前向分平均作为双向分。这种平均不引入新训练,只是利用了同一段音频的互补方向证据。
\[s_{w,\mathrm{bi}}=\frac{1}{2}\left(s_{w,\mathrm{fwd}}+s_{w,\mathrm{bwd}}\right).\]上式即双向平均。代价是 M-VISH 本是帧同步的,而 Bi-MVISH 在段内用了未来帧,因此用严格帧级流式换取段级验证更稳。何时值得开双向,要看对延迟和首音弱词的容忍度。
前向验证 × 反向验证: 前向验证按时间正向在保留帧上找目标词的最佳区间;反向验证把保留帧序列和目标记号序列同时反转后再做一次同样的搜索,相当于从词尾的清晰部分锚定;两者平均后,首音弱但尾音清晰的词仍能得到合理分数。
无训练在这里具体指什么计算
本研究没有训练或微调任何任务相关或检索模型。所谓训练无关是指验证阶段直接使用现成的预训练 CTC 打分器并冻结它,不做额外学习。下游的 Whisper-medium 与 Prompt-SLAM-ASR 也不为本文修改。
实际执行的计算是推理与搜索:用冻结编码器对语音做 1 次声学前向得到帧后验,经 PSD 过滤空白帧,再在共享前缀树上做受限维特比更新、剪枝与终止记录,最后按分数排序选 Top-10 填入固定提示。若用内部后验则无需额外编码器;若内部不可用而启用外部打分器,则多 1 次声学编码开销。
需要补的细节是原文未报告梯度路径与参数更新,因为本来就没有更新。不能从编码器名字猜实现,也不能把无训练理解成确定性输出,后验本身仍随语音与模型而变。
具体执行按语音到提示的顺序展开。输入是待识别语音和候选热词表,输出是填入提示的紧凑子集。第一步由可用的编码器给出帧级 CTC 后验,内部后验来自下游系统自带编码器,外部后验来自冻结的 SenseVoice-Small。原文在全部数据集上固定前缀预算与空白阈值,不随任务调整,这也是即插即用含义的一部分。
第二步是对后验做峰值抑制解码过滤。空白概率高于阈值的帧被去掉,只保留有内容可能的帧按时间排成序列。这样做是为了减少空白主导帧上的无效传播和计算量,保留的序列直接作为后续受限搜索的时间轴。若保留帧数为零,候选则得不到有效支撑。
第三步是在共享前缀树上做帧同步搜索。候选热词先按 CTC 词元切分并组织成前缀树,有相同前缀的候选共用同一条路径。每个活跃节点保存前缀得分向量和记录非空白对齐帧数的累加器,每帧按受限维特比公式更新,到达终止节点时更新对应候选的最佳得分与支撑长度。每帧只保留置信最高的有限个前缀继续扩展,根的子节点每帧重新加入以允许局部匹配在 utterance 内多处开始。候选得分是累积路径分除以非空白支撑帧数,用来减轻长路径求和带来的时长偏置。双向版本把保留序列与候选序列同时反向再做 1 次同样的搜索,前后向得分取平均,以补足起始发音不清时的证据。
最后一步是按得分选出 Top-10 候选,填入同一句英文提示后交给下游模型转写。比较条件是固定选 10 个和固定提示语,下游模型结构和参数都不动,因此下游偏置词错误率的变化可以对应到预选质量。内部后验省去额外编码开销,外部打分器在原文实验中验证准确率更高,两者的取舍是计算代价与验证效果之间的权衡。
在什么数据与系统上验证
评测覆盖 5 组条件:STOP1 与 STOP2 是英文命名实体检索集,分别含人名与地名查询,只做预选评测;AISHELL-1-NE 是中文命名实体偏置集,做预选与下游识别;Libri-clean-2k 与 Libri-other-2k 是 LibriSpeech 的干净与困难集,每句配固定 2000 词候选表,做预选与下游识别,其中 other 更难。
偏置表按各自基准协议构造。LibriSpeech 稀有词排除训练最频 5000 词,每句表含全部真值稀有词加随机干扰,相同种子表在方法间共享。延迟分析另测 100、500、1000、2000 4 种表大小。
系统用 Whisper-medium 与 Prompt-SLAM-ASR,后者发布模型不支持中文故只测英文。冻结的 SenseVoice-Small 为两者提供帧后验与分词器。GLCLAP、M-VISH、Bi-MVISH 共享固定 Top-10 选择与同一英文提示,下游比较在相同提示预算下进行。候选搜索延迟从已有语音表示或后验到候选分数计时,不含声学表示提取。
预选分数的可分性提升了多少
先看预选本身。比较问题是:在相同候选表与相同后验来源下,目标与干扰项的分数是否更易分开。指标 Best-F1 是扫分数阈值能取到的最大 F1,越高越好,与部署时固定选几个无关。基线是复现的已学习检索 GLCLAP,以及原文献在 AISHELL-1-NE 上报告的结果。
| Method | STOP1 | STOP2 | A1-NE | L-clean-2k | L-other-2k |
|---|---|---|---|---|---|
| GLCLAP [15]∗ | 80.5 | 81.2 | 96.6 | 90.5 | 82.4 |
| M-VISH | 83.1 | 92.9 | 97.5 | 94.4 | 87.7 |
| Bi-MVISH | 83.1 | 93.8 | 97.6 | 95.3 | 88.8 |
表中 M-VISH 相对复现 GLCLAP 在 5 个基准上绝对提升 0.9 到 11.7 个百分点,STOP2 与 Libri-other-2k 增益较大。Bi-MVISH 在其中 4 组上再小幅提升,最高约 1.1 个百分点,且无额外检索训练。AISHELL-1-NE 上三者接近 97% 附近,区分度有限。CTC-Assistant 因其逐词匹配流程不直接给出全表阈值分数,未列入该表,这是口径限制而非胜负结论。
Best-F1 × Top-10 下游评测: Best-F1 是在候选分数上扫阈值能取到的最大 F1,衡量目标与干扰项的分数可分性,与部署时固定选几个无关;Top-10 下游评测是固定每句只把分数最高的 10 个词写入提示再看字错率或词错率,衡量在共享提示预算下预选对识别的实际效用。
更好的预选是否变成更低的偏置错
再看下游识别。比较问题是:在同样 Top-10 提示预算下,更好的预选是否降低偏置词错误,同时不推高总体错误。LibriSpeech 报告词错率与偏置词错率,AISHELL-1-NE 报告字错率与偏置字错率,都是越低越好。基线含无偏置、真值偏置的上限参考,以及 CTC-Assistant、GLCLAP、BR-ASR 的可运行策略。
| ASR System | L-clean-2k | L-other-2k | A1-NE |
|---|---|---|---|
| Whisper-medium [22] | |||
| +No Bias | 3.1/14.0 | 7.1/29.9 | 7.3/21.3 |
| +GT Bias | 2.2/6.2 | 5.6/15.9 | 4.3/7.4 |
| +CTC-Assistant [30]∗ | 2.4/7.8 | 6.2/18.8 | 4.7/9.9 |
| +GLCLAP [15]∗ | 2.4/7.6 | 6.1/18.2 | 4.6/9.1 |
| +M-VISH | 2.4/7.5 | 6.0/18.3 | 4.4/7.8 |
| +Bi-MVISH | 2.3/6.9 | 5.9/17.3 | 4.4/7.6 |
| Prompt-SLAM-ASR [30] | |||
| +No Bias | 2.0/9.3 | 4.0/20.0 | N/A |
| +GT Bias | 1.2/2.8 | 2.4/5.8 | N/A |
| +BR-ASR [8] | 1.4/4.2 | 3.1/9.3 | N/A |
| +CTC-Assistant [30]∗ | 1.4/4.4 | 3.2/10.0 | N/A |
| +GLCLAP [15]∗ | 1.5/4.8 | 3.2/10.7 | N/A |
| +M-VISH | 1.4/4.2 | 3.1/8.7 | N/A |
| +Bi-MVISH | 1.4/3.7 | 3.1/8.0 | N/A |
上表完整呈现原文下游结果,斜杠前后分别为总体与偏置错误。可见 Bi-MVISH 在 Whisper 上把偏置错从复现 GLCLAP 的 7.6% 降到 6.9%,other 从 18.2% 降到 17.3%,中文偏置字错从 9.1% 降到 7.6%;在 Prompt-SLAM-ASR 上对应从 4.8% 到 3.7%、从 10.7% 到 8.0%。总体错率未被推高。真值偏置仍明显更好,说明预选仍有差距,不能把真值上限当可部署增益。
后验来源与双向各带来什么代价
先看后验来源的取舍。比较问题是:用下游自带的内部后验,还是另加冻结外部编码器。指标仍是 Best-F1 与词错率,条件是 Prompt-SLAM-ASR 加每句 2000 候选。外部是 SenseVoice-Small,内部是 WavLM-Large,前者多 234M 参数,后者不增加额外编码器。
| Encoder | Test set | Best-F1 | WER/B-WER |
|---|---|---|---|
| SenseVoice-Small (external) | Clean | 95.3 | 1.4/3.7 |
| SenseVoice-Small (external) | Other | 88.8 | 3.1/8.0 |
| WavLM-Large (internal) | Clean | 94.7 | 1.4/3.9 |
| WavLM-Large (internal) | Other | 87.8 | 3.0/8.6 |
表中外部在干净集 Best-F1 为 95.3%,other 为 88.8%,略高于内部的 94.7% 与 87.8%,偏置错也略低。代价是多 1 次外部声学前向。若内部后验可用且预算紧,内部是更省的选项;若追求验证精度,外部更强。这验证了即插即用的灵活性,但也说明精度与计算量的权衡真实存在。
再看延迟。比较问题是候选搜索耗时随表大小如何增长,计时不含声学提取,同卡单样本测平均每句毫秒数。
| Bias List Size | 100 | 2,000 |
|---|---|---|
| CTC-Assistant [30] | 46 | 817 |
| M-VISH | 71 | 203 |
| Bi-MVISH | 131 | 400 |
在 2000 词时 M-VISH 为 203 ms,相对 CTC-Assistant 的 817 ms 降低约 75.2%,Bi-MVISH 为 400 ms,仍低约 51.0%。GLCLAP 在该点仅 78 ms 更快,但其 Best-F1 低于 VISH。M-VISH 的耗时随表增大增长平缓,这与共享前缀复用和有界剪枝的预期一致。
读双向增益的定性解释可看下图。图前任务是:先确认正反向各在何处激活,再判断反向是否为弱首音补上了证据。
看图路径: 1. 对比左列 liddy 正反向两幅图的激活斜线位置;2. 对比右列 smolny 正向弱证据与反向强激活的差异;3. 注意黄色虚线标出的词边界与底部空白符行的亮度
论文图 2。原论文 Figure 2::“Forward and backward Bi-MVISH alignments for “liddy” (left) and “smolny” (right).”。
图中左列 liddy 正反向都有清晰的斜向激活带,说明两方向都能锚定;右列 smolny 正向证据弱,反向在词尾对应区出现更强的激活,平均后弥补了前向低估。黄色虚线为词边界,底部亮带多为空白符。这只是两个词的可视化解释,不能推广为所有弱首音词都有同样幅度增益。
哪些情况可能验不准
验证依赖候选记号的后验证据。若发音特殊、拼写变体或分词与实际发音不一致,后验分散会导致分数偏低,原文已提示这一边界。此时双向平均也只能部分补偿,不能保证找回。
PSD 阈值与 Kp 都是固定值,全数据集共用 0.997 与 40。阈值过高会丢掉有用帧,过低则保留过多空白帧增加搜索;Kp 过小可能剪掉真目标前缀,过大则失去加速意义。原文未给出这两项的灵敏度曲线,换语种或换编码器时需重验。
评测上 STOP 只做预选不看下游,中文只在一个偏置集上验证,Libri 每句表必含真值且干扰随机采样,与真实用户词表的分布仍有距离。延迟结论排除声学提取,且为单样本同卡测量,并发或流式部署下的相对关系需另测。
复现第一步要准备什么
先准备语音、固定候选表与冻结 CTC 编码器。Libri 按排除最频 5000 词定稀有词,每句 2000 词表用相同种子共享;STOP 与 AISHELL 按基准协议来。编码器用 SenseVoice-Small 或下游自带 CTC,后验与分词器要与打分侧一致。
再实现 PSD、trie 构建与帧同步搜索。关键超参数是 Kp 为 40、τb 为 0.997,选择 Top-10,提示模板为英文固定句。候选记号化必须与 CTC 词表对齐,dummy 根每帧重引入,终止节点记录最优分与对齐长度,最后按归一化分排序。
评测分两层:先扫阈值算 Best-F1 看可分性,再固定 Top-10 跑下游看总体与偏置错误。延迟只计从后验到分数的时间。本篇未发现可验证的作者开源资源,不得声称代码模型数据已公开,复现需自行实现。
什么时候值得尝试这种预选
当提示式系统必须面对几百到几千的动态热词,且不希望为预选另训检索模型,又能拿到帧级 CTC 后验时,这种后验级验证值得尝试。它不要求候选出现在离散假设里,对假设漏检更友好,且通过共享前缀与剪枝控制了大表开销。
若首音弱词较多且能接受段级非严格流式,可再开双向;若延迟预算极紧且已有内部后验,可先用内部单向版本。仍需补的验证是阈值与剪枝在新编码器上的稳定性、真实用户词表分布下的表现,以及含声学提取的端到端延迟。总体上,证据支持预选精度与下游偏置错的同步改善,但幅度和代价都随数据、后验来源与表大小而变。
📎 论文与评分元数据
排名:前25% | 文档类型:方法研究 | arXiv 原文
⚖️ 评分明细
评分属于系统判断,不是论文实验结果;八维数值与总分见页首,原始审计记录保留在后端。
评分规则:type-aware-v1
评分模型:muse-spark-1.3-contributor
评分请求协议:openai_responses

