声学模型和语言模型各交一份分,解码器才是那个"拧螺丝"的人:它在词汇世界里一层层铺出可能的状态、音素、词的网络,沿网络找一条总分最高的路。本节先把解码器到底要找什么、面对的空间有多大讲透,再引出"为什么这事不能硬搜"。
解码器不是模型,它是搜索器。它收三路进料:声学模型给的逐帧状态打分、语言模型给的词序列先验、发音词典给的词到音素的映射。它的产出是唯一一句在总分上遥遥领先的文字序列。三路各司其职,解码器把他们按权重对齐、求和、比大小,最后放行最高分。
光有词典,搜索空间还只停留在"词的候选"层面。真正铺开要嵌套三层:词被词典展开成音素串,每个音素进一步拆成若干 HMM 状态,状态与状态之间由转移概率连接。于是整句话的可能性画成一张巨大的有向图,图的节点是状态,边是状态转移,而路径从头走到尾,就对应一条完整的候选词序列。
这张图的规模有多夸张?一个词开头能接的另一串,是被词典锁定的;而所有词、所有读法、所有连读之下的路径组合,是天文数字。穷举搜一遍,再快的机器也扛不住。所以解码从来不是"把所有路径都试一遍",而是留一手聪明的手段,把搜索空间尽量剪小,只把注意力留给最像的候选。这也正是下一节维特比与束搜索登场的理由。
大量候选汇成一个状态网,解码器就是在这个网上找一条最优路径。
把三样东西放进一张图里搜索,并不是把三份结果简单拼起来。真正关键的是:每一处都要用上"一个状态该接哪个状态""哪些词能连成句"这类全局信息,搜索时才不会在局部自嗨。一个局部很响亮的音,若它从句式上就接不进这一段,就该被压下去。此即"拧"的含义——把声学、语言、词典三股力拧成一股绳,让整句的可能性去赢过局部的诱惑。
嘴上说"天文数字"不够,算个简单的数就有力。设想一句话里某个位置有可能接的词有 100 个,每个词又可能各自往后展开若干种三音素读法(这里先忽略更细的差别、只按词计数)。若一句话由 4 个这样的位置组成,且每个位置平均有 100 个候选词,保守粗略估计候选词序列就有 100 的 4 次方,也就是约一亿种可能。若句子更长、词典更宽,数字会再往上翻几番。
把"候选词数×句长"对搜索压力的涨势摆出来,穷举的无力感就更直白了:
| 句长(词) | 每位置候选词 | 候选序列量级(近似) | 穷举现实性 |
|---|---|---|---|
| 4 | 10 | 1 万 | 尚可 |
| 4 | 100 | 100 万~1 亿 | 开始吃力 |
| 8 | 100 | 10 的 16 次方 | 完全不现实 |
每一列每加一格,都指数级放大,这正是"必须剪枝不能穷举"的数字底气。解码器的全部聪明,就是在这条指数曲线上砍出一小路,只让最像的候选存活到终点。
想把解码器看得更准,得先摆正它"不是又一个模型"的定位。它是拿着声学体察、语言语感、词典地图三条线索的搜查官,在词图里一寸寸比对,绝不放跑任何一条全局约束。这顺带解释了为什么许多"识别错"其实跟模型无关——同一条声音,λ 没调好、束宽选太窄,解码阶段就会亲手把听对了的话剪掉。于是你在后面调优时,要时刻留一只眼盯着解码这层,别一上来就怪声学或语言模型,那常是一笔冤枉账。
前面算的"100 的 4 次方"只是为让你领会量级,真到工程里,搜索空间并不是百分之百展开的——词典把合法的词首尾锁死,语言模型又把"接得上话"的路径优先,真正被搜索铺开的只是"又像音、又像话"的那一小块。这也是为什么解码器明明面对天文数字的候选,运行起来却常常只有几十毫秒:不是它在硬扛天文数字,而是三路约束早在搜索前就替它砍掉了一大半。理解这点,你就明白"词典、语言模型、束宽"三个角色在解码里缺一不可——它们联手决定的是"这棵树到底长多密、多深"。
顺着这个思路,解码的调优从不玄学:想更快,就收紧束宽、抬高剪枝阈值;想更准,就放大束宽、加长句约束;想兼顾,就用"小束宽出候选、大束宽精修"的两轮法。它不像训练那样要动几十亿参数,全靠几个整型参数,却最讲求"问题出在哪一路约束不够"。常见症状和下手处,用一张小表就能对齐:
| 症状 | 多半是哪个约束缺位 | 先动哪把剪子 |
|---|---|---|
| 常见词都准、生僻专名乱 | 词典没覆盖新词 | 补词典、放宽候选 |
| 长句后半总是跑偏 | 语言约束弱 / 束宽太窄 | 上调 λ、放大束宽 |
| 同音词来回跳 | 语言先验不足 | 换领域模型、扫 λ |
把这棵"约束剪出来的树"想明白,你在第 5 章面对任何识别降级,都能一眼看出该动哪把剪子,而不至于把所有锅都甩给模型——把解码器这层摸透,才是整套流水里回报率最高也最容易被低估的一笔投入。
总有人纠结状态、音素、词谁套谁。其实把它想成一把从抽象到具体的下降梯子最省事:最上头是一句候选词,往下落一层是词展开的音素串,再落一层才是每个音素拆成 HMM 状态去对应时间。解码器既不从上头直接跳到底,也不从底下往上爬,而是让三条线索在这把梯子里汇聚——语言把词序锁紧、词典把词到音的通道铺严、声学给每一级状态打分。想通了这把梯子,后面读任何架构都不会再被哪一层管什么绕晕。
空间地图铺好了,下一节以两个搜索算法上场:维特比与束搜索,谁负责全局谁负责快速。