CS336:第 1 讲 把语言模型当作工程问题
小结
这一讲把语言建模当成资源约束下的工程问题。核心信息很直接:想理解现代 LM,就要自己搭一遍栈,因为高级 API 会把那些仍在变化、也经常漏水的抽象藏起来。
大想法:
-
前沿模型具有工业规模、昂贵且大多不透明,因此小型模型无法再现有关前沿行为的所有内容。
-
从小规模实验中能迁移出来的,主要是机制和心态:Transformers、训练、硬件、数据和 scaling 如何互相牵制。
-
“苦涩的教训”并不是“规模最重要”,而是:可扩展的算法会赢。一个有用的视角是
accuracy = efficiency x resources。 -
现代 LM 设计很大程度上由效率驱动:不要把算力浪费在坏数据、过长的 token 序列、低效架构、糟糕超参或低硬件利用率上。
分词
这一讲的技术中心是 tokenization,也就是把字符串变成整数 token 序列,再能还原回去。
关键权衡:分词器平衡词汇量与序列长度。
-
字符级分词的往返很干净,但 Unicode 大约有 150K 个字符,其中很多很少见。
-
字节级分词的固定词表很小,只有 256,但会产生很长的序列。Transformer 不喜欢这一点,因为注意力成本大致随序列长度平方增长。
-
词级分词很直观,但词表会变得巨大而开放;没见过的词还要靠笨拙的
UNK处理。 -
BPE 是实用的折衷方案:从字节开始,重复合并最频繁的相邻标记对,并从语料库统计中学习词汇。
这一讲给 BPE 的直觉是:常见字符串应该变成短 token 序列,罕见字符串可以拆成更小碎片。Tokenization 是“必要之恶”:它适合今天的计算约束,但未来可能会被更可扩展的字节级模型替代。