视频封面

视频元信息

  • 所属课程:吴恩达深度学习专项课程 - 序列模型(Sequence Models)
  • 章节:1.6 语言模型和序列生成(Language Model and Sequence Generation)
  • 视频主题:使用 RNN 构建语言模型,估计词序列的概率

内容摘要(TL;DR)

本视频讲解语言模型的基本概念及其在 RNN 中的实现方式。语言模型的核心任务是估计一个词序列出现的概率,广泛应用于语音识别和机器翻译。构建流程包括:准备大规模语料库、分词(tokenize)、建立词表、处理未知词(UNK)和句尾标记(EOS),然后用 RNN 逐词预测下一个词,通过 softmax 输出概率分布,最终用交叉熵损失训练模型。


一、什么是语言模型 [00:25]

1.1 从语音识别引入

视频以一个经典例子开场:语音识别系统听到一句发音模糊的话,可能是:

  • "The apple and pair salad was delicious"(苹果和梨沙拉很好吃)
  • "The apple and pear salad was delicious"

两句话发音完全相同,但人类会判断第二句更合理。语言模型的作用就是告诉系统哪个句子的概率更高。

语言模型给出的概率示例:

  • 第一句概率:3.2 × 10⁻¹³
  • 第二句概率:5.7 × 10⁻¹⁰

第二句的概率高出约 10³ 倍,因此语音识别系统会选择第二句。

1.2 语言模型的定义

核心定义:语言模型输入一个句子(词序列),输出该句子出现的概率。

  • 输入表示:Y₁, Y₂, ..., Y_{T_y}(一个长度为 T_y 的词序列)
  • 输出:P(Y₁, Y₂, ..., Y_{T_y}),即这个特定词序列的概率

理解:所谓"概率"的含义是——如果你随机翻开一份报纸、打开一封邮件、浏览一个网页,或听朋友说的下一句话,这句话恰好是某个特定句子的可能性有多大。

1.3 语言模型的应用场景

语言模型是以下两大系统的基础组件:

  1. 语音识别系统(Speech Recognition):从多个发音相同的候选句子中,选择概率最高的那个
  2. 机器翻译系统(Machine Translation):确保输出的译文是"像人话"的、概率高的句子

考点: 语言模型的两大核心应用——语音识别和机器翻译,是考试中常考的知识点。


二、如何构建语言模型 [02:49]

2.1 第一步:准备训练集(语料库)

需要一个大范围的英文文本语料库(Corpus)。

  • Corpus(语料库):NLP 术语,指一个非常大的文本集合,包含大量英文句子
  • 语料库的语言取决于你要构建哪种语言的语言模型

示例句子:"Cats average 15 hours of sleep a day."(猫平均每天睡 15 小时)

2.2 第二步:分词(Tokenization)

分词就是将句子拆解为一个个词元(token),并建立词表(Vocabulary)。

具体步骤:

  1. 建立词表:收集语料中出现的所有词
  2. 将每个词映射为 one-hot 向量 或词表中的索引

示例分词结果:

位置 词元
Y₁ Cats
Y₂ average
Y₃ 15
Y₄ hours
Y₅ of
Y₆ sleep
Y₇ a
Y₈ day
Y₉ EOS(句尾标记)

2.3 第三步:处理句尾标记(EOS Token)

EOS = End of Sentence(句尾标记)

  • 作用:显式地让模型知道句子在哪里结束
  • 做法:在每个训练句子的末尾追加 EOS token
  • 注意:本周的编程练习中不会使用 EOS token,但在某些应用中它非常有用

易错点: EOS token 是可选的处理方式,不是所有语言模型都必须使用。吴恩达特别指出编程练习中不使用它。

2.4 第四步:处理标点符号

  • 可以选择忽略标点符号(如句号)
  • 也可以将标点符号作为独立的 token 加入词表
  • 这取决于具体应用需求

2.5 第五步:处理未知词(UNK Token)

UNK = Unknown Words(未知词标记)

  • 问题:如果词表只包含最常见的 10,000 个词,那么像 "maul"(伤害)这样的词可能不在词表中
  • 解决方案:将所有不在词表中的词替换为 UNK token
  • 效果:模型只建模"未知词"出现的概率,而不区分具体是哪个未知词

考点: UNK 和 EOS 是语言模型中的两个重要特殊 token,需要理解它们的含义和使用场景。


三、构建 RNN 语言模型 [05:55]

3.1 RNN 架构概述

核心思想:将输入 X_t 设为前一个词 Y_{t-1},让 RNN 从左到右逐词预测。

3.2 逐步详解

时间步 1(t=1):

  • 输入 X₁ = 全零向量(0 向量)
  • 初始激活 A₀ = 全零向量
  • 计算激活 A₁
  • 输出 Ŷ₁:通过 softmax 预测第一个词的概率分布
  • 这是一个 10,000 维的 softmax 输出(假设词表大小为 10,000 + 2 个特殊 token)
  • 预测:P(第一个词是什么)
  • 本例中正确答案是 "Cats"

时间步 2(t=2):

  • 输入 X₂ = Y₁ = "Cats"(告诉模型第一个词实际是 Cats)
  • 计算激活 A₂
  • 输出 Ŷ₂:预测第二个词的概率分布
  • 条件:给定第一个词是 "Cats"
  • 本例中正确答案是 "average"

时间步 3(t=3):

  • 输入 X₃ = Y₂ = "average"
  • 计算激活 A₃
  • 输出 Ŷ₃:预测第三个词
  • 条件:给定前两个词是 "Cats average"
  • 本例中正确答案是 "15"

以此类推...

时间步 9(t=9):

  • 输入 X₉ = Y₈ = "day"
  • 计算激活 A₉
  • 输出 Ŷ₉:预测 EOS token
  • 条件:给定前面所有词

3.3 核心机制总结

RNN 每一步都在做:给定前面所有词,预测下一个词的概率分布。

理解:这种"自回归"式的预测方式,让模型学会了语言的局部依赖关系。每一步的输出都是一个完整的词表概率分布。

重点: X_t = Y_{t-1} 是 RNN 语言模型的关键设计——用前一个真实词作为当前步的输入。


四、损失函数与训练 [10:06]

4.1 单步损失

在时间步 t:

  • 真实词为 Y_t
  • 模型 softmax 预测为 Ŷ_t
  • 使用 softmax 损失函数(交叉熵损失):L_t = -Σ Y_t · log(Ŷ_t)

4.2 整体损失

总损失 = 所有时间步损失之和

L = Σ_{t=1}^{T_y} L_t(Ŷ_t, Y_t)

推导:这与标准的多分类交叉熵一致,只是需要在时间维度上累加。训练时通过 BPTT(时间反向传播)更新参数。

4.3 训练后的能力

训练完成后,模型可以:

  • 给定任意初始词序列(如 "Cats average 50"),预测下一个词的概率
  • 计算整个新句子的概率

4.4 计算句子概率的方法

对于一个新句子 Y₁, Y₂, Y₃:

P(Y₁, Y₂, Y₃) = P(Y₁) × P(Y₂ | Y₁) × P(Y₃ | Y₁, Y₂)

具体来说:

  • 第一个 softmax 输出给出 P(Y₁)
  • 第二个 softmax 输出给出 P(Y₂ | Y₁)
  • 第三个 softmax 输出给出 P(Y₃ | Y₁, Y₂)
  • 将这三个概率相乘,即得整个句子的概率

考点: 句子概率 = 各条件概率的乘积。这是语言模型的核心数学表达,也是链式法则的直接应用。


五、关键概念总结与拓展

5.1 基础概念回顾

概念 含义
语言模型 估计词序列概率的模型
Corpus 大规模文本语料库
Tokenization 将句子拆分为词元
Vocabulary 词表,所有 token 的集合
EOS 句尾标记,标识句子结束
UNK 未知词标记,替换词表外的词
Softmax 输出层,将激活值转为概率分布

5.2 【拓展】语言模型的评估指标

视频中未提及,但作为背景补充:

  • 困惑度(Perplexity):语言模型最常用的评估指标,值越低表示模型越好
  • 困惑度 = 概率的几何平均的倒数,本质上与交叉熵损失密切相关
  • 在吴恩达后续课程中会详细讲解

5.3 【拓展】从 RNN 到现代语言模型

理解:本视频讲解的是基于 RNN 的基础语言模型,这是理解现代大语言模型(如 GPT 系列)的基础。

  • RNN 语言模型存在长程依赖问题(梯度消失/爆炸)
  • 后续发展:LSTM → GRU → Transformer → GPT/BERT
  • 但核心思想不变:给定前文,预测下一个词的概率分布

5.4 【拓展】字符级 vs 词级语言模型

视频中讲解的是词级(word-level)语言模型,但实际应用中还有:

  • 字符级(character-level):以单个字符为 token,词表更小,但序列更长
  • 子词级(subword-level):如 BPE 算法,平衡词表大小和序列长度,是现代主流方案

5.5 容易踩坑的点

易错点 1: X_t = Y_{t-1} 的设计容易混淆——输入是前一个真实词,而非前一个预测词(训练时)。

易错点 2: 句子概率是乘积而非求和,且需要用到链式法则分解。

易错点 3: EOS 和 UNK 是可选设计,不是必须的,取决于具体任务需求。

易错点 4: 编程练习中不使用 EOS token,注意区分理论与实现。


关键标签/关键词

语言模型、RNN、序列生成、NLP、分词、Tokenization、词表、Vocabulary、EOS、UNK、Softmax、交叉熵损失、语音识别、机器翻译、Corpus、语料库、条件概率、链式法则、吴恩达、深度学习、序列模型


生成时间:2026-10-11 00:32:45 生成平台:VideoNote www.xygy.top