Module 01 · Recurrent Neural Networks
Language Model and Sequence Generation语言模型与序列生成
语言建模是自然语言处理(NLP)中的基础任务之一,也是 RNN(递归神经网络)表现非常出色的任务。在本视频中,我们将探讨如何利用 RNN 来构建一个语言模型,并最终通过一个有趣的编程练习,帮助你使用该模型生成类似莎士比亚的文本以及其他类型的文本。🎉
让我们开始吧!🚀
1.什么是语言模型?
语言模型的作用是预测某个句子的概率。比如,如果你正在构建一个 语音识别系统,并且你听到一句话:“苹果和梨沙拉很好吃”
你可能会疑惑,我是说 apple and pair salad 还是 apple and pear salad? 🤷♀️
虽然这两个句子发音相同,但我们通常会认为 "apple and pear salad" 更有可能。其实,正是 语言模型 帮助语音识别系统做出了正确的判断。通过语言模型,系统会计算这两个句子出现的概率。

语言模型的工作原理:
- 它会评估一个句子在语言中的合理性。
- 比如,它可以预测 "apple and pear salad" 的概率远高于 "apple and pair salad"。
2.语言模型的应用
2.1语音识别与机器翻译
语言模型不仅用于语音识别系统,还广泛应用于 机器翻译,它能确保翻译系统输出的句子是有可能出现的。
例如,在机器翻译中,系统会根据 输入句子 和上下文,输出一个可能性最大的翻译结果。
2.2语言模型的核心功能
语言模型的主要任务是,给定一个句子,它要告诉你这个句子出现的概率。这些概率可以用来帮助预测在自然语言中,某个句子出现的可能性。
3.如何构建语言模型?
3.1训练数据与词汇表
要构建一个语言模型,你首先需要一个 大型语料库,比如英语文本或你要处理的任何其他语言的文本。这个语料库包含大量的句子。接着,你需要:
- 对句子进行 分词,并将每个词映射到 词汇表 中。
- 词汇表 是所有可能单词的集合。你可以将这些单词映射到 一热向量(one-hot vector)或者 索引 上。
例如,我们有句子:
"Cats average 15 hours of sleep a day" 🐱
- 首先,将句子进行分词,构建词汇表。
- 然后,将句子中的每个词转换为词汇表中的索引或 一热编码。
额外标记:EOS
为了帮助模型识别句子的结束,你可以添加一个 EOS(End Of Sentence)标记,表示句子的结束。

3.2处理未登录词:UNK
在你的训练集中,如果有一些词不在词汇表中,怎么办?例如,如果词汇表中只有 10,000 个常见单词,而 “Mau”(一种猫的品种)不在其中,你可以将这些未登录词替换为一个 UNK(未知词)标记。
4.RNN 架构与语言建模
接下来,让我们构建一个 RNN 来建模这些单词序列的概率。我们使用之前的句子 “Cats average 15 hours of sleep a day” 作为示例。
4.1RNN 输入与激活
- 在时间步 0,模型的输入是一个 零向量,激活 a_1 将被计算出来。
- 随后,Softmax 层将输出一个 预测,计算句子中第一个词出现的概率。
Softmax 输出
在 Softmax 层中,模型会计算所有词汇表中每个单词出现的概率,判断哪些单词更可能是下一个单词。
- 比如,模型会计算 “a”,“cats” 或 “Aaron” 等词的概率。
- 这个过程是逐步进行的,在每一个时间步,RNN 会根据已经输入的单词,预测下一个最可能的单词。
4.2训练过程与损失函数
- 在训练过程中,我们使用 Softmax 损失函数 来计算每个时间步预测的误差。
- 损失函数定义为:
其中,T 是句子的总长度。
通过在大规模训练集上的训练,RNN 能够根据已知单词序列预测下一个单词的概率。

5.语言模型的应用:生成文本
训练好的语言模型不仅可以用来预测句子的下一个单词,还能用来 生成新的文本!在下一期视频中,我们将探讨如何从模型中 采样生成文本。
通过 RNN 和训练得到的语言模型,你可以生成类似 莎士比亚 风格的文本,或者其他类型的有趣文本。
总结:构建语言模型的步骤
| 步骤 | 描述 |
|---|---|
| 准备训练数据 | 获取大量文本数据,构建词汇表并进行分词 |
| 处理未登录词 | 使用 UNK 标记替换训练数据中未出现在词汇表的词 |
| 构建 RNN 模型 | 使用 RNN 来预测单词序列,逐个预测每个单词的概率 |
| 训练与损失函数 | 使用 Softmax 损失 函数进行训练,最小化预测误差 |
| 文本生成 | 基于训练好的模型,生成新的文本内容(如莎士比亚风格的文本) |
通过本视频,你已经了解了如何使用 RNN 构建一个语言模型,并掌握了模型的基本结构和训练方法。接下来,在实际练习中,你将亲手实现这个模型,并通过 RNN 生成一些有趣的文本!🎉
不要担心如果这些概念还显得有些抽象,你将会在接下来的练习中实践这些技术。我们在下个视频中将讨论如何从语言模型中 采样 文本。📜
期待与您一起进一步探索这个令人兴奋的主题!