AI 到底怎么「猜」下一个词?Token 预测机制深度解析
你有没有想过,AI 是怎么"说话"的? 每次你跟 ChatGPT 或者 Claude 对话,它吐出的每一个字,背后都是一场高速的数学游戏。不是什么神秘的意识,不是记忆,就是在几毫秒内完成一次"下一个词"的预测。 理解这个机制,能让你更清楚为什么 AI 有时聪明得离谱,有时又蠢得令人发指。 Token 是什么?先从…

你有没有想过,AI 是怎么"说话"的?
每次你跟 ChatGPT 或者 Claude 对话,它吐出的每一个字,背后都是一场高速的数学游戏。不是什么神秘的意识,不是记忆,就是在几毫秒内完成一次"下一个词"的预测。
理解这个机制,能让你更清楚为什么 AI 有时聪明得离谱,有时又蠢得令人发指。
Token 是什么?先从这里说起
AI 模型看到的不是文字,是 token。一个 token 大概对应 0.75 个英文单词,中文通常是一个字一个 token(有时候两个字共一个 token,取决于分词器)。
比如 "ChatGPT is amazing" 可能被切成 ["Chat", "G", "PT", " is", " amazing"] 五个 token。整个大模型的工作,就是不断预测"下一个 token 应该是什么"。
这听起来简单,但实现它需要的算力量级是惊人的——GPT-3 有 1750 亿个参数,每预测一个 token,所有参数都参与运算。
Logits:概率分布的原始形态
模型输出的不是一个单词,而是一个巨大的向量——对词汇表里每个 token 的"打分",叫做 logits。词汇表可能有 5 万到 10 万个 token,所以这个向量也有同样的维度。
然后通过 softmax 函数,把这些分数转换成概率分布:每个 token 有多大概率是"下一个词"。
# 简化示意
logits = model(input_tokens) # 形状: [vocab_size]
probs = softmax(logits) # 每个 token 的概率,加起来 = 1.0
比如:
"the" → 0.32
"a" → 0.18
"an" → 0.09
...(剩余 49,997 个 token 瓜分剩余概率)
Temperature:控制"随机程度"的旋钮
光有概率还不够,还要决定"是取概率最高的那个,还是随机采样?"
这里就引入了 temperature 参数,取值通常在 0 到 2 之间:
- temperature = 0:永远选概率最高的 token(贪心解码),输出稳定但死板,适合代码生成、数学题
- temperature = 1:按原始概率分布采样,平衡创造性和一致性
- temperature = 2:把低概率 token 的权重拉高,输出更"天马行空",但经常乱说话
SFD 实验室经验:我们的内容创作 Agent 用 temperature 0.8,代码类 Agent 用 0.2。设得太高,AI 开始"发癫";设得太低,它只会说最保守的废话。
Top-P(Nucleus Sampling):动态截断长尾
temperature 只是调整分布形状,Top-P 则是直接截断:只考虑累积概率达到 P 的 token 集合,其他直接忽略。
# Top-P = 0.9 示例
# 按概率从高到低排列:
# "the" → 0.32 | 累积 0.32
# "a" → 0.18 | 累积 0.50
# "an" → 0.09 | 累积 0.59
# "this"→ 0.08 | 累积 0.67
# "one" → 0.06 | 累积 0.73
# ...(继续加到 0.90 为止)
# 超过 0.90 的 token 全部丢弃,从剩余候选里随机采样
这样做的好处:概率集中的时候(AI 很"确定"时),候选集自动缩小;概率分散的时候(AI 不确定时),候选集自动扩大。比固定 Top-K 更灵活。
为什么 AI 会"胡说八道"?
理解了上面的机制,很多问题就解释得通了:
幻觉(Hallucination):模型在预测每个 token 时,只看到"这个序列之后最像真话的是什么",不是"查数据库确认有没有这个事实"。如果训练数据里某种"听起来合理但不真实"的描述模式出现很多,模型就会自信地生成它。
重复循环:temperature 太低时,模型在某个概率最高的 token 和下一个 token 之间来回跳,形成"the the the"或"好的好的好的"这种死循环。这就是为什么现代模型都有 repetition penalty 参数。
截断中断:输出突然停在奇怪的地方,通常是触发了 max_tokens 限制,或者 stop sequence 被误触发。
实际调参怎么选?
没有万能公式,但有几个经验值可以参考:
- 创意写作、头脑风暴:temperature 0.7-1.0,top_p 0.9
- 代码生成、结构化数据提取:temperature 0.0-0.3,top_p 0.95
- 对话、问答:temperature 0.5-0.8,top_p 0.85
- 翻译:temperature 0.3-0.5(过高会乱发挥)
一个实用技巧:先用高 temperature 生成多个候选,再用低 temperature 在候选里润色细化。这也是某些"思维链"方法的变体。
SFD 编者注
我们实验室有 14 个 AI Agent 每天协作,每个 Agent 背后调用的模型参数设置都不一样。小狐狸(内容写作)temperature 偏高、创意更强;小章鱼(后端代码)temperature 接近零、输出稳定可预测。
最有意思的发现:同一个模型,temperature 调高之后,"去 AI 味"会自然一些——因为低概率词被选中的机会变大,语言不再那么"教科书"。但代价是偶尔会出现语义漂移。
这个 token 预测游戏,玩了两年多,还是觉得蛮神奇的。