Skip to content

第 1 章 语言模型是什么

本章目标:建立对语言模型(Language Model)的直觉认知,理解其数学本质,并明确本项目选择字级别建模的原因。


1.1 什么是语言模型

你每天使用的输入法在你打出"春眠不"之后会自动推荐"觉晓";搜索引擎在你输入一半关键词时就能猜到你的意图;ChatGPT 能流畅地回答各种问题——这些背后都有同一个核心组件:语言模型

语言模型(Language Model,LM)的任务很简单:给一段文字打一个"合理度"分数,即估计这段文字出现的概率。

  • "床前明月光" → 概率高(合理)
  • "光月明前床" → 概率低(不合理)
  • "zxqk 前明月" → 概率极低(几乎不可能)

有了这个能力,模型就可以在多个候选续写中选出最合理的那个,从而实现文字补全、生成等功能。


1.2 条件概率与链式法则

一段文字 x1,x2,,xn 的联合概率,可以用链式法则分解为逐字的条件概率连乘:

P(x1,x2,,xn)=P(x1)P(x2x1)P(x3x1,x2)P(xnx1,,xn1)

写成紧凑形式:

P(x1,,xn)=t=1nP(xtx1,,xt1)

这个公式是所有语言模型的数学基础,无论是最古老的 N-gram 还是最新的大语言模型,都在估计这个条件概率。

直觉理解:给定"春眠不",下一个字是"觉"的概率远高于"猫"。语言模型就是在学习这类条件概率。


1.3 从 N-gram 到神经语言模型

N-gram 模型

最早的语言模型用统计方法来估计条件概率。N-gram 模型做了一个简化假设:当前字只依赖前 N1 个字,而不是全部历史:

P(xtx1,,xt1)P(xtxtN+1,,xt1)

例如,二元模型(Bigram)认为每个字只取决于前一个字:P()0.3

N-gram 的缺陷

  • 长距离依赖:诗的第三行可能与第一行押韵,N-gram 无法捕捉跨越多字的关联
  • 数据稀疏:N 越大,需要见过的 N-gram 组合越多,训练数据永远不够

神经语言模型

神经网络语言模型用一个可学习的函数来估计条件概率,不受 N 的限制,能通过向量表示捕捉更长距离的依赖关系。本项目使用的 RNN 就是神经语言模型的一种经典形式。


1.4 字级别 vs. 词级别

语言模型可以在不同粒度上建模:

粒度示例("春眠不觉晓")优点缺点
字级别['春','眠','不','觉','晓']词表小且固定,无需分词需要更长序列才能表达语义
词级别['春眠','不觉','晓']每个单元语义更完整需要分词,词表大,OOV 问题严重

本项目选择字级别建模,原因如下:

  1. 古诗以单字为基本创作单位,字本身就承载完整语义("春"、"月"、"山")
  2. 整个语料库只有 2439 个不重复的字,词表极小,嵌入层参数量可控
  3. 不需要引入分词工具,流程简洁,适合教学

小结

  • 语言模型 = 估计文本序列的概率分布
  • 链式法则将联合概率分解为逐字的条件概率乘积
  • 神经语言模型通过可学习的函数拟合条件概率,克服了 N-gram 的局限
  • 本项目在字级别建模,词表只有 2439 个字

下一章将介绍如何把这 2439 个字表示成神经网络能处理的向量。

基于 MIT 协议发布