周末的社区活动中心里,王教练看着乒乓球擂台赛的积分表发愁:小张赢了擂主李师傅,可李师傅总共只打了三场;小李打了二十场,胜率却不高;老周专挑新手打,赢了也胜之不武……到底谁才是真正的“社区第一”?这个烦恼,和今天做大模型评测的人一模一样——两个 AI 模型各有胜负,用户投票零零散散,怎么排出一个公平的实力榜? 其实,早在 1952 年,统计学家 Bradley 和 Terry 就为这类“两两对决”的排名问题给出了优雅的数学答案:每个选手背后藏着一个看不见的“实力值”,比赛结果只是这个实力值的投影。只要能根据已有的比赛记录反推出每个人的实力值,排名就顺理成章。后来,国际象棋大师 Arpad Elo 把这一思想变成了我们熟知的 Elo 评分——今天各大 LLM 评测榜单(比如 LMSYS Chatbot Arena)的底层逻辑,都是它的变体。 这篇文章会带着你从“小区擂台赛的排名难题”出发,一步步走到大模型排行榜的核心算法。我们会认识 Bradley-Terry 模型的概率公式、参数估计方法、Elo 评分机制,也会看看它与 TrueSkill 的区别,以及如何在真实的 LLM 评测中落地。学完这些,你就拥有了一把理解 AI 评测底层逻辑的钥匙——无论将来排行榜怎么换花样,你都能看懂它背后的“算分逻辑”。

岗位关联

掌握 Bradley-Terry 模型与 Elo 评分,是成为 AI 评测工程师的必修课——它决定了你能否科学地设计和解读大模型排行榜,是每个 LLM 从业者理解模型能力评估的第一性原理。

目录
  1. 可视化演示
  2. 1. 成对比较:一场擂台赛的数学化
  3. 2. 概率公式:实力如何变成胜率
  4. 3. 最大似然:从结果反推实力
  5. 4. Elo 评分:BT 模型的实战版
  6. 5. TrueSkill:给评分加上不确定度
  7. 6. Arena 应用:大模型擂台赛
  8. 7. 工程落地:评测避坑指南
  9. AI 应用场景
  10. Python 演示
  11. 常见误区
  12. 面试题

可视化演示

展示BT模型的成对比较胜率公式与sigmoid曲线,以及BT批量MLE、Elo在线更新和TrueSkill不确定性建模三种评分系统的对比。

本节配有交互动效(进入视口后自动加载,约 3KB)。

BT模型胜率公式 模型A与模型B的胜率由实力差决定 Sigmoid函数将实力差映射为[0,1]概率 实力差越大,强者的胜率越接近1 P(i>j) = σ(s_i - s_j) 成对比较的经典统计模型

1. 成对比较:一场擂台赛的数学化

王教练的社区乒乓球擂台赛打了一个月,问题接踵而至:小张赢过擂主李师傅,但李师傅只打了三场;小李打了二十场,胜率却不高;老周专挑新手打,胜率虚高……到底谁是真正的“社区第一”?这听起来像个体育问题,却是大模型评测的核心难题——两个模型各有胜负,用户投票的“对局样本”零零散散,怎么排出可信的能力榜?

Bradley-Terry 模型(简称 BT 模型)给出的答案,来自一个极其朴素的观察:虽然比赛结果看起来杂乱,但每个参赛者背后应该有一个稳定的“强度参数”θ(读作西塔),它决定了这个选手面对任何对手时的获胜倾向。你不需要完美预测每一场胜负,你只需要相信:实力强的选手,赢的概率大。这个假设把“离散的胜负”变成了“连续的概率”,为后续的统计推断打开了大门。

1952 年,Bradley 和 Terry 在一篇统计学论文中正式提出这个模型,最初用于食品感官测试和体育赛事排名。它的数学形式优雅且可解释:从“谁赢了谁”的碎片记录中,估计出每个参赛者的相对强度,从而得到一份科学的实力榜。今天,这个模型穿越了七十年的时光,成为大模型评测体系中 Arena Elo 的基石。

回头看王教练的烦恼,他需要的不是简单数胜场,而是一套能把“对手强弱”也考虑进去的算法。BT 模型就是这套算法的灵魂——它让排名从“数人头”升级为“测实力”。

2. 概率公式:实力如何变成胜率

假设我们已经知道了两位选手的强度参数 θ_A 和 θ_B,怎么算出 A 战胜 B 的概率?王教练的直觉是:看两人实力的“砝码比”。如果 A 的砝码是 80,B 的砝码是 20,那么 A 应该赢下 80÷(80+20)=80% 的比赛。这就是 BT 模型的概率公式:

P(A 胜 B)=θAθA+θB=11+e−(λA−λB)P(A \text{ 胜 } B) = \frac{\theta_A}{\theta_A + \theta_B} = \frac{1}{1 + e^{-(\lambda_A - \lambda_B)}}

其中 \lambda_i = \log \theta_i 是对数变换后的“线性实力”。公式右侧的 sigmoid 型变换,把“实力差”压缩到 0~1 之间,与逻辑回归的形式完全一致。

1. 强度比值:θ_A 除以 θ_A 与 θ_B 之和,表示 A 的实力在双方总实力中的占比

θAθA+θB\frac{\theta_A}{\theta_A + \theta_B}

2. 对数实力差:将 θ 换成对数 λ,除法变成减法,为后续的线性化建模铺路

λA−λB\lambda_A - \lambda_B

3. sigmoid 映射:通过 1/(1+e^{-x}) 把任意实数的实力差映射为 0~1 的概率值

11+e−(λA−λB)\frac{1}{1 + e^{-(\lambda_A - \lambda_B)}}

这个公式有两个值得注意的性质:第一,胜率只与实力的相对比例有关,与绝对值无关——把所有人的 θ 同时乘以 10,胜率不变;第二,当双方实力相同时概率为 50%,恰好对应“势均力敌”。王教练发现,用这个公式给小区球友算胜率,比单纯记录胜负场次更有说服力——因为它天然考虑了对手的强弱。

3. 最大似然:从结果反推实力

现在王教练面对的是一个“反向”问题:他知道每场比赛的结果,却不知道每位球员的 θ。怎么从结果反推实力?这正是统计推断的经典任务。BT 模型采用的方法是最大似然估计(MLE):找到一组强度参数,使得“观测到的比赛结果出现的概率”最大。

如果共有 n 场比赛,第 k 场的胜者是 w_k、败者是 l_k,那么整个数据集的似然函数就是将每场胜率连乘:

L(θ)=∏k=1nθwkθwk+θlkL(\boldsymbol{\theta}) = \prod_{k=1}^{n} \frac{\theta_{w_k}}{\theta_{w_k} + \theta_{l_k}}

这个函数看起来复杂,含义却很直白:把每场比赛的获胜概率乘起来,得到一个“总似然”。我们想要的 θ,就是让这个总似然最大的那一组值。

1. 单场胜率:第 k 场比赛中,胜者 w 击败败者 l 的概率

θwkθwk+θlk\frac{\theta_{w_k}}{\theta_{w_k} + \theta_{l_k}}

2. 连乘符号:∏ 表示将所有场次的胜率相乘,因为每场比赛被视为独立事件

∏k=1n\prod_{k=1}^{n}

3. 最大似然估计量:选择使 L(θ) 最大的 θ 作为最终估计结果

θ^=arg⁡max⁡θL(θ)\hat{\boldsymbol{\theta}} = \arg\max_{\boldsymbol{\theta}} L(\boldsymbol{\theta})

直接求出最大值并不容易,但可以用迭代算法逼近。一个经典的迭代公式是:

θi(t+1)=Wi∑j≠inijθi(t)+θj(t)\theta_i^{(t+1)} = \frac{W_i}{\sum_{j \neq i} \frac{n_{ij}}{\theta_i^{(t)} + \theta_j^{(t)}}}

1. 胜场数:W_i 表示选手 i 的总获胜场次,是驱动参数上升的“燃料”

WiW_i

2. 预期贡献分母:n_{ij} 是 i 与 j 的交手次数,除以双方实力和,表示对手给 i 带来的“归一化阻力”

∑j≠inijθi(t)+θj(t)\sum_{j \neq i} \frac{n_{ij}}{\theta_i^{(t)} + \theta_j^{(t)}}

3. 更新公式:用实际获胜场次除以预期阻力,得到本轮的新强度值;重复该过程直到收敛

θi(t+1)=Wi∑j≠inijθi(t)+θj(t)\theta_i^{(t+1)} = \frac{W_i}{\sum_{j \neq i} \frac{n_{ij}}{\theta_i^{(t)} + \theta_j^{(t)}}}

每轮迭代,先根据当前所有 θ 计算“预期阻力”,再用实际胜场数除以它得到新估值。当新旧值的差距小于某个阈值(比如 10⁻⁶)时,就认为收敛,得到最终实力榜。王教练把这个过程叫作“多轮试错校准”:先随便给个初始分,不断根据比赛结果微调,分数自然会长到合理的位置。

4. Elo 评分:BT 模型的实战版

国际象棋大师 Arpad Elo 在 1960 年代把 BT 模型的思想工程化,设计出了 Elo 评分系统。他没有去拟合复杂的 θ,而是对 θ 取对数变换,让评分变成我们熟悉的整数分(比如 1500 分)。这样,期望胜率的计算变得非常简单:

EA=11+10(RB−RA)/400E_A = \frac{1}{1 + 10^{(R_B - R_A)/400}}

其中 R_A、R_B 是两位选手的 Elo 评分。这里的 (R_B−R_A)/400,本质上就是 BT 模型里“对数实力差”的缩放版——只不过把 θ 的比值换成了评分的差值。

1. 评分差:R_B − R_A 表示两位选手的评分差距,正值说明 B 当前评分更高

RB−RAR_B - R_A

2. 标准化缩放:除以 400 是为了让分差落在合理的指数范围内;分差 400 对应 10:1 的实力比

RB−RA400\frac{R_B - R_A}{400}

3. 倍率转换:10 的幂把分差变成“实力倍数”,分差越大倍数越大

10(RB−RA)/40010^{(R_B - R_A)/400}

4. 期望胜率:1 除以 (1+倍数) 将结果压缩到 0~1,得到 A 获胜的期望概率

11+10(RB−RA)/400\frac{1}{1 + 10^{(R_B - R_A)/400}}

比赛结束后,评分按以下规则更新:

RA′=RA+K(SA−EA)R_A' = R_A + K(S_A - E_A)

1. 实际得分:S_A 是比赛实际结果,胜为 1、负为 0

SAS_A

2. 意外程度:S_A − E_A 表示“实际表现超出预期的幅度”,爆冷时为正且较大

SA−EAS_A - E_A

3. 评分更新:R_A 加上 K 乘以意外程度,得到新评分;K 通常取 32,控制单场调整幅度

RA′=RA+K(SA−EA)R_A' = R_A + K(S_A - E_A)

如果 A 赢了(S_A=1)但赛前期望只有 0.4,那么 (1−0.4)=0.6 的“意外程度”会让 A 的评分大幅上升;反之,如果 A 战胜了一个远低于自己的对手,期望接近 1,加分几乎为零。王教练恍然大悟:Elo 系统本质上就是“爆冷多加分、碾压少加分”,这与 BT 模型的逻辑完全一致。

5. TrueSkill:给评分加上不确定度

随着擂台赛规模扩大,王教练发现 Elo 有两个短板:一是只适合单挑,碰上 2v2 或多人混战就束手无策;二是无法表达“这位选手数据太少,排名还不靠谱”。微软研究院开发的 TrueSkill 系统正是为了解决这两个问题。

TrueSkill 把每个选手的实力不再表示为一个固定分数,而是一个高斯分布(均值 μ + 方差 σ)。均值是实力的最佳估计,方差则表示不确定度。新人刚参赛时 σ 很大——“我还不确定你有多强”;随着比赛增多,σ 逐渐缩小,评分越来越可信。更新公式可以直观地写成:

μi′=μi+σi2c(ri−pi)\mu_i' = \mu_i + \frac{\sigma_i^2}{c}(r_i - p_i)

其中 r_i 是实际排名,p_i 是预期排名,c 是全局方差。简单理解:当实际表现超过预期时,μ 向上调整;调整幅度与自己的不确定度成正比——越不确定,越要大改。

1. 表现偏差:r_i − p_i 反映“实际成绩与预期的差”,正数代表超出预期

ri−pir_i - p_i

2. 不确定性放大:乘以 σ²/c 后,方差大的选手获得更大的评分修正

σi2c(ri−pi)\frac{\sigma_i^2}{c}(r_i - p_i)

3. 均值更新:在旧均值上叠加修正量,得到新的实力均值

μi′=μi+σi2c(ri−pi)\mu_i' = \mu_i + \frac{\sigma_i^2}{c}(r_i - p_i)

TrueSkill 的核心贡献是“不确定性感知”:它让系统知道什么时候该相信排名,什么时候不该。这与 LLM 评测的痛点高度吻合——一个新发布的模型只有几百条投票时,Elo 分数可能剧烈波动,而 TrueSkill 式的方差估计能告诉我们“这个分数还不稳”。王教练觉得,这就像给每位球员加了一个“可信度光环”:光环越大,排名的水分越多。

6. Arena 应用:大模型擂台赛

王教练的擂台赛如果搬到线上,让全世界网友当裁判,就变成了 LMSYS Chatbot Arena(简称 LMArena)——目前最著名的大模型众包评测平台。它的运行方式与小区擂台赛如出一辙:每次随机选两个模型,让它们匿名回答同一个用户提示词,然后由真实用户投票选出“更好”的一方。这些成对的投票记录,就是 BT 模型的“对局数据”。

平台上每个模型最初都有一个基准分(比如 1500),每收到一票,就按照 Elo 更新公式调整双方评分。随着投票量累积,模型评分逐渐稳定,最终形成公开排行榜。利用公式 $P = 1/(1+10^{(R_B-R_A)/400})$,用户可以直接把 Elo 分差换算成“模型 A 战胜模型 B 的概率”——比如分差 100 分意味着约 64% 的胜率,这让非专业人士也能直观理解模型之间的实力差距。

值得注意的是,LMArena 的数据并非完美。用户的投票受很多因素干扰:回答长度偏好、模型语气风格、界面随机性等。因此平台会采用随机化展示顺序、筛选低质量投票、剔除样本量不足的模型等措施来保证榜单可信度。这些工程细节,与王教练清理“刷分选手”的智慧不谋而合——排序算法的背后,永远是对数据质量的敬畏。

7. 工程落地:评测避坑指南

回到现实,如果你是 AI 评测工程师,要在自己的评测体系中使用 BT 模型或 Elo 评分,有几个工程要点必须掌握。

首先是数据清洗。用户投票中混着大量无效样本:未阅读就乱点的、固定选第一个的、机器脚本刷票的。常见做法是设置最小响应时长、过滤连续相同选择、用统计方法剔除异常投票者。其次是冷启动问题——新模型没有足够对局时,Elo 分会在初始值附近剧烈摆动,此时可以给新模型一个临时的高方差区间,或者安排“预热赛”(比如先与若干基准模型各对战 N 局)。第三是偏差控制:为了消除“位置偏差”(用户习惯选左边),应该随机交换两个模型的展示位置,并在统计时按位置分层验证。

这种工程化思维用王教练的话说就是:算法负责公平,但数据决定算法能不能公平。再好的 BT 模型,也救不了质量低下的投票数据。因此,优秀的评测工程师不仅要懂公式,更要懂数据的来源与缺陷——这正是从“会用模型”到“会做评测”的分水岭。

AI 应用场景

场景一:LMSYS Chatbot Arena 大模型排行榜

阶段:模型评估与基准测试

解决的问题:传统离线评测(如 MMLU 多选题)无法反映真实用户对模型回答的偏好,而让两个模型同场竞技、由用户投票,能获得更接近“实际使用体验”的能力对比。BT/Elo 方法特别擅长处理非专家产生的、带噪音的投票数据——它不需要裁判是专业人士,只要投票是真实的“更喜欢哪一个”,就能算出相对强弱。

具体案例:一位 AI 评测工程师每天拉取 Arena 的公开投票数据,用 BT 模型复现每日 Elo 排名,并计算新发布模型与 GPT-4o 的胜率差。如果胜率差超过 55% 且置信区间不含 50%,就向团队建议将该模型接入公司的对话产品做灰度测试。

场景二:搜索排序模型的在线评比

阶段:模型迭代与 A/B 测试

解决的问题:新版排序模型和旧模型在离线指标(如 NDCG@10)上各有胜负,难以决策上线与否。将被比较的两个模型“两两配对”呈现给真实用户,让用户点击更满意的结果,再用 BT 模型把大量成对点击数据汇总成最终能力分。这比单看离线指标更贴近用户真实感受。

具体案例:某搜索公司在一次推荐模型升级中,收集了 5000 条用户两两对比的点击数据(旧模型 vs 新模型),用 BT 模型拟合出新模型相对旧模型的强度比为 1.15,对应约 53% 的胜率。结合置信区间判断优势不显著,最终决定继续优化而非冒险全量上线。

Python 演示

python86 行
from collections import Counter  class BradleyTerry:    """BT 模型:用成对比赛结果估计每个选手的强度参数"""     def __init__(self, items, max_iter=1000, tol=1e-8):        self._items = list(items)        self._max_iter = max_iter        self._tol = tol        self._strength = {item: 1.0 for item in self._items}     def fit(self, matches):        wins = Counter()        games = Counter()        for winner, loser in matches:            wins[winner] += 1            games[tuple(sorted((winner, loser)))] += 1         for _ in range(self._max_iter):            old = dict(self._strength)            for item in self._items:                dividend = wins[item]                divisor = 0.0                for other in self._items:                    if item == other:                        continue                    key = tuple(sorted((item, other)))                    if key in games:                        divisor += games[key] / (self._strength[item] + self._strength[other])                self._strength[item] = dividend / divisor if divisor > 0 else 1.0            diff = max(abs(self._strength[i] - old[i]) for i in self._items)            if diff < self._tol:                break         total = sum(self._strength.values())        for item in self._items:            self._strength[item] /= total        return self._strength     def prob(self, a, b):        """a 战胜 b 的概率"""        return self._strength[a] / (self._strength[a] + self._strength[b])  class EloSystem:    """Elo 评分系统:以 400 分为基准差值的在线更新算法"""     def __init__(self, items, K=32, base=1500):        self._items = list(items)        self._K = K        self._elo = {item: base for item in self._items}     def expected(self, a, b):        return 1.0 / (1.0 + 10.0 ** ((self._elo[b] - self._elo[a]) / 400.0))     def update(self, winner, loser):        ea = self.expected(winner, loser)        eb = self.expected(loser, winner)        self._elo[winner] += self._K * (1.0 - ea)        self._elo[loser] += self._K * (0.0 - eb)  def main():    models = ['模型A', '模型B', '模型C']    matches = [        ('模型A', '模型B'), ('模型A', '模型B'),        ('模型B', '模型A'), ('模型A', '模型B'),        ('模型B', '模型C'), ('模型C', '模型B'),        ('模型A', '模型C'), ('模型C', '模型A'),        ('模型A', '模型C'), ('模型A', '模型C'),    ]     bt = BradleyTerry(models)    strength = bt.fit(matches)    print('BT 强度参数:', {k: round(v, 3) for k, v in strength.items()})    print('A 战胜 B 的概率:', round(bt.prob('模型A', '模型B'), 3))     elo = EloSystem(models, K=32)    for winner, loser in matches:        elo.update(winner, loser)    print('Elo 评分:', {k: round(v, 1) for k, v in elo._elo.items()})  if __name__ == '__main__':    main()
目的:用 10 场模型两两对比的比赛记录,同时训练 Bradley-Terry 强度参数和 Elo 评分,展示两种方法在相同数据上的输出差异。
  1. games[tuple(sorted((winner, loser)))] += 1将每对选手的交手次数存到“无序对”键上,避免统计重复
  2. divisor += games[key] / (self._strength[item] + self._strength[other])累加对手实力带来的归一化阻力,构成 BT 迭代公式的分母
  3. self._strength[item] = dividend / divisor if divisor > 0 else 1.0用胜场数除以阻力得到本轮新实力值,是 BT 估计的核心更新
  4. diff = max(abs(self._strength[i] - old[i]) for i in self._items)计算本轮所有参数的最大变化量,用于判断是否收敛
  5. return 1.0 / (1.0 + 10.0 ** ((self._elo[b] - self._elo[a]) / 400.0))Elo 期望胜率公式,把分差映射到 0~1
  6. self._elo[winner] += self._K * (1.0 - ea)胜者评分增加 K 倍“意外程度”;碾压弱旅时 ea 接近 1,加分趋近于 0

常见误区

误区很多人以为 Elo 是棋类比赛专用的计分规则,BT 模型是机器学习里的统计模型,两者只是“碰巧都是做排名”的,没有本质联系。

正解Elo 评分本质上是 BT 模型的对数线性特例。BT 模型用强度参数 θ 的比值决定胜率,Elo 对 θ 取对数后得到评分 R,胜率公式就变成 1/(1+10^{(R_B−R_A)/400})。两者共享同一个数学内核:两两对决中,实力之比决定胜率。

为何常见:因为两者出现在完全不同的场景——棋坛积分 vs 统计建模——且公式的表面形式差异很大,初学者很难一眼看出它们是“同一个思想的两个版本”。

误区看到“模型 A 对模型 B 的胜率是 60%”,就认为 A 明显强于 B,应该立即替换掉 B。

正解60% 胜率对应的 Elo 分差只有约 70 分(10^(70/400)≈1.5,换算胜率约 60%)。在 LLM 竞技场中,头部模型的胜率差往往只有几个百分点,55% 对 45% 已经是显著差距。60% 说明 A 有优势,但远不到“碾压”的程度。

为何常见:人们习惯用考试分数的直觉理解百分比——试卷考 60% 只是及格,考 90% 才算优秀;但胜率是“二选一”的偏好概率,50% 是随机水平,60% 已经是很强的信号。

误区认为今天的榜单上模型 A 是 1200 分,上周的榜单上模型 B 是 1150 分,就可以断言 A 比 B 强。

正解Elo 分数是相对值,它的零点随着选手池整体水平漂移。如果这周涌入大量强大新模型,所有人的分都会被“压”下去;反之整体水平下滑,分数会普遍上涨。正确的做法是只比较同一时间段、同一投票池内的分数。

为何常见:评分看起来像绝对量尺(1500 分、1200 分),让人下意识忽略它是从“相对对局”中算出来的。

误区认为只要不断收集用户投票,BT/Elo 的排名就会自动收敛到真实实力,不需要做额外处理。

正解数据质量与数量同样关键。乱点一气的投票、总是选左侧的位置偏差、机器脚本刷票,都会系统性地扭曲排名。必须配合随机化展示、清洗异常样本、过滤低质量来源,模型才能给出可信的排名。

为何常见:大数定律给人“样本多了误差自然消失”的印象,却忽略了系统性偏差不会随样本量增大而消失——方向盘歪了,车开得再远也到不了目的地。

面试题

Q1. BT 模型的核心思想是什么?

单选题 · easy

  • A.用胜场数直接排序
  • B.用隐藏实力参数解释胜负← 正确答案
  • C.用神经网络预测胜率
  • D.用评分差平均变化

答案:B。BT 模型认为每位选手背后有一个稳定强度参数 θ,胜负只是这个隐藏实力的概率投影。A 是朴素计数法,C 是深度学习路线,D 描述的是另一类梯度加权思路。

Q2. 在 P(A 胜 B)=θA/(θA+θB) 中,θ 代表什么?

单选题 · easy

  • A.选手的比赛场次
  • B.选手的净胜分
  • C.选手的强度参数← 正确答案
  • D.选手的世界排名

答案:C。θ 是 BT 模型的核心——强度参数,代表隐藏战斗力。比赛场次、净胜分、排名都是它的衍生量,不是模型定义中的原始参数。

Q3. Elo 中 400 分基准差对应的期望胜率约为多少?

单选题 · mid

  • A.高分者胜率约 64%
  • B.高分者胜率约 91%← 正确答案
  • C.高分者直接判负
  • D.400 分是评分上限

答案:B。E=1/(1+10^(−400/400))=1/(1+0.1)≈0.91,即高分者约 91% 胜率。64% 是分差 100 分对应的胜率,容易混淆。

Q4. K 因子在 Elo 评分更新中的作用是什么?

单选题 · mid

  • A.控制评分更新的波动幅度← 正确答案
  • B.决定期望胜率的计算公式
  • C.初始化新选手的初始评分
  • D.将原始评分映射到显示分数

答案:A。K 是单场比赛的最大调整幅度,K 越大评分波动越剧烈。期望胜率由 400 分基准决定,初始评分由 base 参数决定,K 不参与这些环节。

Q5. TrueSkill 相比 Elo 的主要改进包括哪些?

多选题 · mid

  • A.用均值和方差表达实力← 正确答案
  • B.支持多人混战的评分更新← 正确答案
  • C.使用循环神经网络建模
  • D.显式表达评分的不确定性← 正确答案

答案:ABD。TrueSkill 用高斯分布(μ+σ)描述实力,σ 表达不确定度,并扩展到了多人对战场景。循环神经网络与 TrueSkill 无关,属于现代深度学习方法。

Q6. 最大似然估计在 BT 模型中的目标是什么?

单选题 · mid

  • A.找到使观测数据出现概率最大的参数← 正确答案
  • B.找到使参赛者总得分最高的方案
  • C.找到使比赛场次最少的比赛安排
  • D.找到使每个选手胜率等于 50% 的参数

答案:A。MLE 的核心逻辑是“解释力最大化”——找一组参数,让已经发生的比赛结果看起来最不意外。它不追求总得分最高,也不追求胜率恰好 50%,而是要拟合数据。

Q7. 在大模型竞技场中,哪些做法属于偏差控制?

多选题 · easy

  • A.随机交换两个模型的展示位置← 正确答案
  • B.剔除无效或恶意投票数据← 正确答案
  • C.固定模型 A 始终显示在左侧
  • D.不做任何数据预处理直接排名

答案:AB。随机交换位置能消除用户“选左边”的位置偏差;剔除恶意投票属于数据清洗的一部分。固定 A 在左会固化位置偏差;不处理数据则会让排名失真。

Q8. 在 BT 迭代估计算法中,为什么要设置收敛条件?

单选题 · mid

  • A.因为迭代算法可能发散到无穷大
  • B.因为迭代到参数变化足够小时可以停止← 正确答案
  • C.因为强度参数一定会收敛到零
  • D.因为需要满足正态分布假设

答案:B。迭代过程通常不会发散,而是逐渐逼近最优解。当两轮之间所有参数的最大变化量小于阈值(如 1e-8)时,继续迭代几乎没有意义,可以停止以节省计算。

Q9. 两个模型的 Elo 分差为 200,高分者的期望胜率约为多少?

单选题 · hard

  • A.约 64%
  • B.约 76%← 正确答案
  • C.约 91%
  • D.约 97%

答案:B。E=1/(1+10^(−200/400))=1/(1+10^(−0.5))≈1/1.316≈0.76。64% 对应 100 分差,91% 对应 400 分差,97% 对应约 600 分差。

Q10. 关于 BT 模型与 Elo 的关系,正确的说法有哪些?

多选题 · hard

  • A.Elo 是 BT 模型的对数线性表达← 正确答案
  • B.Elo 评分直接等于强度参数 θ
  • C.Elo 400 分基准对应实力比 10:1← 正确答案
  • D.BT 模型假设各场比赛相互独立← 正确答案

答案:ACD。Elo 对 θ 取对数后得到线性评分,因此 A 对。400 分差对应 10^(400/400)=10 倍强度比,C 对。BT 的似然函数就是连乘各场胜率,隐含独立假设,D 对。B 错——Elo 是 θ 的对数变换,不是 θ 本身。