Zipf 定律(Zipf's law)说的是:把一段文本里的词按出现次数从多到少排名,第 n 名的出现次数大致与 1/n 成正比。也就是说,如果第一名出现 1000 次,第二名大约 500 次,第三名大约 333 次,第十名只剩 100 次左右。
这意味着语言的两极分化极其严重:中文里的"的、了、是、在",英文里的 the、of、and,这几个词反复出现,合起来就占了文本的很大一块;而绝大多数词——专业术语、人名地名、生僻字——可能整份语料里只露面一两次。后半部分就是常说的"长尾"(long tail)。
打个比方:一个国家的城市人口。排第一的大城市住着上千万人,第二名少一截,往下迅速衰减,排到几千名开外的小镇可能只有几百人。随机挑一个国民,大概率住在大城市;随机挑一个词,大概率是高频词。齐夫本人当年就是从"说话人图省力、听话人也图省力"这个角度解释的:常用词被反复打磨得又短又省事,罕见词则没必要。
几点提醒:这只是"大致"规律,真实语料的指数会偏离 1,不同语言、不同文体(法律合同 vs 聊天记录)差别不小;中文还多一层麻烦——什么算"一个词"取决于分词口径,"中国人"算一个还是三个,结果就变了。
| 概念 | 说的是什么 | 关注点 |
|---|---|---|
| Zipf 定律 | 词频与排名成反比,排名越靠后越罕见 | 频次分布的形状 |
| 幂律分布 / 长尾 | 更一般的分布家族,Zipf 是它在词频上的具体体现 | 少数占大头、多数极罕见 |
| Heaps 定律 | 文本越长,出现的不同词越多,但增速越来越慢 | 词汇量的增长速度 |
对做模型的人来说,Zipf 定律几乎是 tokenizer(分词器)的设计说明书。BPE、WordPiece 这类算法本质上就是按频次合并:把总是挨在一起的高频片段合成一个 token,让常见文本用更少的 token 表示;罕见词则被切成若干子词,靠子词组合兜底。词表大小是个权衡——词表越大,长尾覆盖越好,但 embedding 参数和输出层计算都跟着涨,而且长尾 token 训练时见得太少,学不扎实。这也是模型在生僻专有名词、罕见拼写上容易出错的常见原因之一。
工程上同理:高频查询直接缓存,长尾交给语义检索;输入法的联想、搜索的自动补全,都是同一条曲线的应用。
对普通职场人来说,实用的结论只有一句:遇到模型答不好的小众术语,别急着判定它"不行",换个常见说法、补一点上下文,效果往往立刻不一样。
