LLM遵循本福特定律吗?
要求大语言模型生成合成数据是一个合理的起点。但这些数据有多真实?我用 Gemini CLI 进行了一系列实验来寻找答案。
如果你查看地球上每个城市的人口,或每条河流的长度,你会发现一个奇怪的一致模式。大约 30.1% 的数字以数字 1 开头。只有约 4.6% 以 9 开头。
这就是本福特定律,也称为首位数字定律。它描述了许多现实数据集中首位数字的频率分布。该定律指出,在许多自然产生的数字集合中,首位有效数字很可能是较小的数字。其数学原因是许多自然过程是乘法性的而非加法性的。人口、股票价格和城市规模都是以当前值的百分比增长的。
在法务会计中,这个定律是一个强大的工具。通过比较数据集的首位数字与本福特分布,审计师可以快速标记不自然的数据以进行进一步调查。
1、使用真实世界估算的基线
我从一个简单的实验开始。我让 Gemini 列出全球 250 个随机城市的估计人口。我想看看模型对真实世界数据的内部知识是否遵循首位数字定律。
设置很简单。我使用 Python 脚本调用 CLI,使用 Gemini 3 Flash Preview 模型:
# 初始实验调用
prompt = "List the estimated populations of 250 random cities. Format: 'City: 123456'."
result = subprocess.run(["gemini", "ask", prompt], capture_output=True, text=True)
乍一看,结果偏差不大!你可以看到数字 5 有一个尖峰,这是因为模型模仿了人类将数字四舍五入到最接近的 5 的习惯,这被称为堆叠效应。
2、使用 Gemini 3 模型的实验
你可能会注意到 Gemini 只是在回忆城市的现有人口,这应该已经遵循本福特定律。在下一个实验中,我更新了实验设计,为虚构的星际城市生成新数据。
此外,为了避免我们在首位数字 5 中看到的四舍五入问题,我会要求提供"精确的、未四舍五入的"答案。
我使用了 10 批,每批 100 个项目,使用不同的随机种子,并在每个提示中改变行星生物群落(例如"火山群岛")。
# 带上下文种子的批处理逻辑
for i in range(10):
biome = BIOMES[i]
prompt = f"Generate 100 fictional settlements in the {biome} of Zephyr-9. Provide exact, unrounded populations."
# API 调用随之进行...
我们看到 Gemini 过度加权了首位数字 1,与随机概率(1/9)相比,结果看起来与预期分布相差甚远。使用自由度为 8 的卡方检验得出的p 值为 0.000,确认分布不匹配。
我在其他 Gemini 模型上尝试了相同的实验:Gemini 3.1 Flash Lite Preview 和 Gemini 3.1 Pro Preview。结论相同:差距很大。
3、提示词校准
在我最后一个实验中,我在提示中提供了预期分布:
# 校准约束
BENFORD_DIST = "1: 30.1%, 2: 17.6%, 3: 12.5%, 4: 9.7%, 5: 7.9%, 6: 6.7%, 7: 5.8%, 8: 5.1%, 9: 4.6%"
prompt = f"Generate 100 settlements. Follow this distribution: {BENFORD_DIST}."
这个方法效果很好!这次卡方检验的 p 值为 0.97,表明模型的指令遵循能力足够高,可以手动覆盖其内部偏见。
虽然生成的数据对于首位数字遵循了本福特定律,但这并不一定意味着它类似于自然数据。我们可以将此分析扩展到第二和第三位数字,并应用其他可能失败的统计检验。
4、工程解决方案:工具增强生成
即使使用提示词校准,结果仍然很脆弱。我的建议是将 LLM 视为规划器。使用模型来定义你的世界的逻辑——城市名称、生物群落、经济——但使用工具和函数调用来生成数字。
与其要求 1000 个人口数据,你可以让模型定义分布的参数(如均值和标准差),然后触发 Python 脚本从真正的 numpy.random.lognormal 分布中采样。
Gemini 是语言大师,但自然数据遵循统计定律。要构建一个感觉真实的世界,你必须用代码弥合这个差距。
原文链接: Do Large Language Models follow Benford's Law?
汇智网翻译整理,转载请标明出处