Elo 评分与 LLM Arena
光靠基准测试分数(MMLU、GSM8K 等)不足以衡量 LLM 的真实”好用程度”——很多任务没有标准答案,而静态题库(static benchmark,即固定不变的考题集)还存在数据污染风险(训练时”背过答案”)。Elo 评分系统结合人类盲测对战,提供了一种基于真实偏好的排名方法。LMSYS Chatbot Arena 用这一方法构建了目前公认最权威的 LLM 综合排行榜。本页讲解 Elo 与 Bradley-Terry 模型的数学原理,以及人类偏好评估的完整方法论。前置阅读:LLM 评测与基准。
Elo 评分 = 给 AI 办一场国际象棋锦标赛。
国际象棋选手的水平用等级分(rating)衡量:赢了涨分、输了扣分。击败高手涨得更多,击败菜鸟涨得很少——因为本来就该赢。LMSYS Chatbot Arena 把同一套规则搬到了 LLM 身上:
- 盲测对战:用户提问,两个匿名模型各自回答,用户选出更好的一个(或平局)。
- Elo 更新:赢了涨等级分,输了扣等级分,涨多少取决于双方分差。
- 排行榜:所有对战结果汇总后,等级分高的模型排名靠前。
这套方法的好处是贴近真实体验:不考标准化选择题,而是让真人自由提问、自由评判,衡量的是”用户体感上到底哪个更好”。由于题目完全由用户随机提出,模型开发者无法提前准备,因此在本质上比静态基准更难”刷榜”。
一句话区分:基准测试(benchmark)= 开卷考试,模型可以提前刷题;Arena 对战 = 盲评擂台,考前看不到题,也无法预测对手。
Elo 期望胜率
Section titled “Elo 期望胜率”Elo 系统的核心是一个将等级分差转化为预期胜率的公式。设模型 A 的等级分为 ,模型 B 为 ,则 A 的期望得分(胜率近似)为:
其中分母中的 400 是一个标度常数,表示约 400 分差距对应约 10 倍的胜率比。如果 比 高 400 分,则 约等于 0.91(A 预期赢约九成)。
这个公式本质是一个 logistic 函数——把任意大小的分差平滑压缩到 (0, 1) 区间,天然适合表示概率。它在统计学中的另一个名字是 Bradley-Terry 模型(见下文),二者的数学形式完全等价。
Elo 更新规则
Section titled “Elo 更新规则”每场对战后,根据实际得分与期望得分的差值更新等级分:
其中 是 A 的实际得分(赢为 1,输为 0,平为 0.5), 是 K 因子(K-factor),控制每场对战影响的幅度。 越大,等级分波动越剧烈; 越小,越稳定。国际象棋常用 。
直观理解更新公式: 是”意料之外的成分”。A 本来就该赢( 高),赢了 ,差值很小,涨分也少;A 本来该输( 低),却赢了,差值很大,涨分也多。这是一种类似梯度下降的自我修正机制——等级分不断朝真实实力收敛。
Bradley-Terry 模型
Section titled “Bradley-Terry 模型”Elo 系统背后的统计基础是 Bradley-Terry 模型:假设每个选手有一个实力参数 ,A 击败 B 的概率是:
对实力取对数后(令 )等价于 Elo 中的 logistic 公式。Chatbot Arena 不是逐场更新 Elo,而是用全部对战数据做 最大似然估计(MLE, Maximum Likelihood Estimation)——一种从观测数据反推最可能参数的统计方法——同时拟合所有模型的实力参数,并用 Bootstrapping(有放回重采样,即从原始数据里反复抽样、反复拟合)计算置信区间,因此排名更加稳健。
为什么 MLE 比逐场更新更好? 逐场更新(online Elo)依赖对战顺序,早期对战会”锁定”分数;MLE 一次性看完全部数据,不受顺序影响,且能自然处理平局和稀疏对战(两个模型很少直接交手的情况)。
处理平局与不确定性
Section titled “处理平局与不确定性”真实投票中有大量”平局”(两个回答差不多好)。标准做法是把平局的实际得分设为 0.5,这样:
- 强模型打平弱模型 → 实际 期望(比如 )→ 强模型扣分(表现不如预期)。
- 弱模型打平强模型 → 实际 期望(比如 )→ 弱模型涨分(表现超预期)。
此外,Chatbot Arena 在 2024-2025 年还引入了 Rao-Kupper 扩展(Bradley-Terry 的带阈值变体),显式建模”两者差距在阈值 以内算平局”的决策过程,使平局信息被更充分地利用。
Chatbot Arena 的工作流程
Section titled “Chatbot Arena 的工作流程”- 收集对战:用户在网站上输入任意问题,两个匿名模型(随机选取)同时回答。
- 人类投票:用户选出更好的回答,或判平局,之后才揭晓模型身份。
- 拟合排名:用全部对战数据拟合 Bradley-Terry 模型,得到每个模型的 Elo 分数。
- 置信区间:用 Bootstrapping(有放回重采样)重复拟合多次,得到分数的 95% 置信区间。
- 分领域排行:除总榜外还按编程、数学、创意写作、多语言、长上下文等领域分别排名。
已知偏差与 2025 年的修正
Section titled “已知偏差与 2025 年的修正”Arena 的结果并非完美无偏,社区已识别并积极修正几类系统性偏差:
| 偏差类型 | 表现 | 修正方法 |
|---|---|---|
| 冗长偏差(verbosity bias) | 用户倾向投更长的回答 | 长度控制(length-controlled Elo):按 token 数分桶后再拟合 |
| 位置偏差(position bias) | 用户倾向选左边或右边的回答 | 随机化左右顺序 + 对称性检验 |
| 风格偏差(style bias) | 排版美观、用 Markdown 加粗胜过内容质量 | 引入”风格控制”回归项 |
| 自增强偏差(self-enhancement) | 用户偏好与自己观点一致的回答 | 难以完全消除,需结合客观基准交叉验证 |
2024 年 LMSYS 发布的 长度控制 Arena 是一项重要改进:通过在 Bradley-Terry 模型中加入回答长度作为协变量(covariate),剥离了”因为更长所以得分高”的成分,使排名更纯粹地反映内容质量。类似地,Artificial Analysis 等第三方平台也提供按价格、速度、长度归一化后的性价比视图,帮助开发者做出更理性的选型决策。
自动化 Arena 与 LLM-as-Judge
Section titled “自动化 Arena 与 LLM-as-Judge”人类投票成本高、速度慢。2024-2025 年的一个重要趋势是用强模型当裁判(LLM-as-Judge),替代人类做盲测投票:
- Arena-Hard:用 GPT-4 级模型对 500 道难题的回答做两两偏好判断,再用 Bradley-Terry 拟合排名,成本极低且可复现。
- Chatbot Arena 自动分榜:部分领域已用 LLM 裁判补充人类投票,加速覆盖新模型。
- MT-Bench / AlpacaEval 2.0:类似的自动化偏好评测,附带与人类一致性的校准。
但 LLM-as-Judge 本身也有偏差(如偏好自己生成的内容、偏好特定格式),因此目前最佳实践是人类投票为主、LLM 裁判为辅,并定期做两者一致性的交叉验证。
Chatbot Arena 盲测流程
Section titled “Chatbot Arena 盲测流程”Elo 更新逻辑
Section titled “Elo 更新逻辑”Bradley-Terry 全局拟合 vs 逐场 Elo
Section titled “Bradley-Terry 全局拟合 vs 逐场 Elo”最小 Elo 更新实现
Section titled “最小 Elo 更新实现”import numpy as np
def elo_update(ra, rb, score_a, k=32): """根据对战结果更新 Elo 等级分。
参数: ra, rb: 两个模型当前等级分 score_a: 模型 A 的实际得分(1=赢, 0=输, 0.5=平) k: K 因子,控制每场影响幅度 返回: 更新后的 (ra, rb) """ # 期望得分:基于等级分差的 logistic 函数 ea = 1 / (1 + 10 ** ((rb - ra) / 400)) # "意料之外的成分" × K = 本场涨跌 ra += k * (score_a - ea) rb += k * ((1 - score_a) - (1 - ea)) return ra, rb
# 模拟 Arena 盲测:模型 A 略强,真实胜率约 0.6ra, rb = 1000, 1000np.random.seed(42)for _ in range(200): s = 1 if np.random.rand() < 0.6 else 0 # 1 为 A 赢 ra, rb = elo_update(ra, rb, s)print(f"模型A: {ra:.0f}, 模型B: {rb:.0f}")# 结果:A 分明显高于 B,符合 A 更强的设定用 Bradley-Terry MLE 拟合全局排名
Section titled “用 Bradley-Terry MLE 拟合全局排名”以下用 scipy 对全部对战数据做最大似然拟合——这正是 Chatbot Arena 的核心方法:
import numpy as npfrom scipy.optimize import minimize
# 假设有 4 个模型,收集到如下对战记录: (winner_idx, loser_idx)battles = [ (0, 1), (0, 2), (0, 3), (1, 2), (1, 3), (2, 3), (0, 1), (0, 2), (1, 2), (3, 2), (3, 1), (2, 0), (0, 1), (2, 1), (0, 3), (1, 2), (0, 2), (3, 0),]
n_models = 4
def neg_log_likelihood(log_beta): """Bradley-Terry 负对数似然(越小越好)。
P(i 击败 j) = beta_i / (beta_i + beta_j) 取 log 后对参数做优化,数值更稳定。 """ ll = 0.0 for w, l in battles: # log P(winner wins) = log_beta[w] - log(exp(log_beta[w]) + exp(log_beta[l])) ll += log_beta[w] - np.logaddexp(log_beta[w], log_beta[l]) return -ll # 返回负值,因为 scipy 做最小化
# 初始化所有 log(β) = 0(即 β = 1)result = minimize(neg_log_likelihood, x0=np.zeros(n_models), method="L-BFGS-B")log_beta = result.xbeta = np.exp(log_beta - log_beta.max()) # 归一化,最大者 = 1
# 转换为 Elo 分(基准 1000,标度 400)elo = 400 * (log_beta - log_beta.mean()) / np.log(10) + 1000
for i in range(n_models): print(f"模型 {i}: β={beta[i]:.3f}, Elo≈{elo[i]:.0f}")Bootstrapping 置信区间
Section titled “Bootstrapping 置信区间”def bootstrap_ci(battles, n_bootstrap=1000, ci=0.95): """有放回重采样估计每个模型 Elo 的置信区间。""" rng = np.random.default_rng(42) battles = np.array(battles) elo_samples = [] for _ in range(n_bootstrap): idx = rng.integers(0, len(battles), size=len(battles)) sample = battles[idx] res = minimize( lambda lb: -sum( lb[w] - np.logaddexp(lb[w], lb[l]) for w, l in sample ), x0=np.zeros(n_models), method="L-BFGS-B" ) lb = res.x e = 400 * (lb - lb.mean()) / np.log(10) + 1000 elo_samples.append(e) elo_samples = np.array(elo_samples) lower = np.percentile(elo_samples, (1 - ci) / 2 * 100, axis=0) upper = np.percentile(elo_samples, (1 + ci) / 2 * 100, axis=0) return lower, upper
lo, hi = bootstrap_ci(battles)for i in range(n_models): print(f"模型 {i}: Elo ∈ [{lo[i]:.0f}, {hi[i]:.0f}]")这三段代码完整地复现了 Chatbot Arena 排行榜背后的核心算法:逐场更新 → 全局拟合 → 置信区间。理解了它们,你就能自己搭一个迷你 Arena。
- Arena 是目前最被信任的排行榜:因为它基于大规模真实人类偏好,难以刷榜(题目随机、模型匿名),比静态基准更能反映真实使用体验。详见LLM 评测与基准。
- 关注置信区间而非绝对分数:相邻模型分差很小时(比如差 3 分),排名可能因采样波动而反转。看 Bootstrapping 置信区间是否重叠,比看名义排名更有意义。
- K 因子的选择:K 大则更新灵敏但波动大,K 小则稳定但收敛慢。Chatbot Arena 使用统计拟合而非逐场更新,避免了 K 因子调参问题。
- 投票者偏差:Arena 结果受投票者群体影响——用户可能偏好更长、更礼貌的回答(verbosity bias)。成熟的 Arena 会对这类偏差做统计分析并发布长度控制版本。
- 分领域差异大:总榜强的模型未必在编程或数学领域最强。选模型时看对应领域的 Arena 分榜更有参考价值。2025 年 Arena 已细分出编程、数学、创意写作、多语言、长上下文、视觉理解、Web Agent 等十余个分榜。
- 警惕数据污染对基准的侵蚀:随着模型训练数据越来越庞杂,静态基准(如 MMLU、GSM8K)被”无意背过”的风险持续上升。Arena 的随机出题机制天然免疫于此,这也是它地位上升的根本原因。
- LLM-as-Judge 需校准:用 GPT-4 当裁判时,要注意裁判模型自身的偏好(如偏爱自己风格、偏爱冗长输出)。建议定期用人类投票子集校准裁判的一致性(agreement rate),一般 >80% 才算可靠。
- 关注投票量而非只看排名:一个模型只打了 500 场就排第一,和打了 50000 场排第二,后者的可信度远高于前者。看排行榜时务必注意每个模型的投票样本量。
- LMSYS Chatbot Arena:目前最权威的 LLM 人类偏好排行榜,累计数百万次投票,覆盖几乎所有主流模型。2025 年起其域名也简称为 LMArena,并新增了视觉、编程、Agent 等专项竞技场。
- 模型选型决策:开发者在模型选型时参考 Arena 排名,选择性价比最高的模型。结合长度控制和价格归一化视图,可以做出更理性的判断。
- 竞技场分榜:编程(Hard Prompts)、数学、创意写作、多语言、长上下文、视觉理解、Web Agent 等分领域排行,满足不同场景需求。
- 内部模型评估:企业用同样的盲测对战方法对自研模型与开源/闭源模型做对比评估,不依赖公开题库。Meta、Google、Anthropic 等均在内部维护私有 Arena。
- 自动化评测流水线:CI/CD 中集成 Arena-Hard 或 AlpacaEval 2.0,每次模型迭代后自动跑偏好评测,用 LLM-as-Judge 快速得到相对排名变化。
- 游戏与体育排名:Elo 系统起源于国际象棋,广泛用于围棋(AlphaGo 评分)、电子竞技(如《英雄联盟》的匹配系统)、体育赛事排名。TrueSkill(微软为 Xbox 开发的多人扩展)和 Elo-MMR(开源改进版)是常见的替代算法。
典型类库与工具
Section titled “典型类库与工具”| 类库 / 平台 | 语言 | 说明 |
|---|---|---|
| Chatbot Arena (LMArena) | Web | LMSYS 运营的在线盲测平台,提供公开排行榜与开源对战数据集 |
| arena-hard-auto | Python | LMSYS 出品的自动化 LLM 评测工具,500 道难题 + GPT-4 裁判 + Bradley-Terry 拟合 |
| AlpacaEval 2.0 | Python | Stanford 的自动化偏好评测,附带长度归一化与人类一致性校准 |
| MT-Bench | Python | 多轮对话评测,用强模型当裁判做两两偏好判断 |
| FastChat / Chatbot Arena 后端 | Python | LMSYS 开源的 Arena 服务端代码,可自部署私有竞技场 |
| elo | Python | 轻量级 Elo 计算库,几行代码即可实现等级分更新 |
| trueskill | Python | 微软 TrueSkill 排名系统,支持多人对战的不确定性建模 |
| Elo-MMR | Rust / Python | 改进的多人排名系统,兼顾准确性和计算效率,被多平台采用 |
| ax (Meta) | Python | Meta 的自适应实验平台,支持贝叶斯优化与偏好建模 |
| Artificial Analysis | Web | 第三方平台,提供按价格/速度/长度归一化后的模型性价比对比 |
| 术语 | 英文 | 解释 |
|---|---|---|
| 等级分 | Elo Rating | 衡量选手实力的分数,赢了涨、输了扣,幅度取决于分差 |
| K 因子 | K-factor | 控制每场对战对等级分影响幅度的参数 |
| 期望胜率 | Expected Score | 基于等级分差计算的预期胜出概率,用 logistic 函数计算 |
| Bradley-Terry 模型 | Bradley-Terry Model | 用实力参数比表示胜率的统计模型,,Elo 的理论基础 |
| 最大似然估计 | MLE, Maximum Likelihood Estimation | 给定观测数据,反推最可能产生这些数据的参数值的统计方法 |
| Bootstrapping | Bootstrapping | 有放回重采样估计分数置信区间的方法,Arena 用它算 95% 置信区间 |
| 盲测 | Blind Test | 投票者不知道模型身份的对战方式,避免品牌偏见 |
| 数据污染 | Data Contamination | 训练集里混入了测试集内容,导致基准分数虚高 |
| 冗长偏差 | Verbosity Bias | 评估者(人类或 LLM)系统性偏好更长回答的倾向 |
| 位置偏差 | Position Bias | 评估者偏好左/右特定位置的回答,Arena 通过随机化左右顺序来抵消 |
| 长度控制 | Length-Controlled Elo | 在 Bradley-Terry 模型中加入回答长度作为协变量,剥离冗长偏差后的排名 |
| LLM-as-Judge | LLM-as-Judge | 用强模型(如 GPT-4)充当裁判,替代人类做偏好判断,成本低但需校准 |
| 静态基准 | Static Benchmark | 固定题库的评测集(如 MMLU),容易被数据污染,与 Arena 的动态出题形成对比 |
| 协变量 | Covariate | 回归模型中需要控制的额外变量,如回答长度、格式风格等 |
- Elo,「The Rating of Chessplayers, Past and Present」(1978):Elo 系统创始人 Arpad Elo 的原著,详细阐述等级分系统的设计思想。
- Chiang et al.,「Chatbot Arena: An Open Platform for Evaluating LLMs by Human Preference」(2024):LMSYS Chatbot Arena 论文,详述盲测方法与 Bradley-Terry 拟合。
- Bradley & Terry,「Rank Analysis of Incomplete Block Designs」(1952):Bradley-Terry 模型的原始论文,Elo 系统的数学基础。
- Elo-MMR 论文 (Smith et al., 2023):改进的多人排名系统,兼顾准确性和计算效率,被多平台采用。
- LMSYS Arena-Hard Auto & AlpacaEval 2.0 技术报告 (2024):自动化偏好评测的标杆方案,详述 LLM-as-Judge 的设计与偏差控制。
- Dubois et al.,「Length-Controlled AlpacaEval」(2024):系统性研究冗长偏差并提出长度控制方法的论文。
- LLM 评测与基准:本站配套页面,覆盖客观题基准与人类偏好评估的完整方法论。
- 模型选型:本站配套页面,讲解决策时如何综合 Arena 排名、价格、速度等因素。