设想你对电脑说“recognize speech”这个短语。从纯粹的声学角度看,你发出的一系列声音也可能被解读为“wreck a nice beach”。它们的单个声音,即音素,非常相似。声学模型的工作是将音频特征映射到这些音素,它可能会认为这两个短语都是几乎同样有效的备选项。它不理解上下文或含义,只分析声音。这就是语音识别中歧义的核心难题。系统面临选择:哪个转录是正确的?如果没有额外信息,就像尝试解决一个缺少一半拼图块的谜题。音频提供了语音信息,但语法和语义信息却缺失。digraph G { rankdir=TB; graph [bgcolor="transparent"]; node [shape=box, style="rounded,filled", fontname="Arial", fontsize=10]; edge [fontname="Arial", fontsize=9]; audio [label="语音输入", fillcolor="#a5d8ff"]; am [label="声学模型", fillcolor="#ffc9c9"]; subgraph cluster_options { label = "声学上相似的假设"; style="dashed"; color="#adb5bd"; fontsize=10; fontname="Arial"; option1 [label="“recognize speech”", shape=plaintext, fontcolor="#37b24d"]; option2 [label="“wreck a nice beach”", shape=plaintext, fontcolor="#f03e3e"]; } lm [label="语言模型\n(提供语言概率)", fillcolor="#b2f2bb"]; final [label="最终输出:\n“recognize speech”", fillcolor="#96f2d7"]; audio -> am [label="输入"]; am -> option1 [label="可能匹配"]; am -> option2 [label="可能匹配"]; option1 -> lm [label="P(W) = 高"]; option2 -> lm [label="P(W) = 低"]; lm -> final [label="选择最有可能的序列"]; }声学模型根据声音生成多个假设。语言模型随后评估这些假设,以找出语言上最合理的词语序列。这种混淆在语音中频繁出现,源于多个方面。同音词和发音相似的词同音词是指发音相同但含义和拼写不同的词。它们是自动语音识别(ASR)系统歧义的典型来源。请看这些例子:to, too, twotheir, there, they'reate, eightweather, whether单独的声学模型无法将它们区分开。它需要一种方式来知道“I ate dinner”是一个比“I eight dinner”可能性大得多的句子,尽管它们听起来完全一样。词语边界的歧义另一个重要难题是弄清楚一个词在哪里结束,下一个词在哪里开始。口语是连续的声音流,词与词之间的停顿并不总是清晰。这可能导致对音频进行不同但同样合理的分割方式。一个广为人知的例子是以下两者之间的区别:“I scream”“ice cream”从声学角度看,这两个短语几乎无法区分。ASR系统必须决定这些声音是对应两个单独的词,还是一个复合词。语法和语义的合理性在这里,语言模型确实变得不可或缺。它为系统提供了一种语言上的“常识”。它评估哪个词语序列在语言中更可能出现。对于我们最初的例子,一个通过大量英语文本训练的语言模型会知道,“recognize speech”这个词语序列比“wreck a nice beach”更常见、更可能出现。语言模型为每个可能的句子分配一个概率得分。“recognize speech”的概率,即$P(\text{“recognize speech”})$,会很高,而“wreck a nice beach”的概率,$P(\text{“wreck a nice beach”})$,会极低。通过结合声学模型的得分(音频与词语的匹配程度)和语言模型的得分(词语以该序列出现的可能性),ASR系统可以做出更明智、更精确的判断。总之,歧义是口语固有的特性。仅依靠声音不足以生成准确的转录。ASR系统需要一个理解语言规则、结构和统计模式的组成部分。这个组成部分就是语言模型,其主要作用是通过偏好语法正确且语义合理的词语序列来解决歧义。