你所在的小区有个乒乓球俱乐部,每周举办“全民擂台赛”。新会员入门时统一从 1500 分起步,每打完一局,记分员就拿出小本本:如果强手赢了弱手,强手只加一两分;可要是新手爆冷掀翻高手,新手能一口气涨二三十分。大家都心服口服,因为这套“赢了加分、输了减分、分差决定加减多少”的规则,恰好是一个叫 Elo 的评分系统。 当把擂台上的乒乓球选手换成大语言模型,把“比赛”换成“匿名对决”——让两个模型回答同一个问题,由真实用户投票谁答得更好——你就得到了 LMArena 这类“大模型竞技场”的排行榜。全球顶尖大模型正是靠着 Elo 分数在这个榜单上明争暗斗。这套算法从国际象棋赛场一路走进 AI 评测体系,是理解“模型排行榜如何诞生”的第一块敲门砖。
掌握 Elo 评分系统,你就能看懂大模型排行榜背后的数据逻辑,并为自己的模型设计科学的评测与迭代指标——这是每一位 AI 评测工程师的核心技能。
可视化演示
展示Elo预期胜率计算与评分更新机制、Chatbot Arena模型排行榜与Bootstrap置信区间分析,交互切换模式查看Elo评测各维度。
本节配有交互动效(进入视口后自动加载,约 3KB)。
Elo评分更新机制 预期胜率:E_A = 1/(1+10^((R_B-R_A)/400)) 评分更新:R\'=R+K×(S-E) K因子控制评分变动幅度 ΔR = K × (实际得分 - 预期胜率) 胜者评分上升,败者下降
评分起源
小区乒乓球俱乐部早年没有积分制,谁强谁弱全凭几个老队员拍脑袋。有人抱怨“上周明明打赢了老王,怎么排名还垫底”,裁判也说不清。直到记分员翻出一本泛黄的国际象棋棋书,把里面的“等级分”搬到了乒乓球台,争议才平息下来。
这套等级分制度由匈牙利裔美国物理学家 Arpad Elo 在 1960 年代提出,1970 年被国际棋联(FIDE)正式采用。它的核心哲学是:每个选手背后有一个隐藏的“真实实力”分数,每一场比赛都是对这个分数的带噪观测——赢一场不一定说明更强,但赢多了分数自然会爬上去。
2023 年以来,LMSYS 团队把这套思想迁移到 AI 评测:让两个大模型匿名回答同一个用户问题,由真人投票选出更优者,再用 Elo 更新分数。由此诞生了 Chatbot Arena(现称 LMArena)。如今“排行榜第几名”已经成为模型发布时最有分量的宣传语之一。
老棋书里的智慧跨越了半个多世纪,从黑白棋盘一路走进神经网络时代。它告诉我们:只要存在“两两对决”和“胜负反馈”,就能给任何参赛者排出一张可信的座次表。
核心公式
记分员的小本本上最关键的一步,是赛前先算出“谁更可能赢”。实力差距越大,爆冷概率越低。这个“赛前预期”在 Elo 里叫做期望得分,公式如下:
比赛结束后,记分员根据“实际结果”和“赛前预期”的偏差来改分。如果结果符合预期,分数几乎不动;如果爆冷,分数大幅调整。更新公式如下:
记分员的这套“期望账本”保证了公平:强手胜弱手只加一分,因为那是理所当然;弱手爆冷胜强手能加二十分,因为那颠覆了账本。正是这种不对称,让积分永远向“真实实力”靠拢。
- 确定实际得分赢为 1,输为 0,平局为 0.5。
- 计算偏差实际得分减去期望得分,爆冷时偏差大,意料之中时偏差小。
- 乘上学习率K 值控制单局最大调整幅度,K 越大分数变化越剧烈。
- 累加到原分把调整量加到旧分数上,得到本轮更新后的评分。
对战机制
俱乐部不可能让所有会员两两打一遍——那需要几百场比赛。于是采用“随机配对、现场挑战”的方式:谁有空谁上台,每场比赛都是一次独立抽样,打得多的人分数自然更可信。
LLM 竞技场也沿用了同样的思路。它并不要求所有模型两两全覆盖,而是让“对局”自然发生,核心流程有四步:随机挑选两个模型,用户提交一个真实问题,两个模型匿名作答,用户投票选优或判平。系统每收到一条有效投票,就触发一次 Elo 更新。
这种异步机制带来三个好处。一是省数据:对局数只需随模型数量线性增长,就能支撑起可靠的排名,而不是两两全排列的平方级成本。二是去偏见:匿名展示让用户无法因为品牌名气而偏心,只能凭答案质量说话。三是近真实:用户提交的 prompt 来自真实世界,覆盖编程、写作、数学、闲聊等自然分布,比固定测试集更能反映“群众口碑”。
在篮球场上这叫“自由组队”,在 AI 评测里这叫“众包对局”。Elo 不挑剔对手,也不挑剔观众,它只要求一件事:对决是真实的、随机的、足够多的。
参数调优
记分员发现,小本本上还有三个旋钮可以调:K 值像是“记分员的脾气”,初始分像是“大家的起跑线”,400 像是“难度标尺”。调得不合适,榜单要么疯疯癫癫,要么死气沉沉。
K 值是单局最大调整量。国际棋联的做法是新手用 K=40,顶尖高手用 K=10,因为高手的分数已经过大量对局校准,不该被单场意外撼动。LLM 竞技场常取 K≈24,并在 10 到 32 之间调参。K 大收敛快但噪声大,K 小稳定但反应慢,这是一对绕不开的矛盾。
初始分数决定新模型入场时的起点。国际象棋标准是 1500,部分竞技场采用 1000。初始分并不神秘——它最终会被对局“冲掉”,但它决定了新模型在冷启动期会排在哪个位置。标尺 400 则决定“分差到胜率”的映射:调小它,分数普遍膨胀;调大它,分数普遍收缩,榜单的“水分”也随之改变。
除此之外,配对策略也很讲究:随机配对能保证无偏,但有些系统会让“对局次数少的模型优先出战”,以加速数据收集。调这三个旋钮就像调音箱的高低音——没有绝对正确的值,只有“适合当前赛场”的值。
数据处理
擂台赛裁判收到的投票并不都可信:有人乱点一通,有人只投自己喜欢的队伍,还有人觉得两边都好干脆弃权。如果把这些脏数据直接记进小本本,榜单就会被系统性地带偏。
因此,真正落地的 Elo 系统都配备一条数据清洗流水线。第一层是内容过滤:剔除答非所问的对话、内容为空或明显离题的样本。第二层是行为过滤:限制同一用户重复投票,识别并剔除机器人刷票。第三层是标签净化:有些竞技场只统计“明确关注了系统提示词”的用户投票,以降低恶意操纵。
平局也是一种重要信号。两个模型势均力敌时,硬分胜负会让分数被单场运气左右,所以 Arena 将平局记为 0.5 分,双方都获得小幅修正。最后,光有点估计还不够——榜单上“第一名比第二名高 20 分”,这 20 分到底是真差距还是噪声?统计学家用 Bootstrap 重采样给出置信区间:
裁判最后给出的不是一句“某队排名第几”,而是一份带着误差带的报告。把运气和噪声明明白白标出来,榜单才经得起推敲。
- 准备重采样样本从原始投票集合中有放回地抽取 B 套新样本,B 常取 1000。
- 逐样本重算分数对每套重采样数据完整跑一遍 Elo 更新,得到 B 个分数估计。
- 排序取分位点把 B 个估计从小到大排列,取 2.5% 和 97.5% 位置的值作为区间端点。
- 构成置信区间两端点之间的范围,表示真实分数有 95% 的概率落在这里。
算法性能
新入会的小白选手头几场分数乱跳,赢了强手能加 20 分,输给新手又能跌回去。这不是记分员出错,而是因为他的实力还没被“校准”——所有评分系统在冷启动期都会这样。
冷启动问题是 Elo 迁移到 LLM 评测时最明显的痛点:新模型对局少,分数噪声大,过早打出排名会误导用户。常见的对策是设置“最小对局数”门槛,比如至少几百场投票才有资格上榜。同时,榜单尾部的模型因为对局稀疏,分数波动剧烈,因此通常只展示前几十名,避免把噪声当真相。
随着对局数增加,分数更新的幅度会逐渐收窄,最终趋于稳定。工程上常用如下收敛判据:
老球员的分数纹丝不动,不是因为他们不打比赛,而是因为大量对局已经把他们的分数“校准”到位。收敛越快、越稳的系统,越能让人信任那张榜单。
- 记录相邻两次分数$R_{t-1}$ 是上一次更新后的分数,$R_t$ 是本次更新后的分数。
- 取偏差绝对值$|R_t - R_{t-1}|$ 度量本轮评分“动了多少”。
- 与阈值比较当连续多轮满足该不等式,就判定该模型分数已收敛。
优化演进
老记分法有个先天缺陷:所有观众的投票权重一模一样,但懂球的人和随手乱点的人,显然不该拥有同样的影响力。于是记分员开始给投票“称重”——靠谱的观众权重更高,乱点的观众权重趋近于零。
这就是加权投票的思路:根据用户历史投票与大众共识的一致性,动态调整每条投票的权重。与之配套的还有平局的精确建模:把 0.5 分从“折中”升级为“概率模型的一部分”。这些改进最终都指向同一个统计框架——Bradley-Terry 模型,它给出两个模型对战胜率的显式形式:
现代竞技场还会按 prompt 语言、答案长度、对话轮数分组计算分数,以消除“长答案偏好”和“英语偏好”带来的偏差。经过这些打磨,“英雄榜”不再是一本粗糙的小本本,而是一台精心校准的统计机器。
- 指数化分数把两个模型的原始分数分别取自然指数,得到正的“强度值”。
- A 强度作分子分子是 A 的强度。
- 双方强度之和作分母两者相加做分母,保证概率归一化。
- 比值即胜率A 的强度占总强度的比例,就是 A 胜过 B 的概率。
AI 应用场景
大模型公测竞技场排行榜
阶段:模型评测与基准测试(LLM Evaluation)
解决的问题:传统评测靠人工专家给模型输出打分,成本高、主观性强、难以规模化。Elo 通过“众包对战 + 分数更新”,把“谁的答案更受欢迎”自动转化为可排序的分数,且支持海量真实用户实时参与。
具体案例:LMArena(原 Chatbot Arena)上,用户随意输入一个 prompt,两个匿名模型同时作答,投票后系统立即更新分数。每周发布的排行榜成为业界引用最多的模型实力参考之一。
企业内部模型迭代盲评
阶段:模型迭代回归测试
解决的问题:微调新版本后,如何客观判断“变好还是变差”?一两条 sample 说明不了问题,逐条人工打分又太慢。Elo 盲评把新旧模型与基线模型随机配对,用投票数据给出分数差和置信区间。
具体案例:某团队对 500 条 prompt 做 A/B 盲评,新版本 Elo 分数比线上版本高 18 分,但置信区间重叠,最终决定继续训练而不是贸然上线——避免了凭直觉发货的翻车。
RLHF 偏好建模
阶段:人类反馈强化学习(RLHF)
解决的问题:奖励模型本质上要回答“人类更偏好哪个回答”。Bradley-Terry(Elo 的统计等价形式)恰好提供了可微的对战胜率形式,可直接作为奖励模型的训练目标。
具体案例:从人类标注的偏好对(chosen / rejected)中采样,用负对数似然训练奖励模型,再交给强化学习优化策略。无数大模型的对齐训练都依赖这个被 Elo 验证过的建模思路。
Python 演示
import mathimport random class ArenaElo: """A lightweight Elo rating system for LLM battle evaluation.""" def __init__(self, k=32, initial=1500): self.ratings = {} self.k = k self.initial = initial def get_rating(self, model): return self.ratings.get(model, self.initial) @staticmethod def expected(ra, rb): return 1.0 / (1.0 + 10.0 ** ((rb - ra) / 400.0)) def report(self, winner, loser, tie=False): ra, rb = self.get_rating(winner), self.get_rating(loser) ea = self.expected(ra, rb) sa, sb = (0.5, 0.5) if tie else (1.0, 0.0) self.ratings[winner] = ra + self.k * (sa - ea) self.ratings[loser] = rb + self.k * (sb - (1.0 - ea)) @staticmethod def model_win_prob(delta_mu, scale=0.7): return 1.0 / (1.0 + math.exp(-delta_mu / scale)) def simulate(self, models, rounds=3000, seed=42): random.seed(seed) true_mu = {m: random.gauss(0.0, 1.0) for m in models} for _ in range(rounds): a, b = random.sample(models, 2) if random.random() < self.model_win_prob(true_mu[a] - true_mu[b]): self.report(a, b) else: self.report(b, a) def leaderboard(self): return sorted(self.ratings.items(), key=lambda x: x[1], reverse=True) def main(): models = ["model-alpha", "model-beta", "model-gamma", "model-delta", "model-epsilon"] arena = ArenaElo(k=24) arena.simulate(models, rounds=3000) print("Leaderboard after 3000 random battles:") for rank, (name, score) in enumerate(arena.leaderboard(), 1): print(" {}. {}: {:.1f}".format(rank, name, score)) if __name__ == "__main__": main()
self.ratings.get(model, self.initial)新模型首次出现时默认拿到初始分,无需提前注册。return 1.0 / (1.0 + 10.0 ** ((rb - ra) / 400.0))期望得分公式的代码形态,核心就是一个 logistic 函数。self.ratings[winner] = ra + self.k * (sa - ea)胜者分数更新:实际得分减期望得分,再乘 K。sa, sb = (0.5, 0.5) if tie else (1.0, 0.0)平局双方记 0.5,胜负则胜方记 1、负方记 0。return 1.0 / (1.0 + math.exp(-delta_mu / scale))用 Bradley-Terry 概率模拟“真实世界”里强者胜出的概率。random.sample(models, 2)随机匿名配对,保证对战无偏。random.seed(seed)固定随机种子,让实验可复现。sorted(self.ratings.items(), key=lambda x: x[1], reverse=True)按分数降序生成排行榜。
常见误区
误区听说排行榜第一名比第二名高 20 分,那我直接用第一名的模型就行,Elo 分数就是模型实力的绝对尺子。
正解Elo 分数是相对量,受对战分布、投票人群和时间窗口影响。榜首 20 分的领先可能完全落在置信区间之内(比如 ±15 分),并不构成显著差异。正确做法是比较置信区间是否重叠,而不是盯着小数点咬死差距。
为何常见:人天生喜欢把数字当作精确真理,排行榜的排序又进一步强化了“一分耕耘一分收获”的错觉。
误区K 值调大,分数更新快,新模型打几场就能追上老模型,收敛得更快,那我干脆用 K=100。
正解K 值是“学习率”,太大等于把单场比赛的分量无限放大。偶然爆冷会带动分数剧烈震荡,几场坏数据足以把模型抬进前三。工程上要在响应性和稳定性之间取平衡,比如国际棋联对新老选手使用不同 K 值。
为何常见:直觉上“更新快 = 学得快”,容易忽略噪声也被同步放大的副作用。
误区反正投票数量很大,噪声会相互抵消,把原始投票直接丢给 Elo 就行。
正解随机噪声确实会互相抵消,但系统性偏差不会。刷票、答非所问的对话、同一账号反复提交,都会把分数往某个方向推。真实的竞技场都有清洗流水线:过滤无效对话、限制重复投票、剔除离题样本。
为何常见:大数定律给人“样本多就可靠”的安全感,却忽略了大数定律只对独立同分布的噪声成立。
误区Elo 是棋类比赛用的积分,Bradley-Terry 是统计学里的偏好模型,它们是两个风马牛不相及的东西。
正解两者在数学上等价。Elo 的期望胜率公式 $1/(1+10^{(R_B-R_A)/400})$ 本质上就是 Bradley-Terry 的 logistic 形式,只是把“强度参数”用 400 分的标尺具体化了。理解这一层,才能把排行榜经验平滑迁移到 RLHF 奖励模型上。
为何常见:两个概念来自不同学科,命名习惯和符号体系不同,掩盖了底层的同构关系。
面试题
Q1. 在 Elo 评分中,期望得分 EA = 0.75 表示什么?
- A.A 击败 B 的概率约为 75%← 正确答案
- B.B 击败 A 的概率约为 75%
- C.A 与 B 平局的概率约为 75%
- D.本场得分总和约为 75 分
答案:A。期望得分就是“预计能拿到的分数”,胜取 1、平均 0.5,因此 E=0.75 含义是 A 有约 75% 概率获胜。选项 B 是反过来的概率,C 说的是平局概率,D 混淆了得分与概率。
Q2. Elo 更新公式中,平局时双方的实际得分取多少?
- A.双方各记 1.0 分
- B.双方各记 0.5 分← 正确答案
- C.获胜一方记 1 分
- D.双方都记 0 分
答案:B。平局意味着双方都没赢、都没输,各记 0.5 分最合理。记 1 分会导致双方分数同时上涨,记 0 分则抹掉了“打成平手”这一信息。
Q3. 弱手爆冷击败强手,下列说法正确的是?
- A.双方评分都保持不变
- B.强手反而会大幅度加分
- C.弱手加分多于强手扣分
- D.弱手加分等于强手扣分← 正确答案
答案:D。由于期望得分之和为 1,胜者加分 K×(1−E胜者) 恰好等于败者扣分 K×E败者,幅度完全一致。C 是常见误解,其实分数只是从败者转移给了胜者,不会凭空多出来。
Q4. 关于 K 值,下列说法正确的是?
- A.K 值越大评分越稳定
- B.K 值越大单局波动越大← 正确答案
- C.K 值必须固定为 32
- D.K 值与模型水平无关
答案:B。K 是单局最大调整量,越大单局波动越剧烈、噪声越敏感。国际棋联对新手用 40、高手用 10,说明 K 往往与选手水平和对局经验相关,并非固定值。
Q5. 大模型竞技场(LMArena)收集对战数据时的正确做法有?
- A.匿名展示两个模型的回答← 正确答案
- B.随机配对模型进行对决← 正确答案
- C.只许二选一不许投平局
- D.采用真实用户的提示词← 正确答案
答案:ABD。匿名避免品牌偏见、随机配对保证无偏采样、真实用户 prompt 让评测贴近自然分布,三者都是竞技场设计要点。平局是重要信号,应当允许用户判平并记 0.5 分,因此 C 错误。
Q6. 两个模型分数相差 400 分时,强手的期望获胜率约为?
- A.大约是 0.75
- B.大约是 0.91← 正确答案
- C.大约是 0.50
- D.大约是 0.99
答案:B。代入期望公式 1/(1+10^(−400/400)) = 1/(1+0.1) ≈ 0.909。这正是 Elo 标尺的设定:400 分差对应约九成胜率,让分数差直观对应实力台阶。
Q7. 关于 Elo 迁移到 LLM 评测,正确的说法有?
- A.排行榜分数可直接跨榜比较
- B.原始投票数据需要清洗筛选← 正确答案
- C.排名比绝对分数更有参考意义← 正确答案
- D.用户投票天然无偏无需处理
答案:BC。不同榜单的对战分布、投票人群、时间窗口都不同,分数不能直接跨榜比较,但“谁排在前面”具有相对参考价值,因此 A 错、C 对。用户投票存在刷票、乱投、答非所问等系统性偏差,必须清洗,B 对、D 错。
Q8. 冷启动问题在 LLM 评测中指什么?
- A.模型温度参数初始设置过低
- B.新模型对局少导致分数不稳← 正确答案
- C.服务器启动阶段评测延迟高
- D.模型初始分数永远无法更新
答案:B。冷启动指新模型入场时对局数太少,分数噪声大、排名不可信。解决办法是设置最小对局数门槛,等分数收敛后再上榜。它跟温度参数、服务器延迟、初始分能否更新都无关。
Q9. 以下哪些属于对 Elo 评分系统的常见改进?
- A.按用户可靠性加权投票← 正确答案
- B.直接删除所有低分模型
- C.引入平局零点五分建模← 正确答案
- D.采用 Bradley-Terry 模型← 正确答案
答案:ACD。加权投票降低乱点用户的影响,平局 0.5 分更平滑,Bradley-Terry 是 Elo 的统计等价表达,三者都是真实改进。“删除低分模型”会破坏对战随机性和榜单完整性,不是评分改进。
Q10. A、B 两模型实力接近,期望胜率约为 0.5,K=24。100 轮无平局后 A 的分数上升了 12 分,则 A 比 B 多赢几轮?
- A.多赢 1 轮← 正确答案
- B.多赢 2 轮
- C.多赢 12 轮
- D.多赢 24 轮
答案:A。期望胜率 0.5 时,A 每赢一轮 +24×(1−0.5)=12 分,每输一轮 −12 分。净增 12 分,说明 12×(胜−负)=12,即 A 比 B 多赢 1 轮。这题考察对“期望决定加减幅度”的定量理解。