语音识别里有个反复出现的痛点:模型听写日常句子很准,可一碰到人名、品牌、专业术语这些低频词就翻车——把「周杰伦」写成「周结伦」,把「阿司匹林」写成「阿斯匹林」。热词版 Paraformer 就是冲着这个问题来的。要讲清它,得先讲 Paraformer 本身为什么特别。
Paraformer:一次把整句说完
传统端到端语音识别的解码器多是**自回归(AR)**的:一个字一个字往外蹦,第 t 个字要等第 t−1 个字出来、并以它为条件。准是准,但天生串行,长句子慢。
Paraformer 是阿里达摩院(FunASR)提出的非自回归(NAR)模型:它一次并行地输出整句所有字,不必逐字等待,推理快得多。可 NAR 有个绕不过的难题——既然不逐字生成,模型怎么知道这段语音总共该输出几个字、每个字对齐到哪几帧?
它的答卷是 CIF 预测器(连续积分–发放,Continuous Integrate-and-Fire):逐帧累加一个声学权重,累积值一旦达到阈值就「发放」一个声学向量,同时重新归零、继续累加。发放了几次,就输出几个字。这样一来,「输出多少字」和「帧到字的对齐」这两件 NAR 最头疼的事,就被这个积分–发放的机制一并解决了。
流水线里还有个 Sampler:训练时它在「声学向量」和「真实目标字的嵌入」之间做采样混合,把一部分目标语境喂给解码器,弥补 NAR 因为不逐字生成而偏弱的语言建模能力。这几件东西合起来,让 Paraformer 在保持并行速度的同时,识别质量能对得起实用要求。
热词分支:不重训,也能记住定制词
回到开头的痛点。低频词认不准,根本原因是它们在训练数据里出现得太少,模型没学够。但你不可能为每个客户的人名词表都重训一遍模型——热词定制要做的,就是让你在推理时临时传入一份词表,把识别结果往这些词上「偏一偏」,无需动模型权重。
机制上,热词版(如 SeACo-Paraformer / Paraformer-Contextual)在主链路旁挂了一条热词分支:
- 你传入的热词表,先经过一个热词编码器(字或 BPE 级别的嵌入)变成一组热词向量;
- 一个偏置注意力模块,让解码状态去「注意」这些热词向量——当某段语音的读音和某个热词高度匹配时,就给对应的字加上偏置,把输出分布往热词方向拉。
于是同一段音频,无热词时被写成读音相近的常见字,有热词时就能被正确召回。
代价:别把偏置开太猛
热词不是白给的。偏置加得越狠,误触发的风险越高——一段本该是普通词的语音,只因读音沾点边,就被硬拽成了热词。词表塞得越大、越是充斥读音相近的词,这种「过度纠正」越明显。
热词的偏置权重与阈值需要按场景调:会议转写里塞进上百个人名,和只加三五个品牌词,合适的强度完全不同。上线前务必在真实音频上验证召回和误触发的平衡,别只看热词命中率。
落到工程上
FunASR 直接提供了带热词能力的 Paraformer 模型,推理时把 hotword 词表传进去即可,不需要自己搭这条分支。它在会议纪要(人名、公司名)、医疗法律(专业术语)、客服(产品型号)这类领域词密集的场景里尤其有用——这些正是通用模型最容易栽跟头、而定制价值又最高的地方。
讨论
评论
还没有评论,来留下第一条讨论吧。