当前位置: 首页 > news >正文

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/10MRR@20NDCG@10,可根据业务场景调整
  • 所有指标最终取值为所有有效Query的算术平均值

二、召回率(Recall@K)测试

1. 测试方法

严格遵循给定公式:
Recall@K=检索到的相关文档块数知识库中所有相关文档块数 Recall@K = \frac{\text{检索到的相关文档块数}}{\text{知识库中所有相关文档块数}}Recall@K=知识库中所有相关文档块数检索到的相关文档块数
通过批量调用检索接口获取Top-K结果,统计命中相关块的占比,衡量检索系统的全面性与兜底能力。可分别测试pgvectorscale原始向量召回、多路召回合并后、重排后三个节点的召回率,定位损耗环节。

2. 详细测试步骤

  1. 参数固化与环境校验
    • 记录当前测试环境的pgvectorscale索引参数、分块策略、嵌入模型版本、相似度过滤阈值
    • 验证知识库向量数据完整性,确保无缺失分块、无重复向量
  2. 批量接口调用与结果落盘
    • 编写自动化脚本遍历测试集所有Query,调用Weknora检索接口,指定返回Top-K结果
    • 每条请求落盘数据:Query、返回的文档块ID有序列表、对应相似度得分、请求时间
  3. 单样本召回率计算
    • 对每条有效Query,取返回结果的前K个ID,与真值相关块集合取交集,统计命中数量
    • 代入公式计算单条Recall@K:命中相关块数 ÷ 该Query全库相关块总数
  4. 整体指标聚合
    • 计算所有有效样本召回率的算术平均值,输出系统级Recall@3Recall@5Recall@10指标
  5. 劣化样本排查
    • 筛选召回率低于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=1Nranki1
其中rank_i是第i个问题首个正确答案出现的位置。统计每条Query首个相关文档块的排名,计算倒数排名后取平均值,核心衡量首位结果的命中准确性,适配问答场景用户优先查看首条引用的使用习惯。默认基于重排后最终返回给用户的排序计算。

2. 详细测试步骤

  1. 排序策略确认
    • 固定Weknora系统的全链路排序规则:pgvectorscale向量排序、多路召回合并策略、重排模型权重、业务置顶规则,确保与线上一致
    • 明确MRR统计边界:默认统计Top-20范围内的首个命中位置,超出范围则该条得分为0(即MRR@20
  2. 结果获取与落盘
    • 调用Weknora问答接口(或检索接口),获取每条Query的文档块有序列表,确保顺序与用户侧展示完全一致
    • 落盘完整排序结果,保留原始位次信息
  3. 单样本倒数排名计算
    • 按返回顺序从第1位开始遍历,找到第一个属于真值相关集合的文档块,记录其排名rank_i
    • 计算单条得分:1 / rank_i;若Top-20内无相关块,得分记为0
  4. 整体MRR计算
    • 代入公式,将所有样本得分求和后除以有效样本总数,得到系统最终MRR
  5. 场景化拆分统计
    • 按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−1log⁡2(i+1) DCG@K = \sum_{i=1}^{K} \frac{2^{rel_i} - 1}{\log_2(i+1)}DCG@K=i=1Klog2(i+1)2reli1
其中rel_i为第i位结果的相关性得分,IDCG@K为所有相关结果按相关性降序排列后的理想最大DCG。

2. 详细测试步骤

  1. 标注数据校验
    • 确认测试集所有相关文档块均完成相关性分级:3分(完全相关,可直接回答问题)、2分(高度相关,包含核心答案要素)、1分(部分相关,仅涉及主题)、0分(不相关)
    • 校验标注粒度与结构感知分块的chunk一一对应,无跨块、漏标情况
  2. 批量获取排序结果
    • 遍历测试集Query,调用Weknora接口获取Top-10有序结果列表,落盘存储位次与块ID映射
  3. 实际DCG计算
    • 按返回顺序逐位计算增益并累加,得到实际DCG@K
  4. 理想IDCG计算
    • 将该Query的所有相关文档块按相关性得分从高到低降序排列,取前K个,按相同公式计算理想最大累计增益IDCG@K
    • 若相关块总数不足K,则全量参与计算
  5. NDCG计算与聚合
    • 单条QueryNDCG@K = 实际DCG@K / IDCG@K;无相关块的样本剔除
    • 所有有效样本的NDCG取算术平均值,得到系统整体NDCG@10
  6. 劣化根因分析
    • 对NDCG低于0.5的样本,排查排序偏差原因:向量相似度偏差、重排模型失真、结构分块导致高相关内容被拆分等

3. 验收标准

指标项优秀标准良好标准合格标准
NDCG@5≥ 0.85≥ 0.75≥ 0.65
NDCG@10≥ 0.80≥ 0.70≥ 0.60

注:对齐行业通用标准,NDCG@10 > 0.8为优秀水平。


五、测试约束与注意事项

  1. 变量控制要求
    • 版本对比测试必须保证分块策略、嵌入模型、pgvectorscale索引参数、重排规则完全一致,仅保留单一变量
    • 禁止在测试过程中调整知识库内容、向量索引或排序参数
  2. 结构感知分块适配
    • 所有标注与统计必须以系统生成的单个chunk为最小单位,禁止按整篇文档、整个段落统计
    • 若单个答案跨多个chunk,需分别标注每个chunk的相关性等级,不可合并计算
  3. pgvectorscale 特性注意
    • 测试前需预热向量库,避免冷启动查询的性能与排序波动
    • 若开启了pgvectorscale的标量过滤、元数据过滤,需在测试报告中注明过滤条件
  4. 大模型影响说明
    • 本次检索指标默认与qwen3.5-122b-a10b生成环节解耦,仅评估检索链路能力
    • 若评估端到端问答的引用排序,需确认大模型不会调整引用块的顺序,否则需基于最终生成的引用列表计算指标
  5. 结果有效性要求
    • 有效样本量不得少于200条,否则指标不具备统计显著性
    • 测试需重复执行3次取平均值,排除偶发波动影响
http://www.cnnetsun.cn/news/3388220.html

相关文章:

  • IP与IK防护:厂家必须知道的可靠性真相
  • C++高精度算法实现:从原理到工程实践,手把手构建大整数运算库
  • STM32 UART串口中断接收与状态机解析实战(一种高效稳定的解析范式)
  • TI MSP430F676x1A三相电能计量SoC:架构、低功耗设计与开发实战
  • 告别setup.py:使用pyproject.toml打造现代Python包
  • 基于STM8与DS18B20的LCD1602四线驱动温度监测系统实现
  • DLP3010芯片组应用实战:从光学设计到热管理的系统级避坑指南
  • 生产管理5M1E:人、机、料、法、环、测到底该怎么理解?
  • Unity动画事件实战:帧级精准触发游戏音效与特效
  • 实战指南|心理学实验样本量计算:从理论到实践
  • Unity Shader Graph纹理数组:性能优化与实战应用指南
  • 在YOLOv11中引入Transformer自注意力:是锦上添花还是负优化?
  • 攻克英语期刊写作:从Results到Discussion的实战解析与避坑指南
  • 从性能瓶颈到无缝融合:使用Boost.Python构建C++与Python的混合计算引擎
  • 人机识别对抗——鼠标轨迹模拟:贝塞尔曲线、噪声注入、速度变化与验证通过
  • 实战演练:利用MATLAB构建(7,4)汉明码的完整通信链路仿真
  • PyBind11 2.12 零拷贝数据交换:C++与Python高性能混合编程实践
  • 【强化学习】MCTS 中的 UCB 变体:从理论到实战的探索与利用平衡术
  • 基于STM32单片机的USB有线键盘无线键盘数字键盘设计/DIY-T154
  • 从几何变换到数据降维:特征值与特征向量的核心应用解析
  • 智能车浅谈——从PID到模型预测:方向控制算法演进
  • FPD-Link III解串器DS90UB662-Q1:多路视频同步与CSI-2协议实战解析
  • 基于stm32单片机超声波测距 倒车雷达 防撞报警 语音播报设计系统312(设计源文件+万字报告+讲解)(支持资料、图片参考_相关定制)_
  • Shell脚本:巧用cat与EOF实现动态配置文件的自动化生成
  • GPT-5.6医疗健康能力评估:AI在生命科学与临床研究的突破应用
  • GPT-4 Turbo接入VS Code实战:合规API调用与IDE插件工程化实践
  • 多Agent架构设计实战:Agent之间如何互相调用?权限体系怎么搞?
  • 围棋AI分析工具:识别定式陷阱与双虎变化实战指南
  • ERNIE-5.0-preview:语义结构图谱驱动的可追溯大模型
  • Android高版本抓包实战:从证书不信任到系统级信任的完整指南