Weknora AI知识库问答系统检索指标测试方法
Weknora AI知识库问答系统检索指标测试方法
一、测试前置条件
1. 系统环境与技术栈确认
- Weknora系统测试环境与生产配置一致,目标知识库已完成结构感知分块,所有文档块通过text-embedding-v4模型生成向量,存储于pgvectorscale向量数据库
- 向量库索引参数(HNSW的
ef_search/ef_construction等)、相似度阈值、多路召回开关、重排策略均已固定并记录,保证测试变量唯一 - 大模型qwen3.5-122b-a10b为生成环节组件,本次检索指标测试默认与生成环节解耦;若评估端到端问答引用排序,需固定大模型引用排序规则
2. 测试数据说明
- 测试集已完成标注,单条数据格式:
{查询Query, 全量相关文档块ID集合, 相关性等级映射表} - 标注粒度与系统结构感知分块的chunk粒度完全对齐,以单个文档块为最小标注单位
- 测试集覆盖高频查询、长尾问题、模糊提问、多答案场景等,样本量≥300条,具备统计代表性
3. 统一评估规则
- 排名计数从1开始,禁止使用程序索引0作为排名起始
- 无任何相关文档的Query为无效样本,剔除出指标统计
- 默认评估K值:
Recall@3/5/10、MRR@20、NDCG@10,可根据业务场景调整 - 所有指标最终取值为所有有效Query的算术平均值
二、召回率(Recall@K)测试
1. 测试方法
严格遵循给定公式:
Recall@K=检索到的相关文档块数知识库中所有相关文档块数 Recall@K = \frac{\text{检索到的相关文档块数}}{\text{知识库中所有相关文档块数}}Recall@K=知识库中所有相关文档块数检索到的相关文档块数
通过批量调用检索接口获取Top-K结果,统计命中相关块的占比,衡量检索系统的全面性与兜底能力。可分别测试pgvectorscale原始向量召回、多路召回合并后、重排后三个节点的召回率,定位损耗环节。
2. 详细测试步骤
- 参数固化与环境校验
- 记录当前测试环境的pgvectorscale索引参数、分块策略、嵌入模型版本、相似度过滤阈值
- 验证知识库向量数据完整性,确保无缺失分块、无重复向量
- 批量接口调用与结果落盘
- 编写自动化脚本遍历测试集所有Query,调用Weknora检索接口,指定返回Top-K结果
- 每条请求落盘数据:Query、返回的文档块ID有序列表、对应相似度得分、请求时间
- 单样本召回率计算
- 对每条有效Query,取返回结果的前K个ID,与真值相关块集合取交集,统计命中数量
- 代入公式计算单条Recall@K:命中相关块数 ÷ 该Query全库相关块总数
- 整体指标聚合
- 计算所有有效样本召回率的算术平均值,输出系统级
Recall@3、Recall@5、Recall@10指标
- 计算所有有效样本召回率的算术平均值,输出系统级
- 劣化样本排查
- 筛选召回率低于0.3的Query,关联pgvectorscale底层检索日志,排查是否为向量匹配偏差、分块不合理或阈值过滤导致
3. 验收标准
| 指标项 | 优秀标准 | 良好标准 | 合格标准 |
|---|---|---|---|
| Recall@3 | ≥ 0.70 | ≥ 0.60 | ≥ 0.50 |
| Recall@5 | ≥ 0.80 | ≥ 0.70 | ≥ 0.60 |
| Recall@10 | ≥ 0.90 | ≥ 0.80 | ≥ 0.70 |
注:专业领域深度知识库可下调5%-10%阈值。
三、MRR(平均倒数排名)测试
1. 测试方法
严格遵循给定公式:
MRR=1N∑i=1N1ranki MRR = \frac{1}{N} \sum_{i=1}^{N} \frac{1}{rank_i}MRR=N1i=1∑Nranki1
其中rank_i是第i个问题首个正确答案出现的位置。统计每条Query首个相关文档块的排名,计算倒数排名后取平均值,核心衡量首位结果的命中准确性,适配问答场景用户优先查看首条引用的使用习惯。默认基于重排后最终返回给用户的排序计算。
2. 详细测试步骤
- 排序策略确认
- 固定Weknora系统的全链路排序规则:pgvectorscale向量排序、多路召回合并策略、重排模型权重、业务置顶规则,确保与线上一致
- 明确MRR统计边界:默认统计Top-20范围内的首个命中位置,超出范围则该条得分为0(即
MRR@20)
- 结果获取与落盘
- 调用Weknora问答接口(或检索接口),获取每条Query的文档块有序列表,确保顺序与用户侧展示完全一致
- 落盘完整排序结果,保留原始位次信息
- 单样本倒数排名计算
- 按返回顺序从第1位开始遍历,找到第一个属于真值相关集合的文档块,记录其排名
rank_i - 计算单条得分:
1 / rank_i;若Top-20内无相关块,得分记为0
- 按返回顺序从第1位开始遍历,找到第一个属于真值相关集合的文档块,记录其排名
- 整体MRR计算
- 代入公式,将所有样本得分求和后除以有效样本总数,得到系统最终MRR
- 场景化拆分统计
- 按Query类型(单答案/多答案、精确/模糊)拆分计算MRR,定位薄弱场景
3. 验收标准
| 等级 | MRR@20 指标 | 业务含义 |
|---|---|---|
| 优秀 | ≥ 0.80 | 绝大多数问题的首个结果即为相关答案,用户无需翻找 |
| 良好 | ≥ 0.70 | 首位结果准确率较高,仅少量问题需查看第二条结果 |
| 合格 | ≥ 0.60 | 首位结果基本可用,长尾场景存在排序靠后问题 |
| 不合格 | < 0.60 | 首位结果偏差较大,需优化重排策略或分块策略 |
四、NDCG(归一化折损累计增益)测试
1. 测试方法
遵循归一化折损累计增益逻辑,采用工业界通用的指数增益DCG公式,先计算实际排序的累计增益DCG,再计算理想排序下的最大累计增益IDCG,最终用DCG/IDCG得到归一化的NDCG值,衡量整体排序的合理性。相关性采用4级分级标准,区分不同文档块的信息价值。
NDCG@K=DCG@KIDCG@K NDCG@K = \frac{DCG@K}{IDCG@K}NDCG@K=IDCG@KDCG@K
DCG@K=∑i=1K2reli−1log2(i+1) DCG@K = \sum_{i=1}^{K} \frac{2^{rel_i} - 1}{\log_2(i+1)}DCG@K=i=1∑Klog2(i+1)2reli−1
其中rel_i为第i位结果的相关性得分,IDCG@K为所有相关结果按相关性降序排列后的理想最大DCG。
2. 详细测试步骤
- 标注数据校验
- 确认测试集所有相关文档块均完成相关性分级:3分(完全相关,可直接回答问题)、2分(高度相关,包含核心答案要素)、1分(部分相关,仅涉及主题)、0分(不相关)
- 校验标注粒度与结构感知分块的chunk一一对应,无跨块、漏标情况
- 批量获取排序结果
- 遍历测试集Query,调用Weknora接口获取Top-10有序结果列表,落盘存储位次与块ID映射
- 实际DCG计算
- 按返回顺序逐位计算增益并累加,得到实际
DCG@K
- 按返回顺序逐位计算增益并累加,得到实际
- 理想IDCG计算
- 将该Query的所有相关文档块按相关性得分从高到低降序排列,取前K个,按相同公式计算理想最大累计增益
IDCG@K - 若相关块总数不足K,则全量参与计算
- 将该Query的所有相关文档块按相关性得分从高到低降序排列,取前K个,按相同公式计算理想最大累计增益
- NDCG计算与聚合
- 单条Query
NDCG@K = 实际DCG@K / IDCG@K;无相关块的样本剔除 - 所有有效样本的NDCG取算术平均值,得到系统整体
NDCG@10
- 单条Query
- 劣化根因分析
- 对NDCG低于0.5的样本,排查排序偏差原因:向量相似度偏差、重排模型失真、结构分块导致高相关内容被拆分等
3. 验收标准
| 指标项 | 优秀标准 | 良好标准 | 合格标准 |
|---|---|---|---|
| NDCG@5 | ≥ 0.85 | ≥ 0.75 | ≥ 0.65 |
| NDCG@10 | ≥ 0.80 | ≥ 0.70 | ≥ 0.60 |
注:对齐行业通用标准,
NDCG@10 > 0.8为优秀水平。
五、测试约束与注意事项
- 变量控制要求
- 版本对比测试必须保证分块策略、嵌入模型、pgvectorscale索引参数、重排规则完全一致,仅保留单一变量
- 禁止在测试过程中调整知识库内容、向量索引或排序参数
- 结构感知分块适配
- 所有标注与统计必须以系统生成的单个chunk为最小单位,禁止按整篇文档、整个段落统计
- 若单个答案跨多个chunk,需分别标注每个chunk的相关性等级,不可合并计算
- pgvectorscale 特性注意
- 测试前需预热向量库,避免冷启动查询的性能与排序波动
- 若开启了pgvectorscale的标量过滤、元数据过滤,需在测试报告中注明过滤条件
- 大模型影响说明
- 本次检索指标默认与qwen3.5-122b-a10b生成环节解耦,仅评估检索链路能力
- 若评估端到端问答的引用排序,需确认大模型不会调整引用块的顺序,否则需基于最终生成的引用列表计算指标
- 结果有效性要求
- 有效样本量不得少于200条,否则指标不具备统计显著性
- 测试需重复执行3次取平均值,排除偶发波动影响
