杂记

希望多年以后,看到之前记录的文章,会有所感触。

0%

3. 路由规则

这里主要介绍语音识别引擎的端云协同机制。在实际手机端/车机端语音识别产品具有用户量庞大的特点,这意味着,如果所有的音频数据都调用云侧LLM进行推理,那么占用的显卡资源将是巨大的。为了给企业降低成本的同时保证用户的体验,端云协同就是不可或缺的。
端云协同包括两级,L1:端侧和云侧的路由。L2:云侧的二级路由(使用LLM或者encoder-decoder(ED)的结果,不使用LLM)。现在主流的做法L1是使用是否存在网络作为一个硬性的过滤,因为绝大多数手机用户的手机的计算资源是及其有限的,因此对于L1基本没有其他软性过滤的条件,甚至很多软件不会提供边缘端计算的能力。因此主要的降低计算量的地方在于L2这一层次的路由,在保证字准的同时,要最大化的降低LLM调用的次数。
要减少LLM调用的次数,首先就想到:什么情况下ED的结果足以支撑起用户的需求呢?顺着这个思路向下,不难理出两点:1.ED结果足够好。2.不适合LLM处理。针对第一种情况,即 ED 的识别结果已经足够可靠,此时即使进一步调用 LLM,能够获得的字准提升也十分有限,反而会额外增加推理成本和响应时延。因此,L2 路由的核心问题之一,可以进一步转化为:如何在不知道真实转写结果的情况下,提前判断当前 ED 输出是否可信。

最直接的思路是利用 ED 模型自身输出的置信度信息。例如,可以统计 token 级概率、句级平均置信度、最低 token 置信度以及候选序列之间的得分差异。当模型对当前语音具有较高把握时,其输出概率通常更加集中,最优候选与次优候选之间也会存在较明显的分数间隔,此时可以直接返回 ED 结果,而无需继续调用 LLM。相反,当多个候选序列的得分十分接近时,说明 ED 模型对当前语音存在较大的识别不确定性,此类样本更适合交由能力更强的 LLM 进一步处理。

然而,仅依赖最终解码结果的置信度并不足以完整描述一次识别过程中的不确定性。对于 CTC 或 CTC-Attention 类语音识别模型,还可以进一步利用声学模型在帧级别的输出分布构造不确定性特征。例如,CTC 每一帧都会输出各 token 的后验概率分布,当概率集中在少数几个 token 上时,说明当前声学判断相对确定;而当概率分布较为均匀时,则意味着模型对该帧存在较强的不确定性。因此,可以进一步统计 CTC mean entropy、CTC max entropy 等指标,用于描述整段语音在声学层面的识别难度。

除了概率分布本身,还可以关注识别结果在时间维度上的稳定程度。对于流式 ASR,模型会随着新音频帧不断到来持续更新 partial hypothesis。如果某一段语音的中间识别结果频繁发生修改,通常意味着模型对该段语音的判断并不稳定。因此,可以引入 partial hypothesis revision rate、longest stable prefix ratio 等指标。前者用于统计中间识别结果的修改频率,后者用于衡量已经连续保持稳定的前缀长度占比。通常而言,revision rate 越高、stable prefix ratio 越低,说明当前识别结果的不确定性越大。

类似地,还可以直接从 CTC 输出序列的变化情况中提取特征。例如,统计相邻帧之间 top1 与 top2 token 的排序交叉次数,即 top1/top2 crossing rate;或者统计非 blank token 在连续帧之间发生改变的频率,即 nonblank token flip rate。当这些指标较高时,意味着模型在多个候选 token 之间反复摇摆,可以认为当前声学证据并不充分。相比单纯使用最终句级置信度,这类动态特征能够更直接地描述模型在整个解码过程中的“犹豫程度”。

因此,对于“ED 结果是否足够好”这一问题,可以将特征大致分为三个层次:第一类是最终结果置信度特征,例如平均 token probability、最小 token probability、N-best score margin 等;第二类是CTC 帧级不确定性特征,例如 mean entropy、max entropy、top1/top2 crossing rate 和 nonblank token flip rate;第三类是流式识别稳定性特征,例如 partial hypothesis revision rate 和 longest stable prefix ratio。通过这些特征,可以从不同角度刻画当前 ED 输出的可靠程度。

第二种情况则是 当前样本本身并不适合继续交给 LLM 处理。这里的核心并不是 ED 结果一定正确,而是即使调用 LLM,也很难获得足够的收益,甚至可能导致识别结果变差。例如,对于极短语音、单字或简单命令词,由于上下文信息非常有限,LLM 能够利用的语言信息较少;对于大量数字、字母、专有名词以及无明显语义关联的内容,LLM 还可能由于自身语言先验过强而主动修改原本正确的识别结果。在严重噪声、多人重叠语音或者非语音输入等情况下,如果前端声学信息本身已经严重缺失,LLM 同样很难恢复真实内容,并可能产生额外的幻觉结果。

因此,L2 路由实际上并不是简单地判断“ED 对不对”,而应当判断:

当前样本调用 LLM 后,是否能够带来足够大的预期收益。

从这个角度来看,可以将每条语音看作一个决策样本。对于第 ii 条语音,分别获得 ED 输出结果 YEDiY_{ED}^{i} 和 LLM 输出结果 YLLMiY_{LLM}^{i},并利用真实标注 YGTiY_{GT}^{i} 计算二者的字错误率:

WEREDi=WER(YEDi,YGTi)WER_{ED}^{i} = WER\left(Y_{ED}^{i}, Y_{GT}^{i}\right)

WERLLMi=WER(YLLMi,YGTi)WER_{LLM}^{i} = WER\left(Y_{LLM}^{i}, Y_{GT}^{i}\right)

进一步定义调用 LLM 所带来的收益:

Gaini=WEREDiWERLLMiGain_i = WER_{ED}^{i} - WER_{LLM}^{i}

GainiGain_i 较大时,说明该样本调用 LLM 可以明显改善识别结果,应当路由至 LLM;当 Gaini0Gain_i \leq 0 或收益非常小时,则说明 LLM 对该样本没有明显帮助,此时直接采用 ED 结果更加合理。

这样一来,L2 路由问题就可以进一步建模为一个二分类问题或收益预测问题。模型输入可以由 ASR 解码过程中提取的多种特征组成,例如音频时长、SNR、ED confidence、CTC entropy、N-best margin、token flip rate、revision rate 和 stable prefix ratio 等;模型输出则可以是当前语音是否需要调用 LLM,或者直接预测调用 LLM 后可能获得的字准收益。

在实际工程中,仅以识别准确率作为优化目标仍然不够,因为端云协同本质上还需要同时考虑精度、计算成本和时延。假设一次 LLM 调用的平均成本为 CLLMC_{LLM},则可以将路由优化目标描述为:

minP(LLM)CLLM\min \quad P(\mathrm{LLM}) \cdot C_{LLM}

同时约束整体识别性能满足:

WERrouteWERtargetWER_{route} \leq WER_{target}

也就是说,在保证系统整体字错误率不超过预定阈值的前提下,尽可能降低 LLM 的调用比例。这实际上才是 L2 路由真正需要解决的问题:不是单纯追求最高字准,而是在基本不损失用户体验的前提下,用尽可能少的 LLM 调用获得接近全量 LLM 的识别效果。

在具体系统实现时,可以采用“硬规则过滤 + 软路由模型”的两阶段策略。首先使用一些确定性较强的规则对明显无需调用 LLM 的样本进行过滤,例如极短语音、非语音片段、特定命令词或者部分特殊格式内容;随后,将剩余样本输入一个轻量级路由模型,根据 ED 置信度、CTC 不确定性以及流式稳定性等特征预测 LLM 的潜在收益。当预测收益高于一定阈值时调用 LLM,否则直接返回 ED 结果。

其中,路由阈值可以根据实际业务需求进行动态调整。例如,当服务器 GPU 负载较低时,可以适当降低阈值,让更多边界样本进入 LLM,以获得更高的整体识别准确率;而当 GPU 负载较高或者业务处于流量高峰时,则可以提高阈值,只将最困难、最有可能从 LLM 中获益的语音送入 LLM。这样,端云协同就不再是一个固定的二分类策略,而可以进一步演化为一个结合识别难度、LLM 收益、实时负载和推理成本的动态资源调度问题。

最终,整个端云协同链路可以概括为:

用户语音 → L1 端云路由 → 云侧 ED 推理 → L2 难度/收益评估 → ED 直接输出或调用 LLM → 最终识别结果。

其中,L1 解决的是“这条语音是否需要进入云侧”,而 L2 解决的是“进入云侧之后,这条语音是否值得继续消耗 LLM 计算资源”。相比 L1,L2 具有更大的优化空间,也是整个端云协同系统降低 GPU 资源消耗、控制推理成本,同时维持识别准确率的核心环节。
下一篇文章将会详细介绍当前主流的方法,以及未来我打算采用的方法。

嘿嘿嘿,学校食堂太贵了,我快吃不饱饭了。