Lec1 介绍与基础

词袋模型

在自然语言处理中的一种简化表示方法,其中文本(如句子或文档)被表示为词的袋(多重集合),忽略语法甚至单词顺序,但保留多重性(频率)

优点:

  • 简单性: 非常容易理解和实现。
  • 效率: 对于文档分类或垃圾邮件检测等基本任务计算开销小。
  • 可解释性: 可以轻松查看哪些单词(特征)对预测最重要。

缺点:

  • 上下文丢失: 忽略单词顺序(例如,“Not good”和“Good not”看起来相同)。
  • 稀疏性与高维度: 类似于独热编码,向量大小随着词汇量的增加而增长,导致“维度诅咒”。
  • 缺乏语义相似性: 无法捕捉“boat”和“ship”之间的关系。

独热编码

定义:将离散值转换为二进制向量,且只有一个位置为1,其他为0。

缺点:

  • 简单直接
  • 每个标记是单一表示

优点:

  • 标记的数量意味着向量的维度
  • 稀疏性,需要更多存储
  • 无法表示两个不同单词之间的关系

Lec2 学习表示

子词模型(例如,BPE,FastText)

定义: 将单词拆分为更小的单位(子词或字符n-gram)。频繁的单词保持完整,而稀有单词被拆分(例如,“unhappiness” \(\rightarrow\) “un”, “happi”, “ness”)。

  • 优点:

    • 有限的词汇大小 / 处理相同根词
    • 处理OOV(词汇外): 可以通过对其子词求和生成从未在训练中见过的单词的嵌入。
    • 形态丰富性: 对于具有多种词形的语言(如土耳其语或德语)非常有效。

    缺点:

    • 计算开销: 训练和推理速度较慢,因为模型必须处理每个单词的更多标记。
    • 过度标记化: 一些单词可能被拆分成太多无意义的片段,失去“整体单词”的语义完整性。
    • 语言依赖性: 子词拆分的效率在不同语言之间差异显著(例如,英语与中文)。

连续词袋模型

定义: 基于神经网络的模型(Word2vec),根据周围的上下文单词预测目标中心单词

优点:

  • 快速训练: 比Skip-gram快得多,因为它每个上下文窗口只进行一次预测。
  • 对频繁单词更好: 为在数据中频繁出现的单词提供更稳定的表示。
  • 低维度: 生成稠密的固定大小向量(例如,300维)而不是稀疏向量。

缺点:

  • 位置模糊: 它对上下文单词向量进行平均,这意味着它忽略了窗口中单词的具体顺序
  • 在稀有单词上表现不佳: 由于它对上下文进行平均,稀有单词往往会被频繁的邻居“平滑”或淹没。

Lec3 语言建模

语言模型(LM)定义了所有可能的标记序列的概率分布:\(P(X) = P(x_1, x_2, \dots, x_T)\)

应用: 评分序列(流畅性)、文本生成、条件生成(机器翻译、摘要)、问答、分类、语法纠正。

自回归语言模型

将联合概率分解为下一个标记的预测: \[ P(X) = \prod_{t=1}^{T} P(x_t \mid x_{<t}) \]

这将序列建模简化为下一个标记建模,输出空间为词汇表。

二元模型

仅使用前一个标记预测下一个标记:\(P(X) \approx \prod_{t=1}^{T} P(x_t \mid x_{t-1})\)

训练(最大似然估计): \[ P(x_t \mid x_{t-1}) = \frac{\text{count}(x_{t-1}, x_t)}{\sum_{x'} \text{count}(x_{t-1}, x')} \]

  • 优点: 简单、快速,引入核心语言模型概念(最大似然估计、对数空间、自回归生成)
  • 缺点: 上下文有限(1个标记),没有长距离依赖,没有单词相似性

训练目标

目标:\(\max_\theta \sum_{x \in D} \log p_\theta(x)\) — 等价于 \(\min_\theta D_{KL}(p^* \parallel p_\theta)\)

对数空间: 防止下溢,将乘法转化为加法:\(\log P(X) = \sum_{t} \log P(x_t \mid x_{<t})\)

文本生成

迭代采样:从[S]开始 → 采样 \(x_t \sim P(x_t \mid x_{<t})\) → 附加 → 在[EOS]处停止

评估指标

负对数似然: \(\text{NLL} = - \sum_{i,t} \log P(x_t^{(i)} \mid x_{<t}^{(i)})\)(越低越好)

困惑度: \(\text{PPL} = \exp\left(-\frac{1}{T}\sum_{i,t} \log P(x_t^{(i)} \mid x_{<t}^{(i)})\right)\) — 测量模型的“困惑”,越低越好

N-gram模型

基于前 \(n-1\) 个标记进行条件化:\(P(X) \approx \prod_{t=1}^{T} P(x_t \mid x_{t-n+1:t-1})\)

平滑(加一):\(P(x_t \mid c) = \frac{1 + \text{count}(c, x_t)}{|V| + \sum_{x'} \text{count}(c, x')}\)

  • 优点: 更长的上下文、快速、可解释、强记忆
  • 缺点: 无参数共享,无法处理长距离依赖,随着 \(n\) 增大词汇爆炸

前馈神经语言模型(Bengio等,2003)

用神经网络替换计数表:词嵌入 → 连接 → 隐藏层 → softmax

\[ P(x_t \mid x_{<t}) = \text{softmax}(W h), \quad L_t = -\log P(x_t \mid x_{<t}) \]

  • 优点: 在相似单词/上下文之间共享参数,稠密表示,更好的泛化能力
  • 缺点: 固定上下文窗口(通过RNN/Transformer解决)

实际训练

  • 数据集划分: 训练(拟合参数)/验证(调整超参数)/测试(最终评估,仅使用一次)
  • 过拟合: 验证损失增加而训练损失减少 → 使用正则化,提前停止
  • 权重初始化: Xavier: \(W \sim \mathcal{U}\left(-\sqrt{\frac{6}{n_{in}+n_{out}}}, \sqrt{\frac{6}{n_{in}+n_{out}}}\right)\)
  • 学习率: 初期较大(探索)→ 后期较小(收敛);预热稳定早期梯度
  • 批处理: 填充可变长度序列,在前向传播和损失中掩盖填充

关键要点

  • LM = 自回归分解的概率序列建模
  • 进展:二元模型 → N-gram → 神经语言模型(整个过程中的相同最大似然目标)
  • 细致的评估和实验设置至关重要