Skip to content

Hit Rate

五层读懂一个词。这次拆的是:Hit Rate (命中率)--检索评估的基础指标,RAG 系统最常用的召回率衡量。


L1 · 一句话点破

Hit Rate@K = top-K 中至少含一个相关文档的查询比例。是 RAG 检索评估的事实标准,简单直观,回答"检索有没有命中"。


L2 · 通俗类比

学生考试,老师改卷:

  • 每题(查询)给前 5 个答案(top-5 检索结果)
  • 命中率 = 至少有一个正确答案的题数 / 总题数

举例:

  • 10 道题,每题前 5 个答案
  • 题 1:前 5 含正确答案(命中)
  • 题 2:前 5 都是错的(未命中)
  • ...

如果 8 道题命中,Hit Rate = 8/10 = 0.8 = 80%。

关键区别

  • Hit Rate 只看"有没有命中",不看命中几个、排第几
  • 题 1 命中 5 个 vs 命中 1 个,Hit Rate 都是 1
  • 题 1 命中排第 1 vs 排第 5,Hit Rate 都是 1

简单粗暴但有用,特别适合 RAG 场景:"只要 top-k 含相关 chunk,LLM 就能答对"。


L3 · 正经定义

Hit Rate@K (命中率):在所有查询中,top-K 至少含一个相关文档的比例。

$$ \text{HitRate@K} = \frac{1}{|Q|} \sum_{q \in Q} \mathbb{1}[\text{top-}K(q) \cap \text{relevant}(q) \ne \emptyset] $$

其中:

  • $Q$:查询集合
  • $\text{top-}K(q)$:查询 $q$ 的 top-K 检索结果
  • $\text{relevant}(q)$:查询 $q$ 的真实相关文档集
  • $\mathbb{1}[\cdot]$:指示函数,条件成立为 1,否则为 0

性质

  • 范围 [0, 1],越高越好
  • 只看是否命中,不看命中数量和位置
  • 等价于"二元 Recall@K"(每查询至少命中一个的概率)

与 Recall@K 的关系

传统 Recall@K 是"top-K 中相关文档占所有相关文档的比例":

$$ \text{Recall@K} = \frac{1}{|Q|} \sum_{q} \frac{|\text{top-}K(q) \cap \text{relevant}(q)|}{|\text{relevant}(q)|} $$

当每查询只有 1 个相关文档时,Hit Rate@K = Recall@K。RAG 评估中常每查询只标 1 个"金标准答案",所以两者等价。

伪代码

python
def hit_rate_at_k(results, relevant_docs, k):
    """
    results: dict, query_id -> list of retrieved doc_ids (ranked)
    relevant_docs: dict, query_id -> set of relevant doc_ids
    k: top-K
    """
    hits = 0
    total = 0
    for q_id, retrieved in results.items():
        top_k = retrieved[:k]
        if set(top_k) & relevant_docs[q_id]:  # 至少一个相关
            hits += 1
        total += 1
    return hits / total

# 示例
results = {
    "q1": ["d1", "d2", "d3", "d4", "d5"],  # top-5
    "q2": ["d6", "d7", "d8", "d9", "d10"],
}
relevant = {
    "q1": {"d2", "d7"},   # d2 在 q1 的 top-5
    "q2": {"d1", "d11"},  # 都不在 q2 的 top-5
}
print(hit_rate_at_k(results, relevant, k=5))  # 0.5(q1 命中,q2 未命中)

RAG 评估中的典型用法

python
# RAG 评估:检索 top-k 是否含答案所在 chunk
def rag_hit_rate(queries, ground_truth_chunks, retriever, k=5):
    hits = 0
    for q, gt in zip(queries, ground_truth_chunks):
        retrieved = retriever.search(q, top_k=k)
        if gt in [r.id for r in retrieved]:
            hits += 1
    return hits / len(queries)

L4 · 原理深挖

4.1 为什么 RAG 用 Hit Rate

RAG 的检索目标:把含答案的 chunk 召回到 top-k,让 LLM 能生成正确答案。

关键性质

  • LLM 只需 1 个含答案的 chunk 就能答对(多数场景)
  • top-k 中多个含答案 chunk 提升不大(边际递减)
  • 命中位置重要(top-1 比 top-5 好),但 Hit Rate 不区分

Hit Rate 适配 RAG

  • 每查询通常标 1 个金标准 chunk
  • Hit Rate@5 = "top-5 含金标准 chunk 的查询比例"
  • 简单直观,与 RAG 答对率相关性高

实测:RAG 系统中 Hit Rate@5 与答案准确率相关性 0.7~0.9。

4.2 Hit Rate vs Recall@K vs MRR

指标公式关心适用
Hit Rate@K$\mathbb{1}[\text{top-}K \cap \text{rel} \ne \emptyset]$有无命中RAG(每查询 1 个相关)
Recall@K$\text{top-}K \cap \text/
MRR@K$1/\text{rank of first rel}$命中位置排序质量
NDCG@K$\sum \text{DCG} / \text{IDCG}$排序 + 分级综合排序

选择建议

  • RAG 单答案:Hit Rate@K
  • RAG 多答案:Recall@K
  • 排序质量:MRR@K 或 NDCG@K
  • 综合:NDCG@K

4.3 K 的选择

K 的选择与 RAG 上下文长度耦合:

K=1

  • 严格,只看 top-1 是否命中
  • 适合"单 chunk 答案"场景
  • Hit Rate@1 通常 0.4~0.6(难)

K=5

  • RAG 最常用
  • 给 LLM 5 个 chunk,至少 1 个含答案
  • Hit Rate@5 通常 0.7~0.85

K=10

  • 宽松,给 LLM 更多上下文
  • Hit Rate@10 通常 0.8~0.95
  • 但 top-10 chunk 多,LLM 可能"lost in middle"

K=20+

  • 极宽松,几乎一定命中
  • 但上下文稀释严重,LLM 难聚焦

实践:RAG 用 Hit Rate@5(K=5),平衡召回和上下文聚焦。

4.4 Hit Rate 的局限

局限 1:不区分命中数量

top-5 命中 1 个 vs 命中 5 个,Hit Rate 都是 1。丢失命中密度信息。

局限 2:不区分命中位置

top-1 命中 vs top-5 命中,Hit Rate 都是 1。但 top-1 命中 LLM 更易答对(lost in middle 风险低)。

局限 3:每查询只标 1 个相关时退化

如果每查询多相关文档,Hit Rate 不反映"召回了几个"。

局限 4:不反映排序质量

只看是否在 top-K,不看 top-K 内部排序。

应对

  • 配合 MRR@K(看命中位置)
  • 配合 Recall@K(看命中数量)
  • 配合 NDCG@K(综合)

4.5 Hit Rate 在 RAG 评估框架中的位置

主流 RAG 评估框架(RAGAS、TruLens、LangSmith)都用 Hit Rate:

RAGAS

  • context_recall:top-k 含答案的 chunk 比例(类似 Hit Rate)
  • context_precision:top-k 中相关 chunk 比例

TruLens

  • context_relevance:检索上下文相关性
  • 包含 Hit Rate 类指标

LangSmith

  • 自定义评估器,常用 Hit Rate@K

典型 RAG 评估流程

  1. 准备评估集(query + 金标准答案 + 金标准 chunk)
  2. 用 RAG 系统检索 top-k
  3. 计算 Hit Rate@k(检索是否命中)
  4. 用 LLM 生成答案
  5. 评估答案准确率(LLM-as-judge 或人工)
  6. 分析 Hit Rate 与答案准确率相关性

4.6 Hit Rate 的变体

Hit Rate@K with Multiple Relevant

$$ \text{HitRate@K} = \frac{1}{|Q|} \sum_q \mathbb{1}\left[\frac{|\text{top-}K(q) \cap \text{rel}(q)|}{|\text{rel}(q)|} \ge \theta\right] $$

要求 top-K 中相关文档比例超过阈值 $\theta$(如 0.5)。

Success@K

Hit Rate 的同义词,部分文献用 Success@K 表示。

Recall@K (Binary)

每查询只看是否命中,等价于 Hit Rate。

4.7 Hit Rate 评估的常见错误

错误 1:金标准 chunk 标注不全

只标了 1 个金标准 chunk,但实际多个 chunk 都含答案。Hit Rate 低估真实召回率。

错误 2:金标准 chunk 与检索 chunk 粒度不一致

金标准是段落级,检索 chunk 是句子级。需要按相同粒度比较。

错误 3:K 与 LLM 上下文不匹配

评估 Hit Rate@20,但 LLM 只能看 5 个 chunk。评估与实际脱节。

错误 4:只看 Hit Rate 不看答案准确率

Hit Rate 高不代表答案准确(LLM 可能答错)。要联合评估。

错误 5:评估集不代表生产分布

评估集 query 太简单或太复杂,Hit Rate 不反映真实表现。


L5 · 沿革与坑

5.1 历史脉络

  • 1990s:IR 评估早期就有 Recall@K,Hit Rate 是其特例
  • 2020:DPR 论文用 Recall@K 评估稠密检索
  • 2022+:RAG 兴起,Hit Rate 成为 RAG 检索评估的事实标准
  • 2023:RAGAS、TruLens 等框架内置 Hit Rate 类指标
  • 2024:Hit Rate@5 成为 RAG 系统标配评估指标

5.2 使用常见坑

坑 1:K 选错

K=1 太严格(Hit Rate 低估),K=20+ 太宽松(高估)。RAG 用 K=5。

坑 2:金标准标注不全

只标 1 个金标准 chunk,但实际多个含答案。Hit Rate 低估。建议标 3~5 个。

坑 3:粒度不一致

金标准是段落,检索 chunk 是句子。统一粒度比较。

坑 4:只看 Hit Rate

Hit Rate 不区分位置和数量。配合 MRR、Recall 一起看。

坑 5:评估集太小

100 query 的 Hit Rate 方差大。建议至少 500 query。

坑 6:评估集不代表生产

评估集 query 太典型,生产 query 更复杂多样。要从生产采样。

坑 7:忘了检索 + 生成联合评估

Hit Rate 高但 LLM 答错,可能 LLM 问题。要联合评估检索和生成。

坑 8:跨系统比较不公平

不同 RAG 系统的 chunk 大小、embedding 模型不同,Hit Rate 直接比不公平。要控制变量。

坑 9:Hit Rate 不反映用户体验

用户看的是答案,不是检索结果。Hit Rate 高但答案差,用户体验仍差。

坑 10:忘了 Hit Rate 是上限

Hit Rate@5 = 0.8 意味着最多 80% 答案能对,实际可能更低(LLM 答错、context 不足)。

5.3 RAG 评估的完整框架

Hit Rate 是 RAG 评估的一部分,完整框架包括:

检索阶段

  • Hit Rate@K:检索是否命中
  • MRR@K:命中位置
  • NDCG@K:综合排序

生成阶段

  • 答案准确率:LLM 答对比例
  • 答案相关性:答案是否切题
  • 答案忠实度:答案是否基于 context(不幻觉)
  • 答案完整性:答案是否完整

端到端

  • 用户满意度
  • 任务完成率
  • 响应延迟

主流框架

  • RAGAS:context_recall / context_precision / answer_relevancy / faithfulness
  • TruLens:context_relevance / groundedness / answer_relevance
  • LangSmith:自定义评估器

5.4 Hit Rate 提升策略

提升 Hit Rate@5 的方法

  1. 混合检索:BM25 + Dense,提升召回
  2. 更好 embedding:BGE-M3、E5 等先进模型
  3. chunk 优化:合适大小、语义完整、重叠切分
  4. 查询重写:扩展同义词、消歧
  5. Cross-encoder 精排:提升 top-k 排序
  6. 多路召回 + RRF 融合:互补精确和语义

典型提升幅度

  • 单 BM25:Hit Rate@5 ≈ 0.65
  • 单 Dense:Hit Rate@5 ≈ 0.75
  • 混合检索:Hit Rate@5 ≈ 0.85
  • 混合 + 精排:Hit Rate@5 ≈ 0.90

5.5 Hit Rate 的适用场景

适合用

  • RAG 检索评估(每查询 1~5 个金标准)
  • 快速评估召回质量
  • A/B 测试检索系统
  • 监控生产系统

不适合

  • 多相关文档场景(用 Recall@K)
  • 排序质量评估(用 MRR、NDCG)
  • 细粒度相关性评估(用 NDCG)
  • 用户体验评估(用答案准确率)

速记卡

维度Hit Rate
公式$\mathbb{1}[\text{top-}K \cap \text{rel} \ne \emptyset]$
范围[0, 1]
关心有无命中
不关心命中数量、位置
RAG 典型 K5
等价指标Recall@K(每查询 1 相关时)

与相关指标对比

指标公式适用
Hit Rate@K$\mathbb{1}[\text{top-}K \cap \text{rel} \ne \emptyset]$RAG 单答案
Recall@K$\text{top-}K \cap \text
MRR@K$1/\text{rank of first rel}$排序质量
NDCG@K$\sum \text{DCG} / \text{IDCG}$综合排序

RAG 评估完整流程

  1. 准备评估集(query + 金标准 chunk)
  2. 检索 top-k,算 Hit Rate@K
  3. LLM 生成答案
  4. 评估答案准确率
  5. 联合分析

一句话记忆:Hit Rate@K = top-K 至少含一个相关文档的查询比例。RAG 评估的事实标准,简单直观,关心"有没有命中"不关心位置和数量。RAG 典型 K=5,Hit Rate@5 ≈ 0.85 是混合检索的常见水平。


上一篇:学习排序 LTR -- 检索与召回类的终点。下一篇:Recall / Precision@K -- 更细致的检索评估指标。

内容采用 CC BY-SA 4.0,代码采用 MIT。