声学模型对"谁"打分,取决于我们定义的建模单元。一层比词粗音素,但音素在不同邻居面前会变声;于是有了考虑上下文的三音素,实际落地时还会加上前后各少许边界状态。这一节围绕"单元选多大"讲透三个层次:音素、三音素、HMM 状态,以及状态绑定如何在数据不充裕的角落救场。
建模单元直接决定声学模型的工作量。用整词做单元,几万个词各要一份模板,任何没听过的词都束手无策;用音素做单元,汉语几十个声母韵母总量很小,词库外的新词也能拼出来。这是几十年的老智慧:宁可把"词的音"拆成"基元的音",也不肯为每个词单独建模。端到端模型出现后单元又变细到字符甚至子词,道理相同——把发明词的粒度下放给模型去拼。
单独用一个音素做单元有个致命短板:同一个音素,跟在不同的邻居后面,发音会悄悄变化。比如塞音在不同元音前送气程度、发音部位都不同。若只建模"孤立音素",等于要求一个单元同时应付它所有的变体,必然顾此失彼。解法是把单元从"音素"加码成"三音素"——中间是目标音素、两侧各带一个邻居,例如"a 在 b 和 j 之间"。三音素让每个音素变身成众多上下文专属的小号,分辨率立竿见影地升高。
代价也是直接的:建模单元数量爆炸式增长。若音素有 60 个,理论三音素组合就有 60 的三次方量级,即便做成词典滤掉不存在的组合,数量依然远超单音素。单元多了,每个单元分到的训练样本就少了,数据稀疏就像一只无形的手掐住统计模型的脖子。
光有三音素还不够,一个音素内部也有时间结构——从起始、到中段、到收尾,前三帧和后三帧的声音明显不同。为刻画这种"词内在的时间演化",常把一个三音素再拆成 3 个甚至更多 HMM 状态,各状态描述它在发音阶段的不同代表性帧。声学模型实际打分的,正是这些状态;词→音素→状态,三层都定义好,才能交给隐马尔可夫模型做时序建模。
发音词典把词写成音素串 音素考虑上下文扩成三音素 三音素每个再拆成 3 个内部状态 状态作为声学模型真正打分的单元
上面这五行的层级,就是传统声学模型世界观的骨架。后面所有训练与解码都建立在"对状态打分"之上。

上图把四层从上到下摊开:词最粗,底座是音素,中间是上下文加权的三音素,而真正被打分的是更要细的 HMM 状态(未在图中展开)。
单元太细、样本不足是死结。救法叫状态绑定:把声学上高度相似、上下文也接近的状态,合并共享同一个统计分布。这等于不追求每个状态独享一份参数,而是让相近状态抱团取暖,用集体的数据把分布估准。工程上常用决策树给状态分派,按是否同一个邻居、发音部位是否相近等条件,把状态聚类到一起。这一招让模型在数据不充裕时也站得住。
总结一下取舍:单元越细,能表达的发音差异越多,可参数量与数据需求也水涨船高;单元越粗,越好养,却牺牲分辨率。传统系统在这个金字塔上反复权衡,端到端模型则把这个权衡的一大半扔给了网络自己去学。理解了这张金字塔的来龙去脉,你就能看懂为什么老系统里满眼都是"三音素状态",也能明白新系统为什么会反其道而简化它。
用"好"这个音节收货一下手感。先由发音词典把"好"写成音素串 hhao(声母 h + 韵母 ao,这里写成便于阅读的拼写);给 h 与 ao 各配上上下文,扩成带左右邻居的三音素;再把每个三音素拆成 3 个内部 HMM 状态。于是原本一个轻飘飘的"好",到声学模型嘴里会变成一串"以特定上下文为首尾的若干状态"。真正的打分就是这样,对着一串细小的状态疏通发音的时序。
用一张小表把三种前导条件对状态数量的影响摊开,能直观感受"单元越多数据越稀":
| 建模单元 | 语言里的约为数量 | 上下文敏感度 | 数据压力 |
|---|---|---|---|
| 音素 | 汉语约几十个 | 低(会变色) | 小 |
| 三音素 | 理论可达三次方级 | 高 | 很大 |
| 绑定后三音素状态 | 落到几万量级内 | 高且可承受 | 适中 |
最后那一步"状态绑定",正是把第二行那个吓人的数字收敛到第三行能养得起的水位。
选多大一块单元,看似是声学侧的私事,其实直接决定了第 4 章解码时要搜的路径有多大、第 5 章要数多少个错误。设想不用三音素而用裸音素做单元:解码器的状态网络会小得多、跑得快,可代价是发音变体混在一起,该犯错的地方照样犯错。反过来若三音素拆得过碎、又没做状态绑定,训练数据一喂就崩,评估时对连读语境和少见词的错误会堆成山。换句话说,单元粒度是一道已经替你决定好"后面解码与评估里要付出多少力气"的暗账。读这章若只记得"用三音素、要做状态绑定",那是记住了结论;若还能说出"为什么数据少就要先做状态绑定、不然三音素会饿死",才算真的把这本账接了过去。顺着这个思路往后翻,你会反复看到这笔账在第 4 章搜索规模和第 5 章错误统计里被兑现。
也正因如此,业内换端到端模型时并非把状态概念全盘扔掉,而是把"该用多细的单元"这个决定从人工写死变成了网络自己自适应——字符、子词更碎,但粒度由数据决定。看懂这层演变,你就明白建模单元不是一道固定的选择题,而是一条随数据与算力不断下移粒度的底线。这章讲的三音素、状态绑定,正是这条底线在过去那个数据匮乏年代的解题姿势;今天条件变了,解法可以换,但"粒度需与数据匹配"这条底层的账,永远翻不过去。
单元定了,就得选一套让这些状态说得出概率的模型课。下一节看传统的老牌选手:GMM-HMM。