人工评估

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 探索者
鲁ICP备2026018361号