评估数据策划

评估数据策划方法:好数据才能评出好模型

引言 评估数据的质量直接决定了评估结果的可信度。“垃圾进,垃圾出"在LLM评估中同样适用。一个有偏见的评估数据集可能让你做出错误的模型选择。2026年,评估数据策划已经成为一门专门的学问。本文将系统介绍评估数据策划的方法论。 评估数据的挑战 挑战一:代表性 评估数据是否代表了真实使用场景? 问题:评估数据全部来自新闻文本 真实场景:用户输入包含口语、错别字、混合语言 → 评估结果无法反映真实效果 挑战二:多样性 评估数据是否覆盖了各种输入类型? 问题:情感分析评估集只有明显正面/负面 缺失:讽刺、中性、混合情感 → 模型在边界情况上的表现未知 挑战三:数据污染 评估数据是否泄露到了训练集中? 挑战四:时效性 评估数据是否过时? 挑战五:偏见 评估数据是否对某些群体或观点有偏见? 评估数据策划流程 步骤一:需求分析 eval_data_requirements = { "task": "客服对话质量评估", "dimensions": { "准确性": "回复信息是否正确", "有用性": "是否解决了用户问题", "态度": "回复是否礼貌友好", "效率": "是否在3轮内解决" }, "coverage": { "query_types": ["咨询", "投诉", "退款", "技术支持"], "difficulty": ["简单", "中等", "困难"], "languages": ["中文"], "domains": ["电商", "金融", "教育"] }, "size": { "minimum": 500, "recommended": 2000, "ideal": 5000 } } 步骤二:数据收集 来源一:真实用户数据 def collect_real_user_data(production_logs, n=1000): """ 从生产日志中采样真实用户数据 """ # 随机采样 sampled = random.sample(production_logs, min(n, len(production_logs))) # 去敏处理 sanitized = [sanitize(data) for data in sampled] # 分类标注 categorized = categorize(sanitized) return categorized 来源二:人工构造 def generate_synthetic_data(task_description, n=500): """ 用LLM生成合成评估数据 """ prompt = f""" 请为以下任务生成{n}个评估用例: 任务:{task_description} 要求: 1. 覆盖不同难度(简单/中等/困难) 2. 包含边界情况 3. 包含对抗性输入 4. 输入多样化 以JSON格式输出。 """ return call_llm(prompt) 来源三:专家标注 def expert_annotation(raw_data, experts): """ 邀请领域专家标注数据 """ annotated = [] for item in raw_data: # 3位专家独立标注 labels = [expert.annotate(item) for expert in experts[:3]] # 计算一致性 agreement = compute_agreement(labels) if agreement > 0.8: # 一致性高,取多数意见 item["label"] = majority_vote(labels) else: # 一致性低,讨论后决定 item["label"] = expert_discussion(item, labels) annotated.append(item) return annotated 步骤三:数据清洗 def clean_eval_data(data): """ 清洗评估数据 """ cleaned = [] for item in data: # 去重 if is_duplicate(item, cleaned): continue # 去除敏感信息 item = remove_pii(item) # 检查标注质量 if not validate_annotation(item): continue # 检查输入长度 if len(item["input"]) < 5 or len(item["input"]) > 10000: continue cleaned.append(item) return cleaned 步骤四:数据分析 def analyze_eval_data(data): """ 分析评估数据集的分布 """ analysis = { "size": len(data), "difficulty_distribution": Counter(d["difficulty"] for d in data), "category_distribution": Counter(d["category"] for d in data), "length_distribution": [len(d["input"]) for d in data], "language_distribution": Counter(d["language"] for d in data), "bias_check": check_bias(data), "diversity_score": compute_diversity(data), "contamination_check": check_contamination(data) } return analysis 步骤五:数据平衡 def balance_eval_data(data, target_distribution=None): """ 平衡评估数据集 """ if target_distribution is None: # 默认均衡分布 categories = set(d["category"] for d in data) target_distribution = {c: 1/len(categories) for c in categories} # 按类别分组 by_category = defaultdict(list) for d in data: by_category[d["category"]].append(d) # 计算每个类别的目标数量 total = len(data) balanced = [] for category, items in by_category.items(): target_count = int(total * target_distribution[category]) if len(items) > target_count: # 过采样 sampled = random.sample(items, target_count) else: # 欠采样或数据增强 sampled = items + augment_data(items, target_count - len(items)) balanced.extend(sampled) return balanced 数据质量评估 评估维度 def evaluate_data_quality(data): """ 评估数据集质量 """ quality = {} # 1. 覆盖度:是否覆盖了所有需要评估的场景 quality["coverage"] = evaluate_coverage(data) # 2. 多样性:输入是否足够多样 quality["diversity"] = evaluate_diversity(data) # 3. 标注一致性:标注是否可靠 quality["annotation_consistency"] = evaluate_consistency(data) # 4. 偏见检测:是否存在偏见 quality["bias"] = detect_bias(data) # 5. 污染检测:是否与训练数据重叠 quality["contamination"] = detect_contamination(data) # 6. 难度分布:难度是否合理 quality["difficulty"] = evaluate_difficulty(data) return quality 偏见检测 def detect_bias(data): """ 检测数据集中的偏见 """ biases = [] # 性别偏见 male_terms = ["他", "男性", "先生"] female_terms = ["她", "女性", "女士"] male_count = sum(1 for d in data if any(t in d["input"] for t in male_terms)) female_count = sum(1 for d in data if any(t in d["input"] for t in female_terms)) if abs(male_count - female_count) / max(male_count, female_count) > 0.3: biases.append(f"性别分布不均:男性{male_count},女性{female_count}") # 地域偏见 # 年龄偏见 # 领域偏见 return biases 污染检测 def detect_contamination(eval_data, train_data_sample): """ 检测评估数据是否泄露到训练集中 """ contamination = [] for eval_item in eval_data: # 精确匹配 for train_item in train_data_sample: if eval_item["input"] == train_item: contamination.append(eval_item) break # 模糊匹配(n-gram重叠) eval_ngrams = set(get_ngrams(eval_item["input"], 8)) for train_item in train_data_sample: train_ngrams = set(get_ngrams(train_item, 8)) overlap = len(eval_ngrams & train_ngrams) / len(eval_ngrams) if overlap > 0.8: contamination.append(eval_item) break return { "contaminated_count": len(contamination), "contamination_rate": len(contamination) / len(eval_data), "contaminated_items": contamination } 评估数据管理 版本管理 class EvalDatasetVersion: def __init__(self, name, version, data): self.name = name self.version = version self.data = data self.created_at = datetime.now() self.hash = compute_hash(data) def diff(self, other_version): """计算版本差异""" added = [d for d in self.data if d not in other_version.data] removed = [d for d in other_version.data if d not in self.data] return {"added": added, "removed": removed} 数据集文档 # eval_dataset_card.yaml name: "客服对话评估集 v2.0" version: "2.0" created: "2026-06-01" size: 2000 description: "电商客服对话质量评估数据集" coverage: query_types: 咨询: 500 投诉: 400 退款: 350 技术支持: 350 其他: 400 difficulty: 简单: 600 中等: 900 困难: 500 quality: annotation_consistency: 0.87 diversity_score: 0.82 bias_check: "通过" contamination_check: "无污染" limitation: - "仅覆盖电商领域" - "中文数据为主" - "不含多轮对话" 2026年新趋势 1. 动态评估数据 评估数据集定期更新,防止数据污染和过时。 ...

2026-07-02 · 4 min · 657 words · 硅基 AGI 探索者
人工评估

LLM人工评估指南:让人类来判断AI的好坏

引言 尽管自动评估和LLM-as-Judge在2026年已经非常成熟,但人工评估仍然是LLM评估的"黄金标准"。特别是对于创意写作、对话质量、文化敏感性等主观维度,人工评估不可替代。本文将系统介绍LLM人工评估的方法论。 为什么需要人工评估 自动评估的局限 创意任务:BLEU等指标无法衡量创意质量 文化敏感:自动指标无法检测文化不当内容 用户体验:用户满意度需要人类主观感受 安全边界:某些安全问题的判断需要人类常识 新颖性:自动指标倾向于奖励"常见"回答 人工评估的优势 可以评估主观维度 可以发现细微错误 可以判断文化适宜性 可以评估用户体验 可以提供改进建议 人工评估流程 步骤一:明确评估目标 评估目标: 评估对象: GLM-5 vs GPT-5 评估维度: - 回答准确性 - 表达流畅性 - 用户体验 - 安全性 评估任务: - 问答对话 (100条) - 创意写作 (50条) - 代码生成 (50条) - 多轮对话 (30组) 步骤二:设计评估规范 评分标准 ### 回答准确性(1-5分) 5分:完全正确,信息准确 4分:基本正确,有小瑕疵 3分:部分正确,有遗漏 2分:大部分错误 1分:完全错误 ### 表达流畅性(1-5分) 5分:表达自然流畅,无语法错误 4分:表达流畅,偶有小问题 3分:表达尚可,有一些不自然 2分:表达困难,语法错误多 1分:无法理解 ### 用户体验(1-5分) 5分:回答贴心、有帮助、超出预期 4分:回答有用、友好 3分:回答可以接受 2分:回答不太有用 1分:回答完全没用或令人不快 标注指南 ### 标注指南 1. 独立评估 - 请独立完成评估,不要参考其他评估者的评分 2. 不确定处理 - 如果不确定,请选择较低的分数 - 在"comment"字段说明不确定的原因 3. 安全性问题 - 如果回答包含以下内容,请标记为"unsafe": - 歧视性言论 - 暴力内容 - 违法建议 - 隐私泄露 4. 文化敏感性 - 如果回答可能冒犯特定文化群体,请标记为"culturally_insensitive" 5. 对比评估 - 在对比两个模型时,请评估哪个"更好",而不是分别打分 - "更好"的判断应该综合考虑所有维度 步骤三:选择评估者 评估者类型 类型 适用任务 成本 质量 领域专家 专业领域评估 高 最高 通用标注员 通用任务评估 中 中等 众包工人 简单分类任务 低 较低 用户群体 用户体验评估 中 高 评估者数量 每个样本建议3-5个评估者 计算评估者间一致性(Inter-Annotator Agreement) 如果一致性低(Krippendorff’s α < 0.6),需要修订标注规范 步骤四:执行评估 class HumanEvaluation: def __init__(self, config): self.config = config self.evaluators = self.recruit_evaluators(config) def create_evaluation_task(self, model_outputs): """ 创建评估任务 """ tasks = [] for output in model_outputs: task = { "id": output["id"], "input": output["input"], "output_a": output["model_a_output"], # 模型A输出 "output_b": output["model_b_output"], # 模型B输出 "dimensions": self.config["dimensions"], "guidelines": self.config["guidelines"] } tasks.append(task) return tasks def collect_results(self, tasks): """ 收集评估结果 """ results = [] for task in tasks: # 分发给多个评估者 evaluations = [] for evaluator in self.evaluators: eval_result = evaluator.evaluate(task) evaluations.append(eval_result) # 计算一致性 agreement = self.calculate_agreement(evaluations) # 如果一致性低,重新评估 if agreement < 0.6: evaluations = self.re_evaluate(task) results.append({ "task": task, "evaluations": evaluations, "agreement": agreement, "final_score": self.aggregate_scores(evaluations) }) return results 步骤五:分析结果 def analyze_evaluation_results(results): """ 分析人工评估结果 """ analysis = {} # 总体对比 model_a_wins = sum(1 for r in results if r["final_score"]["a"] > r["final_score"]["b"]) model_b_wins = sum(1 for r in results if r["final_score"]["b"] > r["final_score"]["a"]) ties = len(results) - model_a_wins - model_b_wins analysis["overall"] = { "model_a_win_rate": model_a_wins / len(results), "model_b_win_rate": model_b_wins / len(results), "tie_rate": ties / len(results) } # 按维度分析 for dim in ["accuracy", "fluency", "user_experience", "safety"]: dim_scores_a = [r["final_score"]["a"][dim] for r in results] dim_scores_b = [r["final_score"]["b"][dim] for r in results] analysis[dim] = { "model_a_avg": mean(dim_scores_a), "model_b_avg": mean(dim_scores_b), "p_value": t_test(dim_scores_a, dim_scores_b) } # 评估者一致性 analysis["agreement"] = { "avg_krippendorff_alpha": mean([r["agreement"] for r in results]), "low_agreement_cases": [r for r in results if r["agreement"] < 0.6] } return analysis 评估方法 方法一:绝对评分 让评估者对每个输出独立打分: ...

2026-07-02 · 3 min · 516 words · 硅基 AGI 探索者
LLM评估框架

LLM评估框架2026:如何科学衡量模型能力

引言 “我的模型到底好不好?“这是每个AI应用开发者都会面临的问题。基准测试分数高不等于实际效果好,通用基准可能不反映你的特定任务。2026年,LLM评估已经从简单的"看分数"进化到系统化的评估框架。本文将全面解析2026年的LLM评估方法。 评估的核心问题 问题一:评估什么 LLM的能力是多维度的,不能只用一个分数衡量: 知识理解:世界知识、专业知识 推理能力:逻辑推理、数学推理、因果推理 语言生成:流畅性、连贯性、创造性 指令跟随:格式遵守、约束遵循 安全性:拒绝有害请求、避免偏见 效率:推理速度、成本 问题二:怎么评估 静态基准:固定测试集(MMLU、GSM8K等) 动态评估:实时变化测试集(防数据污染) 人工评估:人类专家评估 模型评估:用强模型评估弱模型 实际应用评估:A/B测试、用户反馈 问题三:评估谁 通用能力:模型的基础能力 领域特定能力:在特定领域(医疗、法律等)的表现 任务特定能力:在特定任务上的效果 主流评估基准 知识与理解 基准 说明 评测维度 2026最高分 MMLU-Pro 57学科多任务理解 知识广度 91.3% (GPT-5) CMMLU 中文多任务理解 中文知识 89.7% (GLM-5) C-Eval 2026 中文综合评估 中文综合 92.1% (GLM-5) BBH BigBench Hard 复杂理解 88.5% (GPT-5) 推理能力 基准 说明 评测维度 2026最高分 GPQA Diamond 研究生科学推理 深度推理 82.3% (o3) GSM8K 小学数学推理 数学推理 96.8% (o3) MATH-500 高级数学竞赛 数学推理 96.8% (o3) ARC 科学推理 科学推理 96.2% (GPT-5) 代码能力 基准 说明 评测维度 2026最高分 HumanEval Python代码生成 代码生成 94.2% (GPT-5) SWE-Bench Verified 软件工程 工程能力 71.2% (GPT-5) MultiPL-E 多语言编程 多语言 89.3% (GPT-5) LiveCodeBench 实时编程竞赛 竞赛编程 72.5% (Claude 4) 安全性与对齐 基准 说明 评测维度 TruthfulQA 事实准确性 幻觉率 ToxiGen 毒性检测 安全性 BBQ 偏见检测 公平性 HarmBench 有害内容 安全拒绝率 Agent能力 基准 说明 评测维度 AgentBench Agent综合能力 工具调用、规划 WebArena 网页操作 实际任务 ToolBench 工具调用 API调用准确性 GAIA 通用AI助手 多步骤任务 评估框架设计 框架一:多维评估矩阵 class LLMEvaluationFramework: def __init__(self): self.dimensions = { "knowledge": ["MMLU-Pro", "CMMLU", "C-Eval"], "reasoning": ["GPQA", "GSM8K", "MATH"], "code": ["HumanEval", "SWE-Bench", "MultiPL-E"], "safety": ["TruthfulQA", "ToxiGen", "BBQ"], "agent": ["AgentBench", "WebArena"], "chinese": ["C-Eval", "CMMLU"] } def evaluate(self, model, dimensions=None): dimensions = dimensions or self.dimensions.keys() results = {} for dim in dimensions: benchmarks = self.dimensions[dim] results[dim] = {} for benchmark in benchmarks: score = run_benchmark(model, benchmark) results[dim][benchmark] = score return results def visualize(self, results): """ 生成雷达图,展示各维度能力 """ # ... 可视化代码 框架二:分层评估 第1层:通用能力评估 ├── 知识理解(MMLU-Pro) ├── 推理能力(GPQA, GSM8K) ├── 代码能力(HumanEval) └── 安全性(TruthfulQA) 第2层:领域能力评估 ├── 法律(LegalBench) ├── 医疗(MedQA) ├── 金融(FinBench) └── 教育(EduBench) 第3层:任务能力评估 ├── RAG效果评估 ├── 对话质量评估 ├── 摘要质量评估 └── 翻译质量评估 第4层:实际应用评估 ├── 用户满意度 ├── 任务完成率 ├── 响应延迟 └── 成本效率 框架三:对比评估 def comparative_evaluation(models, benchmarks): """ 对比评估多个模型 """ results = {} for model in models: results[model] = {} for benchmark in benchmarks: results[model][benchmark] = run_benchmark(model, benchmark) # 生成对比报告 report = generate_comparison_report(results) return report 评估中的常见陷阱 陷阱一:数据污染 训练数据中包含了测试集,导致分数虚高: ...

2026-07-02 · 3 min · 436 words · 硅基 AGI 探索者
agent evaluation cicd 2026

Agent 评估自动化:CI/CD 中的 LLM 测试

引言 传统软件测试的基石是确定性:相同输入产生相同输出。LLM Agent 打破了这个前提,让 CI/CD 测试面临根本性挑战。2026年,随着 Agent 评估框架的成熟,一套可落地的 CI/CD 测试方法论终于成型。本文将带你构建完整的 Agent 测试金字塔。 一、Agent 测试金字塔 ┌─────────┐ │ E2E │ ← 端到端场景测试(5-10个) ┌┴─────────┴┐ │ Integration │ ← 多 Agent 协作测试(20-50个) ┌┴──────────────┴┐ │ Evaluation │ ← LLM 评判测试(50-100个) ┌┴──────────────────┴┐ │ Component │ ← 工具/Prompt 测试(200+) ┌┴──────────────────────┴┐ │ Unit Test │ ← 纯函数测试(500+) └───────────────────────────┘ 二、第一层:单元测试(确定性层) 单元测试只测试不涉及 LLM 的部分:数据处理、工具执行的解析逻辑、Prompt 模板渲染。 import pytest class TestPromptTemplate: """Prompt 模板渲染测试""" def test_system_prompt_renders_correctly(self): template = SystemPromptTemplate( role="research_assistant", tools=["search", "calculator"], constraints=["cite sources", "be concise"] ) rendered = template.render() assert "research_assistant" in rendered assert "search" in rendered assert "calculator" in rendered assert "cite sources" in rendered def test_few_shot_template_with_examples(self): template = FewShotTemplate( system="You are a classifier", examples=[ {"input": "I love it", "output": "positive"}, {"input": "Terrible", "output": "negative"}, ], query="{user_input}" ) rendered = template.render(user_input="Amazing!") assert "positive" in rendered assert "negative" in rendered assert "Amazing!" in rendered class TestToolParsing: """工具调用解析测试""" @pytest.mark.parametrize("raw_output,expected_tool,expected_args", [ ('{"tool": "search", "args": {"q": "weather"}}', "search", {"q": "weather"}), ('```json\n{"tool": "calc", "args": {"expr": "1+1"}}\n```', "calc", {"expr": "1+1"}), ('I\'ll use the search tool: {"tool": "search", "args": {"q": "news"}}', "search", {"q": "news"}), ]) def test_parse_tool_call(self, raw_output, expected_tool, expected_args): result = parse_tool_call(raw_output) assert result.tool == expected_tool assert result.args == expected_args def test_parse_malformed_output(self): with pytest.raises(ToolParseError): parse_tool_call("This is not JSON at all") 三、第二层:组件测试(Mock LLM) 使用 Mock LLM 测试 Agent 的控制流,确保工作流逻辑正确。 ...

2026-06-28 · 5 min · 1030 words · 硅基 AGI 探索者
llm judge evaluation

LLM-as-Judge 评估方法实战

从人工评测到 LLM-as-Judge 评估大语言模型的输出质量,一直是工程实践中的痛点。传统的人工评测虽然准确,但成本高昂、速度慢、难以规模化。而基于规则的自动评估(如 BLEU、ROUGE)又无法捕捉语义层面的细微差异。 LLM-as-Judge 方法的出现,为我们提供了一个折中方案:用另一个大语言模型来评估目标模型的输出质量。这种方法在 2023 年由 LMSYS 的研究团队系统化提出,如今已成为业界主流的自动评估范式。 其核心思想很简单:如果你相信大语言模型具备足够的理解和评判能力,那么它就可以充当"裁判"角色,对生成内容进行多维度评分。这就像是让一个资深专家来批改作业——虽然不完美,但在很多场景下已经足够好。 LLM-as-Judge 的三种模式 模式一:单答案评分(Single-Answer Grading) 最基础的模式:给定一个问题和一个答案,让 Judge 模型直接打分。 SINGLE_GRADING_PROMPT = """你是一个专业的评估专家。请对以下回答进行评分。 ## 问题 {question} ## 回答 {answer} ## 评分维度 请按以下维度分别打分(1-10分): 1. **准确性** (Accuracy):回答中的事实信息是否正确? 2. **完整性** (Completeness):是否充分回答了问题的各个方面? 3. **清晰度** (Clarity):表达是否清晰、逻辑是否连贯? 4. **实用性** (Helpfulness):对提问者是否有实际帮助? ## 输出格式 请以 JSON 格式输出: ```json {{ "accuracy": {{"score": 0, "reason": ""}}, "completeness": {{"score": 0, "reason": ""}}, "clarity": {{"score": 0, "reason": ""}}, "helpfulness": {{"score": 0, "reason": ""}}, "overall": {{"score": 0, "reason": ""}} }} """ ...

2026-06-26 · 4 min · 665 words · 硅基 AGI 探索者
鲁ICP备2026018361号