You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何对OpenAI微调模型开展问答基准测试?

微调OpenAI模型对接HuggingFace问答基准测试实现方案

核心逻辑不需要做模型格式转换,直接把OpenAI API调用封装成HuggingFace数据集、评估库兼容的推理接口即可,完全可以支撑自动化批量测试需求,不受官方文档仅提供基础调用示例的限制。


环境准备

  • 安装必要依赖:执行命令 pip install openai datasets evaluate tqdm
  • 提前准备好微调后模型的专属ID(格式类似ft:gpt-3.5-turbo-0613:个人/组织标识::自定义ID),API密钥建议通过环境变量读取,不要硬编码在脚本中。

封装适配评估流程的推理函数

按照你微调时使用的Prompt格式封装预测逻辑,保证推理输入和训练输入格式完全一致,避免精度损失:

import os
import time
from openai import OpenAI
from tqdm import tqdm

# 初始化客户端
client = OpenAI(api_key=os.getenv("OPENAI_API_KEY"))
FINETUNED_MODEL_ID = "替换为你的微调模型ID"

def predict_single_sample(example):
    # 以下messages格式严格对齐微调时的输入模板
    messages = [
        {"role": "system", "content": "你是精准问答助手,针对用户问题给出简洁正确答案"},
        {"role": "user", "content": example["question"]}
        # 如果是SQuAD类带上下文的问答任务,把example["context"]拼接到content里即可
    ]
    try:
        resp = client.chat.completions.create(
            model=FINETUNED_MODEL_ID,
            messages=messages,
            temperature=0, # 基准测试必须固定为0,关闭随机采样保证结果可复现
            max_tokens=256,
            top_p=1
        )
        example["model_prediction"] = resp.choices[0].message.content.strip()
    except Exception as e:
        # 失败重试逻辑,可根据自己的API限额调整等待时间
        time.sleep(1)
        resp = client.chat.completions.create(
            model=FINETUNED_MODEL_ID,
            messages=messages,
            temperature=0,
            max_tokens=256,
            top_p=1
        )
        example["model_prediction"] = resp.choices[0].message.content.strip()
    return example

注意:如果你的测试集样本量较大,可以在函数里加随机抖动的延迟,避免触发OpenAI API的并发速率限制。

加载目标基准数据集批量推理

  • 常用问答类基准(MMLU、TruthfulQA、SQuAD、C-Eval等)都可以直接通过datasets库加载,不需要手动下载整理文件。
  • 调用数据集的map方法批量执行推理,可配置多进程提速,适配自动化流水线:
from datasets import load_dataset

# 示例为加载MMLU会计分支测试集,替换为你需要测试的数据集名称和配置即可
qa_test_dataset = load_dataset("lukaemon/mmlu", "accounting", split="test")

# 批量推理
result_dataset = qa_test_dataset.map(
    predict_single_sample,
    batched=False,
    num_proc=3 # 根据自身CPU核数、OpenAI账号并发限额调整数值
)

# 推理结果可以直接存到本地,避免重复调用API浪费额度
result_dataset.to_json("mmlu_accounting_finetuned_pred.jsonl", force_ascii=False)

加载对应指标计算测试结果

  • 根据任务类型从evaluate库加载对应评估指标:分类类问答用准确率指标,抽取/生成类问答用精确匹配(EM)、F1值指标,传入模型预测结果和数据集自带的标准答案即可自动算分:
import evaluate

# 示例为计算分类问答准确率,生成类问答替换为squad对应指标即可
acc_metric = evaluate.load("accuracy")
# 注意reference字段对应数据集里的标准答案键名,比如MMLU为target,SQuAD为answers
eval_result = acc_metric.compute(
    predictions=result_dataset["model_prediction"],
    references=result_dataset["target"]
)
print(f"模型在当前测试集准确率:{eval_result['accuracy']:.4f}")

常见踩坑提示

  • 测试阶段所有推理参数(temperature、top_p、max_tokens)必须固定,不要开启随机采样,否则多次测试的分数没有对比意义。
  • 输入Prompt的拼接规则、系统提示词内容必须和微调训练时完全一致,格式偏差会导致模型表现大幅下降。
  • 大样本量测试前先确认账号的OpenAI API TPM、并发限额,避免请求被批量拦截。

内容的提问来源于stack exchange,提问作者samuelnihoul

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.26 15:45:31