🔍 RAG 评估指标 Answer Correctness 详解
Ragas 框架中"答案正确性"评估指标的技术解读
💡 一句话概括
Answer Correctness 用 "像不像"(语义相似度) 和 "对不对"(事实准确度) 两个维度,综合判断 AI 回答的质量。
一、两个核心维度
| 维度 | 通俗理解 | 使用工具 |
|---|---|---|
| 语义相似度 | 两句话"长得像不像"------用词、表述方式的接近程度 | Embedding 模型 |
| 事实准确度 | 两句话"事实是否一致"------核心信息有无遗漏或错误 | 大语言模型 |
二、重点:事实准确度怎么算?
Ragas 不是让大模型直接说"对"或"错",而是采用 拆解 → 比对 → 算分 的三步流程:
📝 示例对比
| AI 回答(answer) | 标准答案(ground_truth) |
|---|---|
张伟是教研部 负责大模型课程的同事 |
张伟是教研部 负责大数据方向的同事 |
步骤 1:拆成"观点清单"
用大模型把句子拆解为独立的事实陈述:
python
AI 回答拆成: ["张伟是教研部的", "张伟负责大模型课程"]
标准答案拆成: ["张伟是教研部的", "张伟负责大数据方向"]
步骤 2:逐一比对,分类统计
| 观点 | 分类 | 含义 |
|---|---|---|
| "张伟是教研部的" | TP ✅ | 两边都有,事实一致(True Positive) |
| "张伟负责大模型课程" | FP ❌ | AI 说了,但标准答案没提 → 瞎说(False Positive) |
| "张伟负责大数据方向" | FN ⚠️ | 标准答案有,但 AI 没说 → 漏说(False Negative) |
所有判断均由大模型完成
步骤 3:计算 F1 分数
F1 = TP / [TP + 0.5 × (FP + FN)]
= 1 / [1 + 0.5 × (1 + 1)]
= 0.5 (满分 1)
三、最终得分汇总
Answer Correctness = 0.25 × 语义相似度 + 0.75 × 事实准确度
| 权重 | 说明 |
|---|---|
0.25 |
语义相似度:"像不像" |
0.75 |
事实准确度:"对不对" ← 权重更高 |
设计意图:避免 AI 用"正确的废话"刷高分,必须事实准确才能得高分
四、完整流程图
┌─────────────┐ ┌─────────────┐
│ AI 回答 │ │ 标准答案 │
│ (answer) │ │(ground_truth)│
└──────┬──────┘ └──────┬──────┘
│ │
└─────────┬─────────┘
▼
┌─────────────────────────┐
│ ① Embedding 模型 │
│ 算语义相似度 │
│ ("像不像") │
├─────────────────────────┤
│ ② 大语言模型 │
│ 拆解观点 → 比对 → 算F1 │
│ ("对不对") │
└─────────────────────────┘
▼
┌─────────────────────────┐
│ ③ 加权汇总 │
│ 0.25×① + 0.75×② │
└─────────────────────────┘
▼
┌─────────────────────────┐
│ Answer Correctness │
│ 最终得分 │
└─────────────────────────┘
🔑 关键记忆点
| 要点 | 说明 |
|---|---|
| 语义相似度 | "表面像不像"------用词相近,但可能事实错误 |
| 事实准确度 | "底层对不对"------拆解观点逐一核对,更严谨 |
| 为什么用大模型? | 判断"大模型课程"和"大数据方向"是否冲突,需要理解语义,不是简单字符串匹配 |
| F1 分数的意义 | 同时惩罚"瞎说"(FP)和"漏说"(FN),鼓励精准且完整的事实陈述 |
| 权重设计 | 事实准确度 75% > 语义相似度 25%,确保"内容正确"优先于"表述相似" |
(END)