语音识别中的语言模型:N-gram 与平滑算法详解
在语音识别系统中,仅靠声学模型往往不足以应对复杂的词汇表。当词汇量达到数万甚至数十万时,解码空间巨大,单纯依靠声学概率会导致大量错误组合。因此,必须引入语言模型(Language Model, LM)来约束识别结果,确保输出序列符合自然语言的语法和语义习惯。例如,让'今天天气很好'的概率远高于'今天天汽很好'。
1. 语言模型基础
定义与本质
语言模型的核心任务是计算一个词序列出现的概率。给定词序列 $S = (w_1, w_2, …, w_n)$,语言模型的目标是估计联合概率 $P(w_1, w_2, …, w_n)$。
从本质上讲,语言模型是对语句的概率分布进行建模。通俗来说,它用于判断一句话是否合理,或者计算该句子在语料库中出现的频率。
链式法则分解
根据概率论的链式法则,联合概率可以分解为条件概率的乘积: $$ P(w_1, w_2, …, w_n) = P(w_1) \times P(w_2|w_1) \times P(w_3|w_1, w_2) \times … \times P(w_n|w_1, …, w_{n-1}) $$
面临的挑战
直接基于历史所有词计算条件概率面临两个主要问题:
- 自由参数问题:随着字符串长度增加,可能的上下文组合呈指数级增长,导致模型参数无法有效估计。
- 零概率问题(OOV):训练语料有限,许多合理的词序列未出现过,导致最大似然估计结果为 0,使得整个句子概率为 0。
2. N-gram 语言模型
为解决上述问题,引入了马尔科夫假设(Markov Assumption):当前词出现的概率仅依赖于前 $n-1$ 个词。基于此假设的统计语言模型称为 N-gram 模型。
公式表示
对于词序列 $S=(w_1, w_2, …, w_n)$,其概率近似为: $$ P(w_1, w_2, …, w_n) \approx \prod_{i=1}^{n} P(w_i | w_{i-n+1}, …, w_{i-1}) $$
其中,$w_{i-n+1}$ 到 $w_{i-1}$ 构成了长度为 $n-1$ 的历史上下文。
N 的取值
- Unigram (n=1):词之间相互独立,忽略上下文。
- Bigram (n=2):依赖前一个词。
- Trigram (n=3):依赖前两个词。
理论上 $n$ 越大效果越好,但参数数量随 $n$ 指数增长,且数据稀疏性加剧。通常在实际应用中,3-gram 或 4-gram 是平衡效果与效率的常用选择。
3. 数据平滑算法
由于语料稀疏性,许多 N-gram 在训练集中计数为 0。平滑(Smoothing)技术通过重新分配概率质量,解决零概率问题。
(1)加一平滑(Add-one Smoothing)
思想:将所有计数加 1,使未出现过的 N-gram 也有非零概率。 公式: $$ P_{add1}(w_i | h) = \frac{C(h, w_i) + 1}{C(h) + V} $$ 其中 $V$ 为词汇表大小。 优缺点:简单直观,但会给未出现项分配过多概率,导致已出现项概率被稀释。
(2)古德 - 图灵平滑(Good-Turing Smoothing)
思想:利用出现次数为 $r$ 的 N-gram 的数量来估计出现次数为 $r^*$ 的概率。即'用看见过一次的估计没看见过的'。 应用:常用于调整高频词的折扣率,将部分概率转移给低频或未出现词。
(3)回退平滑(Katz Smoothing / Back-off)
思想:优先使用高阶模型;若高阶不存在,则回退到低阶模型并打折。 流程:
- 检查 $n$-gram 是否存在。
- 若存在,使用打折后的概率(如 Good-Turing 打折)。
- 若不存在,回退到 $n-1$-gram,并乘以回退系数。


