您现在已经了解了声学模型如何将音频特征与基本声音单元关联起来,以及语言模型如何提供语言规则。这块最终的拼图是将这两种信息来源结合起来以做出最终判定的组成部分。这个组成部分就是解码器。可以将解码器看作语音识别系统的项目主管。它本身不产生核心信息。相反,它的工作是智能地筛选声学模型和语言模型提供的所有可能性,以找到最有可能的句子。查找最佳句子设想您听到一个短语。您的大脑会即时处理声音,考量不同的词语可能性,并运用您的语法和语境知识得出正确的理解。比如,如果有人说的话听起来像“ice cream”(冰淇淋)或“I scream”(我尖叫),您的大脑会毫不费力地选择在对话中更合理的那个。语音识别系统面临同样的挑战,但它必须以数学方式完成。声学模型可能会报告说,“ice cream”和“I scream”的音频特征非常相似。它会为这两种可能性都给出高概率分数。另一方面,语言模型会评估词序列本身的发生可能性。短语“I scream”相当常见,但“ice cream”更是如此。解码器的主要功能是执行这种平衡操作。它获取潜在句子的声学分数,并将其乘以同一句子的语言模型分数。它对每一个合理的假设都进行此操作,并选择组合分数最高的那个。解码器在流程中的位置解码器位于ASR流程的末端,接收来自声学模型和语言模型的输入。它的作用是进行高效查找,以找到最佳词序列。digraph G { graph [fontname="sans-serif"]; node [shape=box, style="rounded,filled", fillcolor="#e9ecef", fontname="sans-serif"]; edge [fontname="sans-serif"]; rankdir=TB; splines=ortho; audio [label="音频特征 (O)", shape=cylinder, fillcolor="#bac8ff"]; am [label="声学模型", fillcolor="#a5d8ff"]; lm [label="语言模型", fillcolor="#96f2d7"]; decoder [label="解码器\n(查找引擎)", style="rounded,filled", fillcolor="#ffc9c9", shape=box, width=2]; text [label="最有可能的文本 (Ŵ)", shape=document, fillcolor="#b2f2bb"]; subgraph cluster_models { label = "概率模型"; style="rounded,dashed"; color="#868e96"; am; lm; } audio -> am; am -> decoder [label=" 声学分数\n P(O|W)"]; lm -> decoder [label=" 语言分数\n P(W)"]; decoder -> text [label=" 查找 argmax P(O|W) * P(W)"]; }解码器将衡量音频与词序列匹配程度的声学分数,与衡量该词序列出现可能性的语言分数结合起来。目标形式化正如我们在章节引言中看到的,这个过程由语音识别中的一个基本方程表示。解码器的目标是找到使这个概率最大化的词序列 $\hat{W}$:$$ \hat{W} = \underset{W}{\mathrm{argmax}} , P(O|W) \times P(W) $$我们从解码器的视角来分解说明一下:$\hat{W}$ (W-hat): 这是输出。它代表解码器找到的唯一最佳词序列。$\underset{W}{\mathrm{argmax}}$: 这表示“找到使后续表达式取最大值的词序列 $W$。” 这是解码器的查找功能。$P(O|W)$: 这是来自声学模型的分数。它在问:“给定这个特定的词序列 $W$,它产生我们观察到的音频特征 $O$ 的概率是多少?”$P(W)$: 这是来自语言模型的分数。它在问:“这个词序列 $W$ 在语言中出现的概率是多少?”考量我们的典型例子:“recognize speech”与“wreck a nice beach”进行对比。声学模型输入:声学模型处理音频,并确定这两种短语的发音非常相似。它可能会为两者分配相似的高 $P(O|W)$ 分数。语言模型输入:语言模型经过大量文本训练,计算 $P(W)$。它知道“recognize speech”这个序列在英语中比“wreck a nice beach”更可能出现。解码器计算:解码器将分数相乘。分数("recognize speech") = (高声学分数) × (高语言分数) = 高最终分数分数("wreck a nice beach") = (高声学分数) × (很低语言分数) = 低最终分数尽管声音有歧义,但解码器自信地选择了“recognize speech”,因为其组合概率明显更高。这表明了为什么解码器不仅仅是一个简单的计算器。可能的句子数量可能是天文数字,因此它必须使用巧妙的查找算法来找到最佳候选项,而无需评估每一种可能性。在下一节中,我们将开始查看这些查找算法如何运作。