
视频元信息
- 视频标题:1.7 对新序列的采样(Sampling Novel Sequences)
- 所属课程:吴恩达深度学习专项课程 - 序列模型(Sequence Models)
- 章节:第1周 循环序列模型(Recurrent Neural Networks)
- 前置知识:RNN 语言模型、Softmax 输出层、词级/字符级建模
内容摘要(TL;DR)
本节讲解如何从训练好的 RNN 语言模型中采样生成新序列。核心是:将上一时刻采样得到的输出 ŷ⟨t⟩ 作为下一时刻的输入 x⟨t+1⟩,逐步生成词序列,直到遇到 EOS 标记或达到预设长度。同时对比了词级语言模型与字符级语言模型的优缺点,并展示了新闻文本和莎士比亚风格文本的采样实例。
一、采样生成新序列的核心思想 [00:11]
语言模型的本质是建模某个特定词序列出现的概率:
P(y⟨1⟩, y⟨2⟩, …, y⟨T⟩)
训练完成后,我们希望从这个概率分布中采样,从而生成全新的、训练集中未曾出现过的词序列。
- 训练时:网络使用真实标签 y⟨t⟩ 作为下一时刻的输入(teacher forcing)。
- 采样时:网络使用自己上一步预测/采样出来的 ŷ⟨t⟩ 作为下一时刻的输入。
理解:这正是"自回归生成"(autoregressive generation)的思想雏形——用模型自己的输出喂给自己,逐步展开序列。
二、采样过程逐步拆解 [00:38]
1. 第一个时间步 [00:44]
- 输入:x⟨1⟩ = 0(零向量),a⟨0⟩ = 0(初始隐藏状态为零)。
- 第一个时间步的 Softmax 输出给出词表中每个词作为第一个词的概率分布。
- 例如:P(A)、P(Aaron)、P(Zulu)、P(\<UNK>)、P(\<EOS>) 等。
2. 随机采样第一个词 [00:58]
使用 NumPy 命令根据 Softmax 概率分布进行随机采样:
np.random.choice(vocab_size, p=softmax_probs)
易错点:这里不是取 argmax(概率最大的词),而是按概率分布随机采样。取 argmax 会导致每次生成的序列完全相同,失去多样性。随机采样才能让不同次运行产生不同的句子。
3. 将采样结果作为下一步输入 [01:40]
- 假设第一步采样得到 "Z"("Z" 是英文中常见的首字母)。
- 将 "Z" 作为 x⟨2⟩ = ŷ⟨1⟩ 传入第二个时间步。
- 第二个时间步的 Softmax 输出给出:在第一个词是 "Z" 的条件下,第二个词的概率分布 P(y⟨2⟩ | y⟨1⟩="Z")。
4. 循环递推 [02:43]
- 将 ŷ⟨2⟩ 采样结果(例如表示为 one-hot 编码)作为 x⟨3⟩ 传入下一步。
- 重复此过程,逐步采样第三个词、第四个词……直到最后一个时间步。
推导:整个采样过程的联合概率可写成:
P(ŷ⟨1⟩) · P(ŷ⟨2⟩|ŷ⟨1⟩) · P(ŷ⟨3⟩|ŷ⟨1⟩,ŷ⟨2⟩) · …
每一步都是在前面已生成序列的条件下,对下一个词做条件概率采样。
三、如何判断序列结束 [03:08]
有两种常见策略:
| 策略 | 说明 |
|---|---|
| 遇到 EOS 标记 | 若词表中包含句末标记 \<EOS>,持续采样直到生成 \<EOS>,即表示句子结束 |
| 设定固定长度 | 若词表中不含 \<EOS>,可预设采样 20 词、100 词等,达到指定时间步数后停止 |
处理 \<UNK> 标记 [03:36]
采样过程中可能会生成未知词标记 \<UNK>,有两种处理方式:
- 拒绝重采样:如果采样结果是 \<UNK>,则丢弃该样本,从剩余词表中重新采样,直到得到有效词。
- 直接保留:如果不介意输出中出现 \<UNK>,可以直接保留在生成结果中。
注意:拒绝重采样虽然能避免 \<UNK>,但会轻微改变原始概率分布(相当于条件化在"非 UNK"上),在需要严格概率一致性的场景下需谨慎。
四、词级 vs 字符级语言模型 [04:10]
词级语言模型(Word-level RNN)
- 词表:英文单词集合(通常几万到几十万)。
- 序列表示:y⟨1⟩, y⟨2⟩, … 对应训练数据中的每个单词。
- 优点:序列较短,能较好捕捉长距离依赖关系。
- 缺点:遇到词表外的词只能用 \<UNK> 表示。
字符级语言模型(Character-level RNN) [04:19]
- 词表:字母 a–z(可含大写 A–Z)、空格、标点符号、数字 0–9 等。
- 构建方式:扫描训练集,统计其中出现的所有字符来定义词表。
- 序列表示:y⟨1⟩, y⟨2⟩, … 对应训练数据中的每个字符。
举例:句子 "Cats average 15 hours of sleep a day"
| 位置 | y⟨1⟩ | y⟨2⟩ | y⟨3⟩ | y⟨4⟩ | … |
|---|---|---|---|---|---|
| 字符 | C | a | t | (空格) | … |
字符级模型的优缺点 [05:32]
优点:
- 永远不会遇到未知词:任何词都能由字符组合而成。
- 例如 "Mao" 这种词,字符级模型能赋予其非零概率;而词级模型若词表中没有该词,只能分配 \<UNK>。
缺点:
- 序列非常长:英文句子通常 10–20 个词,但可能有几十个甚至上百个字符。
- 长距离依赖捕捉能力较弱:序列越长,早期信息传递到后期的难度越大。
- 计算开销更大:训练成本显著高于词级模型。
当前趋势:NLP 领域主流仍以词级语言模型为主。随着计算能力提升,字符级模型在特定场景(如大量未知词、专业词汇)中逐渐受到关注,但总体仍未广泛使用。
思考:字符级模型的优势在于其"开放性词表"特性,这在处理拼写错误、新造词、多语言混合文本时尤为重要。但在标准 NLP 任务中,词级模型+子词(subword)分词(如 BPE)往往是更实用的折中方案。
五、采样实例展示 [07:23]
吴恩达展示了字符级语言模型的采样效果:
-
训练语料:新闻文章 生成文本示例:"new to customer epidemic to be examined" 特点:看起来像新闻文本,语法不完全正确,但风格接近。
-
训练语料:莎士比亚作品 生成文本示例:"the more to move half the equals in love and subject that does not add another to…" 特点:听起来像莎士比亚可能写出的句子,风格模仿得相当到位。
这些例子说明:语言模型不仅能学到词汇和语法,还能捕捉到训练语料的风格特征。
六、本节小结与后续预告 [08:03]
本节核心要点回顾:
- 从 RNN 语言模型采样的关键是:将上一步的采样输出作为下一步的输入。
- 使用
np.random.choice按 Softmax 概率分布随机采样。 - 序列终止可通过 \<EOS> 标记或预设长度控制。
- 词级模型序列短、长距离依赖好;字符级模型无未知词、但序列长、计算贵。
下节预告:
- RNN 训练中的梯度消失问题(Vanishing Gradients)
- GRU(Gated Recurrent Unit,门控循环单元)
- LSTM(Long Short-Term Memory,长短期记忆网络)
关键标签/关键词
RNN 语言模型 序列采样 np.random.choice Softmax 词级模型 字符级模型 EOS UNK 自回归生成 梯度消失 GRU LSTM 吴恩达深度学习 序列模型
生成时间:2026-10-11 00:29:43 生成平台:VideoNote www.xygy.top