李宏毅NLP-8-语音模型

Language Model


语言模型的定义(LM)

  • 核心功能:估计token 序列的概率,即P(y1,y2,...,yn)P(y_1,y_2,...,y_n)P(y1,y2,...,yn)。
    • Token:可以是单词、字、子词(如 BPE),代表文本的基本单元。
    • 示例:LM 能判断 "我吃饭" 比 "我吃床" 更可能(概率更高),因为前者符合语言规律。

LM 在模型中的应用:HMM vs LAS

(1)HMM(隐马尔可夫模型)

公式:Y=argmaxYP(X∣Y)P(Y)Y=argmax_YP(X∣Y)P(Y)Y=argmaxYP(X∣Y)P(Y)

  • 场景 :典型用于语音识别(X 是语音信号,Y 是文字序列)。
  • 分工:
    • P(X∣Y)P(X|Y)P(X∣Y):建模 "文字→语音" 的映射(如声学模型,需语音 - 文字配对数据)。
    • P(Y)P(Y)P(Y):建模 "文字本身的合理性"(如 n - gram 模型,只需纯文本数据)。
  • 意义 :通过 "观测概率 + 语言先验" 联合决策,提升预测的合理性(比如避免 "我吃床" 这类语法错误)。

(2)LAS(Listen - Attend - Spell,端到端模型)

公式:Y=argmaxYP(Y∣X)P(Y)Y=argmax_YP(Y|X)P(Y)Y=argmaxYP(Y∣X)P(Y)

  • 场景 :同样用于语音识别,但 LAS 是端到端模型 (直接学习 "语音→文字" 的映射 P (YX))。
  • LM 的作用:
    • P(Y∣X)P(Y|X)P(Y∣X) 依赖 配对数据(语音 - 文字对,收集成本高)。
    • P(Y)P(Y)P(Y) 依赖 纯文本数据(如互联网文本,容易大规模收集)。
    • 引入 LM 可利用海量纯文本数据,补充P(Y∣X)P(Y|X)P(Y∣X) 的不足(比如提升语法合理性)。

3. 数据层面的核心优势

  • P(Y∣X)P(Y|X)P(Y∣X) (如 LAS 的主模型):
    • 需要 配对数据(如语音 - 文字对),收集难度大(需标注、场景覆盖有限)。
  • P(Y)P(Y)P(Y)(语言模型):
    • 只需 纯文本数据(如新闻、小说、社交媒体文本),容易大规模获取(互联网是天然语料库)。

当模型需要输出文本(如语音识别、机器翻译、文本生成)时,语言模型能利用 "易获取的纯文本数据",补充主模型对 "语言规律" 的学习,提升输出的合理性和准确性。

简单来说:

  • 主模型(如 LAS、HMM 的观测模型)负责 "输入→输出" 的映射,但依赖稀缺的配对数据;
  • 语言模型负责 "输出本身的合理性",依赖易获取的纯文本数据;
  • 两者结合,实现 "精准映射 + 语言先验" 的双重保障。

N-gram

  1. 核心目标:估计序列概率**

语言模型的核心是计算 token 序列的概率 P(y1,y2,...,yn)P(y_1,y_2,...,y_n)P(y1,y2,...,yn)(如句子 "wreck a nice beach" 的概率)。

2. 问题:数据稀疏性

直接估计长序列概率面临 "数据稀疏" 难题:

  • 训练数据中,完整的长序列(如 "wreck a nice beach")可能从未出现,无法直接统计其概率。

3. N-gram 的解决思路:分解为短距离条件概率

N-gram 通过 "马尔可夫假设" 简化问题:假设 "每个词的概率仅依赖前 n−1n−1n−1 个词" ,将长序列概率分解为 短距离条件概率的乘积

(1)链式法则分解(以 2-gram 为例)

以句子 "wreck a nice beach" 为例,利用 链式法则 分解为:

  • START:序列开始的占位符(如句子开头)。
  • 2-gram(Bigram) :每个词仅依赖 前 1 个词,是 N-gram 中最常用的形式。

(2)条件概率的统计估计

以 P(beach∣nice)P(beach∣nice)P(beach∣nice) 为例,通过 训练数据中的词对频率 估计:P (beach∣nice)=Count("nicebeach")Count("nice beach")Count("nicebeach")/Count("nice")Count("nice")Count("nice")

  • 分子 :训练数据中 "nice beach" 同时出现的次数(共现次数)。

  • 分母 :训练数据中 "nice" 出现的总次数。

  • 这是 最大似然估计(MLE) ,核心是 "用频率近似概率 "。

    N-gram 通过 训练数据中的词频 估计条件概率,但存在先天缺陷:

  • 当 nnn 较大时(如 3-gram、4-gram),问题更严重

    长距离的词组合(如 "the dog jumped","the cat ran")在训练数据中 极难完整出现,导致很多合理的序列被错误估计为 "概率 0"。

假设训练数据只有两句:

  • "The dog ran ..."
  • "The cat jumped ..."

计算 P(jumped∣the, dog)

  • 含义:前两个词是 "the dog" 时,下一个词是 "jumped" 的概率。
  • 训练数据中,"the dog" 后面接的是 "ran",从未出现 "the dog jumped"
  • 按 MLE(最大似然估计),概率会被算成 0,但这显然不合理("The dog jumped" 是合理句子)。

计算 P (ran∣the, cat),按 MLE,概率也会被算成 0,但这同样不合理("The cat ran" 是合理句子)。

3.根源:数据稀疏(Data Sparsity)

  • 自然语言的 词组合是无限的 (如 3-gram 的组合数是 V3V^3V3,V 是词表大小,通常很大)。
  • 训练数据 无法覆盖所有可能的 n-gram 组合,导致大量合理组合的频率为 0,进而概率估计为 0。

建议 赋予这些未出现的组合一个 "小概率"(如 0.0001) ,而非绝对 0。"平滑(Smoothing)" 技术的思想(如加 1 平滑、Kneser-Ney 平滑等),核心是 "让未出现的组合也有微小概率,避免概率为 0 的极端情况"。

数据稀疏导致大量合理序列的概率被错误估计为 0,使模型无法处理未见过的词组合,必须通过平滑技术修正。


Continuous LM

  • N-gram 的缺陷:依赖离散的词共现计数,未出现的组合概率为 0(数据稀疏)。
  • 连续模型的优势 :通过 低维隐向量的泛化能力 ,即使没见过 "用户 B - 动漫 2" 的组合,也能通过向量内积预测评分(类似神经语言模型用词向量泛化未见过的词组合)。

    将推荐系统的矩阵分解思想引入语言模型(Continuous LM)"** 的核心逻辑,用于解决 词组合的稀疏性问题 。以下从 模型类比、矩阵结构、向量学习、损失函数 四个维度解析:

1. 核心类比:推荐系统 → 语言模型

  • 推荐系统 :处理 "用户 - 物品" 交互矩阵(如用户对电影的评分),通过矩阵分解学习用户和物品的隐向量,预测缺失的评分。
  • 连续语言模型 :处理 "词 - 历史上下文" 共现矩阵 (如 "dog" 和 "ran" 的共现次数),通过矩阵分解学习 词向量(viv^ivi)上下文向量(hjh^jhj),预测未观察到的词组合概率。

2. 矩阵结构:词 - 上下文的共现计数

(1)行(Vocabulary):词汇

  • 代表 目标词 (如 ranjumpedcried...),对应推荐系统的 "用户"。
  • 每个词用 向量 viv^ivi 表示(如 v1v^1v1 是 ran 的向量,v2v^2v2 是 jumped 的向量)。

(2)列(History):上下文

  • 代表 历史上下文 (如 dogcatchild...),对应推荐系统的 "物品"。
  • 每个上下文用 向量 hjh^jhj 表示(如 h1h^1h1 是 dog 的向量,h2h^2h2 是 cat 的向量)。

(3)单元格(nijn_{ij}nij):共现次数

  • nijn_{ij}nij词 iii 和上下文 jjj 的共现次数 (如 n11=2n_{11}=2n11=2 表示 "dog" 和 "ran" 共现 2 次;n22=2n_{22}=2n22=2 表示 "cat" 和 "jumped" 共现 2 次)。
  • 大量单元格为 0 (如 "dog" 和 "jumped" 的 n21=0n_{21}=0n21=0),对应 "未观察到的词组合"(数据稀疏)。

3. 向量学习:连续表示的泛化能力

  • 目标 :学习词向量 viv^ivi 和上下文向量 hjh^jhj ,使得 向量内积 vi⋅hjv^i⋅h^jvi⋅hj 尽可能接近实际共现次数 nijn_{ij}nij
  • 泛化逻辑:
    • 即使某词和上下文未共现(nij=0n_{ij}=0nij=0),它们的向量内积仍可给出 非零的 "预测共现概率"(如 "dog" 和 "jumped" 的内积 v2⋅h1v^2⋅h^1v2⋅h1 可预测其共现可能性)。
    • 这解决了 N-gram 的稀疏性缺陷(N-gram 中未出现的组合概率为 0,而连续 LM 通过向量泛化赋予其合理概率)。

4. 损失函数:最小化预测误差

为了学习向量 viv^ivi 和 hjh^jhj,定义 均方误差(MSE)损失 :L=∑(i,j)(vi⋅hj−nij)2L=∑{(i,j)}(v^i⋅h^j−n{ij})^2L=∑(i,j)(vi⋅hj−nij)2

  • 优化目标 :通过梯度下降最小化 LLL,使向量内积尽可能拟合实际共现次数。
  • 类比推荐系统:这与协同过滤中 "最小化预测评分与实际评分的误差" 完全一致。

借鉴推荐系统的矩阵分解思想,将 "词 - 上下文" 的共现关系建模为连续向量的内积,通过学习向量表示泛化稀疏数据,解决 N-gram 的概率估计偏差问题。

  • N-gram 的痛点:未观察的词组合(如 "dog jumped")概率被置为 0,需手动平滑(如加小概率)。
  • 连续 LM 的优势 :通过 向量相似性的自然传递 ,未观察的组合会自动获得合理概率(继承相似上下文的关联),实现 "自动平滑"。

    可以将这个连续语言模型看作一个神经网络。整个图示清晰地展示了连续语言模型的工作原理,即通过学习历史上下文和词汇的连续向量表示,利用向量内积来预测共现次数,并通过损失函数进行优化,从而自动解决数据稀疏问题,实现更好的泛化能力。
    更进一步的可以扩展到基于神经网络的LM

NN-based LM


基于神经网络的语言模型(NN-based LM)" 的训练逻辑 ,核心是 "自回归学习:预测下一个词",以下分步拆解:

1. 训练数据:纯文本语料

左侧展示 无监督文本数据(如中文句子片段):

  • 例:"潮水 退了 就 知道 誰 ...""不爽 不要 買 ...""公道價 八萬 一 ..."
  • 特点:只需纯文本(无需配对数据),符合语言模型 "易收集数据" 的优势。

2. 训练目标:预测下一个词

核心诉求:Learn to predict the next word

  • 给定 前文(context) (如 "潮水 退了""退了 就"),模型学习预测 下一个词(如 "就""知道""誰")。

3. 网络结构:序列依赖的建模

右侧展示 神经网网络的输入 - 输出关系

  • 输入:前文的词(如 "潮水"+"退了","退了"+"就","就"+"知道")。
  • 输出:下一个词的概率分布(如 "就""知道""誰")。
  • 示例对应:
    • 输入 "潮水 退了" → 预测 "就"
    • 输入 "退了 就" → 预测 "知道"
    • 输入 "就 知道" → 预测 "誰"
      完美匹配左侧文本 "潮水 退了 就 知道 誰 ..." 的序列依赖。

4. 模型本质:自回归(Autoregressive)学习

  • 自回归 :用 前面的词预测后面的词,逐步生成序列。
  • 对比传统 N-gram:
    • N-gram 依赖固定长度的窗口(如 2-gram 看前 1 个词),而神经网络可通过循环结构(RNN)或注意力(Transformer) 捕捉更长距离的依赖。

利用纯文本数据,训练神经网络学习 "前文→下一个词" 的映射,自动捕捉语言的序列依赖,实现比 N-gram 更灵活的长距离建模。


神经网络的角色:预测下一个词的概率

每个条件概率 P (next word∣context) 由 相同结构的神经网络 计算:

  • 输入:前文(context)的1-of-N 编码(独热编码)。
    • 例:预测 P(wreck|START)P(wreck|START)P(wreck|START)时,输入是 "START" 的独热编码;
    • 预测 P(a∣wreck)P(a|wreck)P(a∣wreck) 时,输入是 "wreck" 的独热编码。
  • 输出:词汇表中每个词作为下一个词的概率分布。
    • 例:第一个 NN 输出 "wreck","a","nice"... 的概率,其中 "wreck" 的概率最高(对应 P(wreck∣START)P(wreck|START)P(wreck∣START))。

1-of-N 编码:词的离散表示

  • 独热编码 :每个词用一个向量表示,向量长度等于词汇表大小,只有对应词的位置为 1,其余为 0
  • 作用 :将离散的词转换为神经网络可处理的数值输入,是 "离散词→连续向量" 的过渡(后续会进化为词嵌入,如 Word2Vec)。

    这类想法最早可以追溯到2003年,Bengio 等人提出的神经语言模型(Neural Probabilistic Language Model)架构,是现代词嵌入和神经 LM 的奠基性工作。

神经网络的三级结构

模型目标:给定前 n−1n−1n−1 个词(上下文),预测下一个词wtw_twt 的概率 P(wt∣wt−n+1,...,wt−1)P(w_t|w_{t−n+1},...,w_{t−1})P(wt∣wt−n+1,...,wt−1)。

  1. 输入层:词嵌入(Word Embedding)
  • 操作 :对每个上下文词(如 wt−n+1,wt−2,wt−1w_{t−n+1},w_{t−2},w_{t−1}wt−n+1,wt−2,wt−1),通过 共享的词嵌入矩阵 CCC 查表,得到其 连续向量表示 C(w)C(w)C(w)
  • 意义:
    • 替代传统 "独热编码",将离散词映射到低维连续空间,解决稀疏性问题。
    • 词嵌入矩阵 CCC 是共享参数(所有词共用),大幅减少参数数量,提升泛化能力。
  1. 隐藏层:非线性特征提取
  • 操作 :将多个上下文词的嵌入向量拼接(或组合),输入到 tanh 激活的隐藏层,捕捉词间的复杂交互。
  • 意义:
    • 相比 N-gram 的 "统计共现",神经网络可学习 非线性的上下文依赖(如语义、语法关系)。
  1. 输出层:Softmax 预测概率
  • 操作 :隐藏层输出经过 Softmax 函数 ,生成词汇表中每个词作为下一个词的概率分布:P(wt=i∣context)=Softmax(隐藏层输出)iP(w_t=i|context)=Softmax(隐藏层输出)_iP(wt=i∣context)=Softmax(隐藏层输出)i
  • 挑战:
    • 词汇表 VVV 通常很大(如 104∼105),Softmax 计算复杂度为 O(V)O(V)O(V),是模型的计算瓶颈(后续通过层次 Softmax、负采样优化)。

解决传统 LM 的两大痛点

  1. 数据稀疏性
    • 词嵌入的连续表示,让语义相似的词(如 "dog" 和 "cat")在向量空间中靠近,天然实现 "平滑"(未观察的词组合可通过向量相似性泛化)。
  2. 长距离依赖
    • 神经网络的隐藏层可建模 非线性的长距离依赖(虽受限于固定窗口,但为后续 RNN、Transformer 等递归 / 注意力模型奠定基础)。

在 Bengio 论文发表的 2003 年,ReLU 尚未提出(ReLU 在 2010 年后才广泛应用),tanh 是当时比 sigmoid 更优的选择。尽管 tanh 仍有梯度消失问题,但已解决了 sigmoid 的核心缺陷(零中心、梯度强度)。

后来,ReLU 因 计算简单、梯度更稳定(正区间导数恒为 1) 逐渐成为主流,但在 序列建模的早期阶段,tanh 的设计是神经语言模型突破传统 N-gram 的关键一步 ------ 它让连续词向量的学习更高效,为后续发展奠定了基础。

综上,图中隐藏层用 tanh,是因为它在 零中心特性、梯度传递效率、非线性表达能力 上更适配神经语言模型的训练需求,相比 sigmoid 更能解决当时的核心痛点(稀疏性、梯度消失、长依赖建模)。


RNN-based LM

基于 RNN 的语言模型(RNN-based LM)突破 "长历史依赖" 的瓶颈,核心是 用循环隐状态替代固定窗口的独热编码,让语言模型首次具备处理 长距离历史依赖 的能力,为后续 LSTM、Transformer 等模型奠定了 "序列循环建模" 的基础。从 "固定窗口" 到 "动态记忆",使模型能捕捉句子级甚至段落级的语义关联(如 "猫" 和远早出现的 "鱼" 的关联)

复杂模型的诞生:突破 RNN 的瓶颈

上方的复杂架构(如神经图灵机变体)针对传统 RNN 的两大痛点设计:

  1. 长依赖遗忘 :普通 RNN 隐状态易丢失早期信息 → 引入 显式记忆模块(Memory) 存储长期信息。
  2. 交互粗粒度 :对历史信息利用粗糙 → 通过 注意力(Attention)+ 精细寻址(Addressing),像 "数据库查询" 般精准提取记忆。

本质:给 RNN 加装 "外挂记忆" 和 "精细操控系统",试图处理更长、更复杂的序列(如长文本、程序代码)。

记忆如何 "存" 和 "取"

(1)记忆更新(Update memory)

  • 基于当前输入 wt+1w^{t+1}wt+1、注意力 ata^tat 等,通过 元素乘法(⊙)和加法 动态修改记忆单元:保留关键信息,覆盖冗余内容,让记忆 "可控更新"。

(2)寻址(Addressing)

分五步精细操作(Match→Normalization→Interpolation→Shift→Sharpening):

  • Match:计算查询与记忆的相似度(内积);
  • Normalization:归一化相似度,转化为概率;
  • Interpolation:结合历史权重,平滑读取位置;
  • Shift:微调读取位置(处理序列顺序);
  • Sharpening:强化高概率位置,让读取更聚焦。

像给模型配了 "记忆索引 + 插值微调",解决 "记忆太多,不知读哪" 的问题,但 架构复杂、训练难度陡增

LSTM 的务实优势:简单有效,经优化仍能打

  • LSTM 的核心价值 :通过门控机制(输入 / 遗忘 / 输出门),天然缓解长依赖遗忘,架构比复杂模型简单,训练更稳定。
  • 工程现实 :在很多场景中,精心调优的 LSTM(加正则、优化器) 能逼近复杂模型的效果,却避免了高复杂度的代价(训练慢、部署难)。

提升LAS


如何将语言模型(LM)集成到 LAS 模型(Listen-Attend-Spell,端到端语音识别模型)" 的技术框架,从 "集成时机(when)""集成方式(how)" 两个维度分类:


浅融合(Shallow Fusion) 将语言模型(LM)与 LAS 模型结合,核心是 "解码阶段在输出概率层直接融合,无需修改模型结构"

模块结构:独立训练,解码融合

LAS 解码器

  • 训练目标 :学习 PLAS(Y∣X)P_{LAS}(Y|X)PLAS(Y∣X)(语音→文本的条件概率)。
  • 结构:
    • 黄色模块:解码器的隐状态(如 RNN/LSTM 隐状态),逐步生成输出。
    • 橙色模块:输出层,通过 Softmax 生成 词汇表(大小 VVV)上的概率分布 PLAS(y)P_{LAS}(y)PLAS(y)
  1. 语言模型(LM)
  • 训练目标 :学习 PLM(Y)P_{LM}(Y)PLM(Y)(文本自身的概率,即语言先验)。
  • 结构:
    • 绿色模块:LM 的隐状态(如 RNN 结构),输入为序列结束符 <EOS> 或历史词。
    • 蓝色模块:输出层,通过 Softmax 生成 同词汇表(大小 VVV)的概率分布 PLM(y)P_{LM}(y)PLM(y)
  1. 融合层(紫色模块)
  • 操作:在对数域将两者的概率相加(避免数值下溢):

    logP融合(y)=logPLAS(y)+λlogPLM(y)logP_{融合}(y)=logP_{LAS}(y)+λlogP_{LM}(y)logP融合(y)=logPLAS(y)+λlogPLM(y)

    • λ :平衡系数(如 λ=0.5,控制 LM 和 LAS 的贡献权重)。
  • 解码决策 :对每个位置,选择 融合后概率最高的词(图中 "max" 操作,对应 beam search 等解码算法)。

"浅融合" 的核心特点

  1. "浅" 的本质

    仅在 输出概率层 融合,不修改 LAS 或 LM 的内部结构(如隐藏层、注意力模块),无需重新训练,工程实现简单。

  2. 独立训练,解码复用

    • LAS 和 LM 可 完全独立训练(LAS 用语音 - 文本配对数据,LM 用纯文本数据)。
    • 解码时 "即插即用",直接结合两者的概率,快速提升输出的语言合理性(如纠正 "我吃床" 为 "我吃饭")。
  3. 优缺点对比

    优势 局限
    实现简单,无训练成本 语言信息未参与模型内部决策
    复用预训练模型,灵活适配 融合效果弱于 "深融合"(改隐藏层)

深融合(Deep Fusion) 的核心逻辑,对比浅融合,其关键是 "在模型内部隐藏层融合,需重新训练",以下分步拆解:

深融合的架构逻辑

  1. 双输入流
  • 绿色路径:语言模型(LM)的信息流(如文本的词嵌入、隐状态,代表语言先验)。
  • 黄色路径:LAS 模型的信息流(如语音编码器输出、解码器隐状态,代表语音→文本的映射)。
  1. 融合层(灰色 Network)
  • 位置 :模型的 隐藏层 / 中间特征层(而非浅融合的输出概率层)。
  • 作用 :让 LM 和 LAS 的特征 深度交互(如拼接、相加、门控融合),使语言知识参与模型内部的决策过程(如影响 RNN 隐状态更新、注意力权重)。
  • 需要训练,让参数学习 "如何最优结合 LM 和 LAS 的特征"。

更换 LM 的连锁反应

  • 若替换 LM(如从 N-gram 换为 BERT),深融合的 融合层参数是针对旧 LM 训练的 ,新 LM 的特征分布不同,必须 重新训练融合网络 以适配,否则无法有效融合。

深融合 vs 浅融合:核心对比

维度 浅融合(Shallow) 深融合(Deep)
融合位置 输出概率层(表层) 隐藏特征层(深层)
训练需求 无需重新训练 必须重新训练
语言知识影响 仅修正最终输出 深度参与特征交互
工程复杂度 低(即插即用) 高(模型修改 + 重训)

深融合在此图中选择 SoftMax 之前的 logits(未归一化的线性输出,保留更丰富的梯度信息),要不同 LM 的 输出维度一致(Size V,与词汇表大小匹配) ,就能替换(如从 N-gram 换为 BERT,只需确保 LM 输出层维度为 V )。通过 "SoftMax 前 logits 融合 + 标准化维度接口",在保留 "深度特征交互" 优势的同时,提升了 LM 的可替换性 和 训练效率。

冷融合(Cold Fusion) 的核心逻辑,属于 "预训练 + 微调" 范式,核心是 "训练 LAS 前,用预训练语言模型(LM)的参数初始化 LAS,继承语言知识"。

  • 基于海量纯文本数据,LM 学习语言规律(如词嵌入、RNN/LSTM 参数),得到 通用语言知识(如 "dog" 和 "jump" 的语义关联)
  • 在 LM 预训练参数的基础上,微调适配语音任务(学习 "语音特征→文本" 的映射,修正语言知识与语音场景的偏差
相关推荐
极限实验室11 分钟前
Coco AI 实战(一):Coco Server Linux 平台部署
人工智能
杨过过儿22 分钟前
【学习笔记】4.1 什么是 LLM
人工智能
巴伦是只猫31 分钟前
【机器学习笔记Ⅰ】13 正则化代价函数
人工智能·笔记·机器学习
大千AI助手39 分钟前
DTW模版匹配:弹性对齐的时间序列相似度度量算法
人工智能·算法·机器学习·数据挖掘·模版匹配·dtw模版匹配
AI生存日记1 小时前
百度文心大模型 4.5 系列全面开源 英特尔同步支持端侧部署
人工智能·百度·开源·open ai大模型
LCG元1 小时前
自动驾驶感知模块的多模态数据融合:时序同步与空间对齐的框架解析
人工智能·机器学习·自动驾驶
why技术1 小时前
Stack Overflow,轰然倒下!
前端·人工智能·后端
超龄超能程序猿2 小时前
(三)PS识别:基于噪声分析PS识别的技术实现
图像处理·人工智能·计算机视觉
要努力啊啊啊2 小时前
YOLOv3-SPP Auto-Anchor 聚类调试指南!
人工智能·深度学习·yolo·目标检测·目标跟踪·数据挖掘