WMX · 随记
·AI· 3 分钟阅读

从二元统计理解下一个 token 预测

语言模型输出下一个符号听起来抽象。先用相邻字符的频率做一个极小模型,可以直观看到“给定上下文,得到候选分布”的过程。

▶ 本文含视频讲解
▶ 教学视频手动播放 · 英语讲解

Let's build GPT: from scratch, in code

结合模型讲解理解本文实验的背景;正文提供可独立运行的简化示例。此为外部原版课程,多篇笔记可能共用;未剪辑为本文专属视频。

播放器需要能访问 YouTube 的网络;若这里无法加载,可打开原视频。本文与本地图解仍可独立阅读。

AI 系列概览:模型机制、系统边界与效果评估
AI 系列概览:模型机制、系统边界与效果评估 点击图片查看大图 ↗

问题从哪里出现

语言模型输出下一个符号听起来抽象。先用相邻字符的频率做一个极小模型,可以直观看到“给定上下文,得到候选分布”的过程。

理解核心机制

二元模型只观察前一个字符,把后继字符的出现次数归一化为概率。它保留很少的上下文,因此适合解释条件概率,却无法承担现代语言模型的能力。

动手做一个小实验

Python 3.11 或更新版本,仅使用标准库;将示例保存为 demo.py 后执行 python3 demo.py。数字与样本均为教学演示,不代表真实模型或服务器的测量结果。

Python10 行 · 可横向滚动
from collections import defaultdict, Counter
text = "banana bandana"
counts = defaultdict(Counter)
for previous, current in zip(text, text[1:]):
    counts[previous][current] += 1
row = counts["a"]
total = sum(row.values())
probabilities = {char: count / total for char, count in row.items()}
assert abs(sum(probabilities.values()) - 1) < 1e-12
print(probabilities)

适用边界与常见误区

未见过的前缀没有分布,需要平滑或回退。训练文本很小时,频率只是样本现象,不能被解读为语言规律;这里的字符也不等于实际模型 token。

继续练习

加入另一段文本,比较同一前缀的分布变化,再尝试使用前两个字符,观察稀疏程度如何增加。

参考资料

阅读相关官方文档或原始资料 ↗

← 返回文章归档