4.1 解码器的职责与搜索空间


4.1 解码器的职责与搜索空间

声学模型和语言模型各交一份分,解码器才是那个"拧螺丝"的人:它在词汇世界里一层层铺出可能的状态、音素、词的网络,沿网络找一条总分最高的路。本节先把解码器到底要找什么、面对的空间有多大讲透,再引出"为什么这事不能硬搜"。

本节目标

  1. 能说出解码器整合的三路输入及其分工。
  2. 能描述状态-音素-词三层嵌套的搜索结果,说清空间为何巨大。
  3. 能解释穷举为什么不可行,并引出束搜索的必要性。
  4. 能理解解码结果与原材料的对应关系。

一、三路进料,一条出路

解码器不是模型,它是搜索器。它收三路进料:声学模型给的逐帧状态打分、语言模型给的词序列先验、发音词典给的词到音素的映射。它的产出是唯一一句在总分上遥遥领先的文字序列。三路各司其职,解码器把他们按权重对齐、求和、比大小,最后放行最高分。

二、搜索空间:一层层铺开的词图

光有词典,搜索空间还只停留在"词的候选"层面。真正铺开要嵌套三层:词被词典展开成音素串,每个音素进一步拆成若干 HMM 状态,状态与状态之间由转移概率连接。于是整句话的可能性画成一张巨大的有向图,图的节点是状态,边是状态转移,而路径从头走到尾,就对应一条完整的候选词序列。

这张图的规模有多夸张?一个词开头能接的另一串,是被词典锁定的;而所有词、所有读法、所有连读之下的路径组合,是天文数字。穷举搜一遍,再快的机器也扛不住。所以解码从来不是"把所有路径都试一遍",而是留一手聪明的手段,把搜索空间尽量剪小,只把注意力留给最像的候选。这也正是下一节维特比与束搜索登场的理由。

大量候选汇成一个状态网,解码器就是在这个网上找一条最优路径。

三、为什么要"拧"而不是"拼"

把三样东西放进一张图里搜索,并不是把三份结果简单拼起来。真正关键的是:每一处都要用上"一个状态该接哪个状态""哪些词能连成句"这类全局信息,搜索时才不会在局部自嗨。一个局部很响亮的音,若它从句式上就接不进这一段,就该被压下去。此即"拧"的含义——把声学、语言、词典三股力拧成一股绳,让整句的可能性去赢过局部的诱惑。

四、组合爆炸到底有多爆

嘴上说"天文数字"不够,算个简单的数就有力。设想一句话里某个位置有可能接的词有 100 个,每个词又可能各自往后展开若干种三音素读法(这里先忽略更细的差别、只按词计数)。若一句话由 4 个这样的位置组成,且每个位置平均有 100 个候选词,保守粗略估计候选词序列就有 100 的 4 次方,也就是约一亿种可能。若句子更长、词典更宽,数字会再往上翻几番。

把"候选词数×句长"对搜索压力的涨势摆出来,穷举的无力感就更直白了:

句长(词) 每位置候选词 候选序列量级(近似) 穷举现实性
4 10 1 万 尚可
4 100 100 万~1 亿 开始吃力
8 100 10 的 16 次方 完全不现实

每一列每加一格,都指数级放大,这正是"必须剪枝不能穷举"的数字底气。解码器的全部聪明,就是在这条指数曲线上砍出一小路,只让最像的候选存活到终点。

三.5、换一个视角再看解码器

想把解码器看得更准,得先摆正它"不是又一个模型"的定位。它是拿着声学体察、语言语感、词典地图三条线索的搜查官,在词图里一寸寸比对,绝不放跑任何一条全局约束。这顺带解释了为什么许多"识别错"其实跟模型无关——同一条声音,λ 没调好、束宽选太窄,解码阶段就会亲手把听对了的话剪掉。于是你在后面调优时,要时刻留一只眼盯着解码这层,别一上来就怪声学或语言模型,那常是一笔冤枉账。

六、把搜索空间的账算到落地

前面算的"100 的 4 次方"只是为让你领会量级,真到工程里,搜索空间并不是百分之百展开的——词典把合法的词首尾锁死,语言模型又把"接得上话"的路径优先,真正被搜索铺开的只是"又像音、又像话"的那一小块。这也是为什么解码器明明面对天文数字的候选,运行起来却常常只有几十毫秒:不是它在硬扛天文数字,而是三路约束早在搜索前就替它砍掉了一大半。理解这点,你就明白"词典、语言模型、束宽"三个角色在解码里缺一不可——它们联手决定的是"这棵树到底长多密、多深"。

顺着这个思路,解码的调优从不玄学:想更快,就收紧束宽、抬高剪枝阈值;想更准,就放大束宽、加长句约束;想兼顾,就用"小束宽出候选、大束宽精修"的两轮法。它不像训练那样要动几十亿参数,全靠几个整型参数,却最讲求"问题出在哪一路约束不够"。常见症状和下手处,用一张小表就能对齐:

症状 多半是哪个约束缺位 先动哪把剪子
常见词都准、生僻专名乱 词典没覆盖新词 补词典、放宽候选
长句后半总是跑偏 语言约束弱 / 束宽太窄 上调 λ、放大束宽
同音词来回跳 语言先验不足 换领域模型、扫 λ

把这棵"约束剪出来的树"想明白,你在第 5 章面对任何识别降级,都能一眼看出该动哪把剪子,而不至于把所有锅都甩给模型——把解码器这层摸透,才是整套流水里回报率最高也最容易被低估的一笔投入。

附、把三层嵌套记成一把下降的梯子

总有人纠结状态、音素、词谁套谁。其实把它想成一把从抽象到具体的下降梯子最省事:最上头是一句候选词,往下落一层是词展开的音素串,再落一层才是每个音素拆成 HMM 状态去对应时间。解码器既不从上头直接跳到底,也不从底下往上爬,而是让三条线索在这把梯子里汇聚——语言把词序锁紧、词典把词到音的通道铺严、声学给每一级状态打分。想通了这把梯子,后面读任何架构都不会再被哪一层管什么绕晕。

本节要点回顾

  • 三路进料:声学打分、语言先验、发音词典。
  • 三层嵌套:词展开成音素,音素拆成状态,网络层层铺开。
  • 空间巨大:路径组合天文数字,穷举不可行。
  • 聪明剪枝:解码靠妥善方向剪空间,而非野蛮穷举。
  • 拧的价值:用全局约束压局部幻觉,搜出最像的一句话。

空间地图铺好了,下一节以两个搜索算法上场:维特比与束搜索,谁负责全局谁负责快速。


作者与出处
原作者: 灏天文库
来源:灏天文库
整理: 灏天文库整理
由灏天文库平台收录,内容或由平台用户上传,仅供学习交流
发布者: 作者: 灏天文库 转发
评论区 (0)
U