上下文精度与召回
两项指标分工明确:context_precision 衡量检索到的上下文里相关条目是否排在前部,反映排序质量;context_recall 衡量标准答案所需信息是否都被上下文覆盖,反映召回是否完整。前者对应「排得好」,后者对应「找得全」,联合看才能判断该调检索还是调排序。
基本信息
| context_precision | 相关片段是否位于前部,受排序与截断影响 |
|---|---|
| context_recall | 答案要点是否都出现在上下文中,受召回影响 |
| 依赖字段 | recall 需要标准答案,precision 只需要问题与上下文 |
| 取值范围 | 0 到 1,越高越好 |
| 用途 | 区分检索侧问题与生成侧问题 |
两项一起跑
两项一起跑
from ragas.metrics import context_precision, context_recall
from ragas import evaluate
res = evaluate(dataset, metrics=[context_precision, context_recall])
print(res)指标对照
| 指标 | 回答的问题 |
|---|---|
| context_precision | 相关片段是否排在前位(受排序影响) |
| context_recall | 答案要点是否都出现在上下文中(受召回影响) |
使用要点
- recall 必须配标准答案,没有标注时不要硬跑,结果没有意义
- 两项指标一起看:precision 高而 recall 低说明排序好但召回不全
- 上下文条数变化时两项都会动,比较时要固定条数
- 按问题类型分组统计,专名类与概括类的短板往往不同
- 把指标与召回池大小一起记录,便于解释波动
常见误读
- 把 precision 低当成生成问题,实际是排序或截断把好片段压到后面
- 只看 recall 就加大召回池,结果是上下文变长、答案质量并未提升
- 评测时塞入全部候选而不按线上截断,两项指标都偏离真实情况
- 标准答案写法与文档表述差异过大,recall 被系统性低估
context_recall 依赖标准答案:没有标注的场景可改用「标注片段集合」来近似,但要明确这类结果的解释边界。
两个指标怎么配合用
排查时先看 recall:标准答案的要点如果根本没进上下文,问题在检索侧,此时优化排序不会有收益;recall 达标后再看 precision,判断是否把相关片段排得太靠后或在上限处被截断。两者都达标而答案质量仍然差,才把注意力转到生成约束与提示词上。按这个顺序推进,可以避免在错误的环节反复调参,也能让每次改动的效果有明确的方向。
组合结论读法
- recall 低、precision 低:召回不足,先扩候选池或修切分
- recall 高、precision 低:找得到但排得后,优先加重排
- recall 低、precision 高:候选少而准,说明召回深度不够
- 两项都高但答案差:转向生成约束、拒答策略与提示词