语音识别里有个反复出现的痛点:模型听写日常句子很准,可一碰到人名、品牌、专业术语这些低频词就翻车——把「周杰伦」写成「周结伦」,把「阿司匹林」写成「阿斯匹林」。热词版 Paraformer 就是冲着这个问题来的。要讲清它,得先讲 Paraformer 本身为什么特别。

Paraformer:一次把整句说完

传统端到端语音识别的解码器多是**自回归(AR)**的:一个字一个字往外蹦,第 t 个字要等第 t−1 个字出来、并以它为条件。准是准,但天生串行,长句子慢。

Paraformer 是阿里达摩院(FunASR)提出的非自回归(NAR)模型:它一次并行地输出整句所有字,不必逐字等待,推理快得多。可 NAR 有个绕不过的难题——既然不逐字生成,模型怎么知道这段语音总共该输出几个字、每个字对齐到哪几帧?

它的答卷是 CIF 预测器(连续积分–发放,Continuous Integrate-and-Fire):逐帧累加一个声学权重,累积值一旦达到阈值就「发放」一个声学向量,同时重新归零、继续累加。发放了几次,就输出几个字。这样一来,「输出多少字」和「帧到字的对齐」这两件 NAR 最头疼的事,就被这个积分–发放的机制一并解决了。

Paraformer 流水线:语音特征经 Encoder、CIF 预测器、Sampler、并行 Decoder 输出整句;下方 CIF 逐帧累加权重达阈值即发放,切出字1、字2、字3

图 1:Paraformer 的非自回归流水线。CIF 预测器负责预测字数与对齐,Decoder 一次性并行输出整句。

流水线里还有个 Sampler:训练时它在「声学向量」和「真实目标字的嵌入」之间做采样混合,把一部分目标语境喂给解码器,弥补 NAR 因为不逐字生成而偏弱的语言建模能力。这几件东西合起来,让 Paraformer 在保持并行速度的同时,识别质量能对得起实用要求。

热词分支:不重训,也能记住定制词

回到开头的痛点。低频词认不准,根本原因是它们在训练数据里出现得太少,模型没学够。但你不可能为每个客户的人名词表都重训一遍模型——热词定制要做的,就是让你在推理时临时传入一份词表,把识别结果往这些词上「偏一偏」,无需动模型权重。

机制上,热词版(如 SeACo-Paraformer / Paraformer-Contextual)在主链路旁挂了一条热词分支

  1. 你传入的热词表,先经过一个热词编码器(字或 BPE 级别的嵌入)变成一组热词向量
  2. 一个偏置注意力模块,让解码状态去「注意」这些热词向量——当某段语音的读音和某个热词高度匹配时,就给对应的字加上偏置,把输出分布往热词方向拉。

于是同一段音频,无热词时被写成读音相近的常见字,有热词时就能被正确召回。

热词表经热词编码器变成热词向量,输入偏置注意力;解码隐状态在此对热词做注意力并加偏置,得到加偏置的输出分布。无热词写成「周结伦/阿斯匹林」,有热词正确写成「周杰伦/阿司匹林」

图 2:热词分支给读音匹配的定制词加偏置。SeACo 这类方案还会用专门的偏置解码器和热词损失,让召回更稳。

代价:别把偏置开太猛

热词不是白给的。偏置加得越狠,误触发的风险越高——一段本该是普通词的语音,只因读音沾点边,就被硬拽成了热词。词表塞得越大、越是充斥读音相近的词,这种「过度纠正」越明显。

热词的偏置权重与阈值需要按场景调:会议转写里塞进上百个人名,和只加三五个品牌词,合适的强度完全不同。上线前务必在真实音频上验证召回和误触发的平衡,别只看热词命中率。

落到工程上

FunASR 直接提供了带热词能力的 Paraformer 模型,推理时把 hotword 词表传进去即可,不需要自己搭这条分支。它在会议纪要(人名、公司名)、医疗法律(专业术语)、客服(产品型号)这类领域词密集的场景里尤其有用——这些正是通用模型最容易栽跟头、而定制价值又最高的地方。