文章

06 使用循环神经网络(RNN)构建语言模型

06 使用循环神经网络(RNN)构建语言模型

1. 语言模型的定义与作用

  • 定义:语言模型用于计算一个特定句子(文本序列)出现的概率 $P(y^{<1>}, y^{<2>}, \dots, y^{})$。
  • 应用场景

    • 语音识别:区分发音相似但意义不同的词(如 “pear” vs “pair”)。系统会选择概率更高的句子。

      • 例如:$P(\text{“apple and pear salad”}) \gg P(\text{“apple and pair salad”})$。
    • 机器翻译:帮助生成最自然、概率最高的目标语言句子。

2. 数据预处理与语料库构建

  构建模型前需要大型文本语料库(Corpus),并进行以下处理:

  • 标记化 (Tokenization) :将句子拆分为单词,并映射为字典中的索引(One-hot向量)。
  • 特殊标记

    • EOS (End of Sentence) :附加在句子末尾,表示句子结束。
    • UNK (Unknown) :当遇到字典外的小众词汇(如 “Mau”)时,用此标记替换,仅对 UNK 建立概率模型。
  • 标点处理:可根据需求决定是否将标点符号视为独立标记(笔记示例中忽略了句号)。

3. RNN 语言模型架构

  RNN 通过从左到右依次预测下一个词来建模序列概率。

网络结构流程

  假设输入序列为 $y^{<1>}, y^{<2>}, \dots, y^{}$(其中 $y^{}$ 为 EOS):

  1. 初始化

    • 激活值 $a^{<0>} = \vec{0}$
    • 输入 $\hat{y}^{<0>} = \vec{0}$ (或作为占位符)
  2. 时间步 $t$ 的计算 ($t = 1, 2, \dots, T_y$):

    • 输入:上一个时间步的真实单词 $y^{}$(训练时)和上一个隐藏状态 $a^{}$。
    • 隐藏层更新:计算当前激活项 $a^{}$。
    • 输出预测:通过 Softmax 层输出当前步的预测概率分布 $\hat{y}^{}$。

      • $\hat{y}^{}$ 是一个向量,维度等于字典大小(+ UNK + EOS)。
      • 它表示在已知前 $t-1$ 个词的条件下,下一个词是字典中任意单词的概率:$P(y^{}y^{<1>}, \dots, y^{})$。
  3. 训练机制

    • 在训练过程中,每个时间步都使用真实的上一时刻单词(Ground Truth)作为输入,而不是模型预测的词。这被称为“教师强制”(Teacher Forcing)。
    • 模型目标是让预测分布 $\hat{y}^{}$ 尽可能接近真实标签 $y^{}$。

4. 损失函数 (Loss Function)

  为了训练网络,定义如下代价函数:

  • 单步损失:在时间步 $t$,若真实标签为 $y^{}$,预测值为 $\hat{y}^{}$,则使用 Softmax 损失(交叉熵损失):

    \[\mathcal{L}^{}(\hat{y}^{}, y^{}) = - \sum_{k} y_k^{} \log(\hat{y}_k^{})\]

    (注:由于 $y^{}$ 是 One-hot 向量,实际计算简化为 $-\log(\hat{y}_{true}^{})$ )

  • 总损失函数:整个序列所有时间步损失之和:

    \[\mathcal{L} = \sum_{t=1}^{T_y} \mathcal{L}^{}(\hat{y}^{}, y^{})\]

5. 句子概率计算

  训练好的模型可以计算任意新句子 $y^{<1>}, y^{<2>}, \dots, y^{}$ 的联合概率。根据链式法则,该概率等于各步条件概率的乘积:

\[P(y^{<1>}, \dots, y^{}) = P(y^{<1>}) \times P(y^{<2>} | y^{<1>}) \times P(y^{<3>} | y^{<1>}, y^{<2>}) \times \dots \times P(y^{} | y^{<1>}, \dots, y^{})\]

  对应到 RNN 的输出即为:

\[P(\text{Sentence}) = \prod_{t=1}^{n} \hat{y}^{}_{y^{}}\]

   (其中 $\hat{y}^{}_{y^{}}$ 表示模型在第 $t$ 步预测出真实词 $y^{}$ 的概率值)

6. 后续应用

  • 序列生成 (Sampling) :利用训练好的模型,可以通过从 Softmax 输出的概率分布中采样来生成新的文本序列(如莎士比亚风格的文本)。此时,输入不再是真实标签,而是上一步模型采样得到的词。
本文由作者按照 CC BY 4.0 进行授权