ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

LLMs基准评测新范式:用GPT-Fathom拆解GPT-4演进路径的配置与验证

LLMs基准评测新范式:用GPT-Fathom拆解GPT-4演进路径的配置与验证 1. 为什么需要 GPT-Fathom 这类评测框架如果你最近在折腾 LLMs 基准评测大概率遇到过这种尴尬同一份 MMLU 分数A 论文写 86.4B 榜单写 83.1自己跑出来 79.8。问题往往不在模型而在评测设置——few-shot 数量不同、CoT 提示有没有开、答案解析规则不一致甚至采样温度差 0.2 都能让结果漂移。GPT-Fathom 想解决的就是这件事它基于 OpenAI Evals 构建把 10 多个主流 LLMs 和 OpenAI 早期模型放在对齐设置下跑 20 多个精选基准覆盖知识、推理、理解、数学、编码、多语言、安全 7 个能力类别让 GPT-3 到 GPT-4 的演进路径可以被量化复现。它适合谁想复现论文对比结论的算法工程师、需要给自研模型找参照系的评测同学、以及想理解“代码数据预训练到底提升了什么”这类问题的开发者。这篇不翻译论文而是交付一套可复制的评测配置骨架模型列表怎么填、任务集怎么选、评分脚本参数怎么设最后跑一次小规模基准并核对日志。你不需要先读完 30 页论文跟着配置走一遍就能建立体感。2. 前置准备TaoToken 接入与评测环境GPT-Fathom 本身是评测套件真正跑起来需要能调用模型 API。我这边用 TaoToken 做统一接入层原因是它兼容 OpenAI 风格的接口GPT-3.5、GPT-4 以及部分开源模型都能通过同一套 base_url 和 key 调用省去为每个模型改客户端代码的麻烦。官网入口在 https://taotoken.net/?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteutm_content API 地址是 https://taotoken.net/api 注意 API 路径不带 UTM 参数。先拿 Key进入控制台 https://taotoken.net/console?utm_sourcetaotoken_aicg_blog_endutm_contentconsoleutm_campaignrewrite 在 API Keys 页面 https://taotoken.net/api-keys?utm_sourcetaotoken_aicg_blog_endutm_contentapi-keysutm_campaignrewrite 创建一个新 key复制保存。接入文档在 https://taotoken.net/doc?utm_sourcetaotoken_aicg_blog_endutm_contentdocutm_campaignrewrite 里面有各语言 SDK 的 base_url 配置示例。环境侧建议 Python 3.10依赖 openai、datasets、pandas、tqdm。GPT-Fathom 的评测逻辑参考 OpenAI Evals 的 evals 目录结构你可以把它理解成“每个 benchmark 一个 YAML 配置 一个评分函数”。下面先给一个最小可跑的目录骨架gpt-fathom-mini/ ├── configs/ │ ├── models.yaml │ └── benchmarks.yaml ├── evals/ │ ├── mmlu.yaml │ └── gsm8k.yaml ├── scripts/ │ ├── run_eval.py │ └── score.py └── logs/模型列表配置configs/models.yaml里把要对比的模型写成别名到实际模型名的映射方便后续日志里一眼看出是谁models: gpt-3.5-turbo-0613: provider: taotoken model_name: gpt-3.5-turbo-0613 base_url: https://taotoken.net/api gpt-4-0613: provider: taotoken model_name: gpt-4-0613 base_url: https://taotoken.net/api llama-2-70b: provider: taotoken model_name: llama-2-70b-chat base_url: https://taotoken.net/api注意模型名要以你账号实际可调用的为准不同时间可用的版本可能不同跑之前先用模型对话页确认一下。3. 可复制的评测配置骨架3.1 任务集与能力类别映射GPT-Fathom 把基准按能力分类我们复现时不必全上先选 3 个代表性任务MMLU知识多学科选择题、GSM8K数学推理带 CoT、HumanEval编码pass1。configs/benchmarks.yaml这样写benchmarks: mmlu: category: knowledge shots: 5 cot: false metric: exact_match num_samples: 200 gsm8k: category: math shots: 8 cot: true metric: exact_match num_samples: 100 humaneval: category: coding shots: 0 cot: false metric: pass1 temperature: 0.8 top_p: 1.0 num_samples: 50这里几个参数直接对应论文里的关键结论shots 超过 1 之后收益递减所以 MMLU 用 5-shot 已经够CoT 对 GSM8K 这种推理任务提升显著对 MMLU 这种知识任务反而可能略降所以 mmlu 的 cot 设 false编码任务温度设 0.8、top_p 设 1.0是为了兼顾 pass1 和采样多样性。3.2 评分脚本参数scripts/score.py的核心是把模型自由文本输出解析成标准答案再比对。多选题要处理(A)、A.、Answer: A等多种格式数学题要抽取最后一个数字。给一个精简版import re def parse_mc(text): m re.search(r\(?([A-D])\)?[\.\):]?, text.strip()) return m.group(1) if m else None def parse_number(text): nums re.findall(r-?\d\.?\d*, text.replace(,, )) return nums[-1] if nums else None def exact_match(pred, ref, task_type): if task_type mc: return parse_mc(pred) ref if task_type number: return parse_number(pred) parse_number(ref) return pred.strip() ref.strip()运行入口scripts/run_eval.py负责读配置、拼 prompt、调 API、写日志import yaml, json, time from openai import OpenAI client OpenAI(api_key你的KEY, base_urlhttps://taotoken.net/api) def build_prompt(example, shots, cot): prefix if cot: prefix Lets think step by step.\n return prefix example[question] def run(model_cfg, bench_cfg, dataset): results [] for i, ex in enumerate(dataset[:bench_cfg[num_samples]]): resp client.chat.completions.create( modelmodel_cfg[model_name], messages[{role: user, content: build_prompt(ex, bench_cfg[shots], bench_cfg[cot])}], temperaturebench_cfg.get(temperature, 0), top_pbench_cfg.get(top_p, 1.0), ) pred resp.choices[0].message.content results.append({id: i, pred: pred, ref: ex[answer]}) time.sleep(0.2) return results日志按logs/{model}/{benchmark}.jsonl落盘每行一条样本方便后面核对。4. 跑一次小规模基准并核对结果先只跑 MMLU 的 200 条、gpt-3.5-turbo-0613 一个模型命令python scripts/run_eval.py \ --model gpt-3.5-turbo-0613 \ --benchmark mmlu \ --config configs/benchmarks.yaml \ --output logs/gpt-3.5-turbo-0613/mmlu.jsonl跑完后统计准确率python scripts/score.py \ --input logs/gpt-3.5-turbo-0613/mmlu.jsonl \ --task-type mc \ --report logs/gpt-3.5-turbo-0613/mmlu_report.json成功的话你会看到类似输出{ model: gpt-3.5-turbo-0613, benchmark: mmlu, num_samples: 200, correct: 138, accuracy: 0.69, parse_failures: 4 }核对日志时重点看三件事一是parse_failures占比如果超过 5%说明答案解析规则要调二是随机抽 5 条pred和ref人工比对确认不是解析把对的判成错的三是把同一模型换 CoT 开关再跑一次观察 GSM8K 上的差异是否符合论文里“CoT 对推理任务显著提升”的结论。我试过在 GSM8K 上开 CoT 后准确率从 40% 出头跳到 70% 以上这个跳变本身就是验证评测链路是否正常的好信号。5. 本篇常见错排查报错一AuthenticationError: Incorrect API key。先确认 key 是从 API Keys 页面新建的且 base_url 写的是https://taotoken.net/api而不是带路径的完整 URL。如果用的是环境变量检查有没有多余空格。报错二model_not_found。模型名写错或当前账号没有该模型权限。去模型对话页 https://taotoken.net/chat?utm_sourcetaotoken_aicg_blog_endutm_contentmodel_chatutm_campaignrewrite 手动发一条消息确认模型可用后再填进models.yaml。报错三准确率异常低parse_failures 很高。多半是 prompt 里没给输出格式约束。在 prompt 末尾加一句“最后一行只输出选项字母如 A”再跑一次。另外检查parse_mc的正则是否把Answer: B里的 B 正确捕获。报错四跑一半卡住或超时。并发别开太高time.sleep(0.2)可以调到 0.5如果任务量大建议分批跑并在日志里记录断点避免重跑浪费额度。报错五同一模型两次结果差很多。检查 temperature 是否设成了非 0。评测对比时除编码任务外建议 temperature0减少采样方差对结论的干扰。6. 继续深入从复现到扩展跑通上面这条链路后你可以把模型列表扩到 GPT-4、Llama 2-70B任务集加上 BBH、DROP就能复现论文里“跷跷板现象”的观察——比如 gpt-3.5-turbo-0613 在编码上比 0301 明显提升但 MATH 分数反而下降。这种对比正是 GPT-Fathom 想暴露的问题单一维度的提升不代表整体能力前进。如果你要长期做编码类评测或 Agent 场景的基准建议走 Coding Plan https://taotoken.net/coding-plan?utm_sourcetaotoken_aicg_blog_endutm_contentcoding_planutm_campaignrewrite 额度模型更适合反复跑 HumanEval、MBPP 这类需要多次采样的任务。接入细节仍以文档 https://taotoken.net/doc?utm_sourcetaotoken_aicg_blog_endutm_contentdocutm_campaignrewrite 为准Key 管理在 API Keys 页面。把评测配置和日志结构固定下来之后换模型、换基准都只是改 YAML 的事这才是可复现评测真正省时间的地方。
返回列表