语音识别系统将原始音频转换为特征向量序列。在这些向量中,梅尔频率倒谱系数(MFCCs)等数值虽然代表了声音的抽象属性,但本身缺乏固有的语言意义。这带来了一个基本难题。为了克服这一点,需要一个组件将这些数值特征转换为语言的基本单位。这个组件就是声学模型。它的核心是一个统计模型,充当声音和音素之间的翻译器。对于由单个特征向量表示的每个短音频片段,声学模型会计算该声音对应于给定语言中每个可能音素的概率。例如,当它分析一个特征向量时,可能会确定该声音有 70% 的可能性是 /t/,10% 的可能性是 /d/,而其他所有音素的可能性都非常低。可以将其视为一个专门的模式识别器。长期以来,它已在数千小时的语音数据上进行训练,这些数据的音频都与其正确的语音转录精确对齐。通过这种训练,它学习了每个音素的独特特征。它学习了 /s/ 音在特征向量形式下“看起来”是怎样的,以及 /ʃ/(“sh”音)又“看起来”是怎样的。声学模型的作用声学模型的主要职责是回答一个具体问题:“给出这个特定音频特征片段,它对应特定音素的可能性有多大?”这个过程对音频输入中的每个时间帧重复执行,从而生成一系列音素概率。digraph G { rankdir=TB; splines=ortho; node [shape=box, style="rounded,filled", fontname="Arial", fontsize=10]; edge [fontname="Arial", fontsize=9]; subgraph cluster_input { label = "输入(来自特征提取)"; bgcolor="#e9ecef"; style="rounded"; node [fillcolor="#a5d8ff"]; features [label="音频特征向量\n(一个时间帧)"]; } subgraph cluster_model { label = "声学模型"; bgcolor="#e9ecef"; style="rounded"; node [fillcolor="#96f2d7", shape=cylinder, label="声学模型"]; am_model; } subgraph cluster_output { label = "输出概率"; bgcolor="#e9ecef"; style="rounded"; node [shape=note, fillcolor="#ffec99"]; probs [label="P(特征 | /p/) = 0.1\nP(特征 | /b/) = 0.05\nP(特征 | /t/) = 0.7\nP(特征 | /d/) = 0.1\n...等等。"]; } features -> am_model [label=" 由...分析 "]; am_model -> probs [label=" 计算可能性 "]; }声学模型获取一帧音频特征,并计算每个可能音素的可能性。这个输出不是一个明确的答案。它是一组概率。模型不会说“这是一个 /t/ 音。”相反,它为每种可能性提供一个统计得分。这是一个重要区别,因为语音本质上是可变的。一个人对 /t/ 的发音会根据其口音、语速或前后音素而变化。通过提供概率,声学模型为ASR系统提供了考虑多种语音解释的灵活性。概率基础声学模型学习到的关系正式表达为条件概率。它计算可能性,通常写作:$$ P(\text{音频特征} | \text{音素}) $$你可以将其读作“观察到这组特定音频特征的概率,假设某个音素被说出。”例如,模型计算:$P(\text{特征} | \text{/k/})$: 如果是 /k/ 音,这些特征的可能性有多大?$P(\text{特征} | \text{/æ/})$: 如果是 /æ/ 音(如“cat”中的发音),这些特征的可能性有多大?$P(\text{特征} | \text{/t/})$: 如果是 /t/ 音,这些特征的可能性有多大?声学模型对语言中的每个音素执行此计算。产生最高概率的音素被认为是该小段音频可能性最大的候选。这些可能性得分随后会传递到ASR流程的下一阶段——解码器,解码器将结合来自语言模型的信息来构建最终的文本转录。在接下来的章节中,我们将了解用于构建这些模型的技术,首先是高斯混合模型(GMMs)和隐马尔可夫模型(HMMs)的经典组合。