为了使用Recall@k或Precision@k等指标定量评估向量搜索系统的性能,您首先需要一个基准来比较系统的输出。这个基准就是真实标准:一组查询与每项查询的真正相关文档或条目集合配对。依赖于这种基准的全面评估,对于调整参数和确保系统达到目标是必不可少的。构建高质量的真实标准数据集通常是此评估过程中最具挑战性,但也最重要的一部分。定义相关性的挑战在构建真实标准数据集之前,您必须面对“相关性”固有的主观性。一个用户认为相关的,另一个用户可能不这么认为。相关性高度依赖于查询的意图、用户的上下文以及特定任务(例如,为RAG找到一个精确答案,或是为了语义搜索了解相关概念)。挑战包括:主观性: 定义可一致应用的客观相关性标准很困难。范围: 对于给定的查询,有多少条目是真正相关的?它是一个固定数量,还是所有超出某个相关性阈值的条目?分级相关性: 通常,相关性并非二元的(相关/不相关)。有些文档可能高度相关,而有些则关联度不高。捕捉这些细微差别需要更复杂的标注方案。动态数据: 如果您的底层文档集合频繁更改,真实标准可能会过时。尽管存在这些挑战,但建立一个可用的相关性定义并构建相应的真实标准数据集对于系统化评估来说必不可少。构建真实标准数据集的方法“存在多种构建真实标准的方法,每种方法在成本、可扩展性和与相关性的符合程度上都有其自身的权衡。”人工标注这通常被认为是最可靠的方法,因为它直接涉及人工判断来评估相关性。流程:查询选择: 选择一组有代表性的查询,以反映预期的用户行为,涵盖常用(头部)、中等常用(中部)和稀有(尾部)查询。候选生成: 对于每个查询,检索一个潜在候选文档池。该池应大于预期相关条目数量,并且可能来自多个来源(例如,现有搜索方法、随机抽样),以减少单一检索系统带来的偏差。指南定义: 创建清晰、具体的标注指南,定义哪些内容构成任务的相关性。如果使用分级量表(例如,0 = 不相关,1 = 关联度不高,2 = 相关,3 = 高度相关),请包含不同相关性级别的示例。标注: 让多名训练有素的人工标注者根据指南独立评定每个候选文档对每个查询的相关性。仲裁: 解决标注者之间的分歧,通常通过讨论或由高级审阅者解决。标注者间一致性 (IAA): 衡量标注者之间的一致性对于评估标注质量和指南清晰度很重要。常用指标包括科恩 Kappa(适用于两名标注者)或克里彭多夫 Alpha(适用于多名标注者)。低IAA分数通常表示指南模糊或任务主观。工具: 此过程可以使用电子表格、自定义标注工具或Amazon SageMaker Ground Truth、Labelbox等专用平台,或doccano等开源选项来管理。虽然人工标注能提供高质量标注,但它通常成本高、速度慢,且需要仔细管理。使用用户行为的隐式信号除了直接的人工判断,您还可以从应用程序记录的用户交互中推断相关性。信号: 常用信号包括点击、加入购物车、购买、会话时长、复制粘贴内容或保存条目。其假设是用户与相关结果的交互更多。流程: 汇总查询-文档对的交互数据。具有高积极交互率(例如,给定查询的高点击率)的对可以被指定为相关。挑战:噪音: 点击可能具有误导性(意外点击、对不相关条目的好奇点击)。用户可能不会点击排列在下方但相关的条目。稀疏性: 许多查询-文档对的交互数据很少或没有,特别是对于尾部查询或新文档。展示偏差: 排列在上方结果自然地被点击更多,不论绝对相关性如何。隐式信号具有可扩展性,并反映真实用户行为,但需要仔细的清洗、过滤和解读。它们通常更适合相对比较(例如,A/B测试),而不是为召回率等指标建立绝对真实标准。合成真实标准生成这涉及通过编程方式创建查询-文档对,其中相关性是根据生成过程假定的。方法:问答对: 使用现有常见问题解答或让LLM根据文档段落生成问题。该文档成为生成问题的相关真实标准。重复/释义检测: 使用文档已知是释义或近似重复的数据集。一个文档可以作为另一个文档的查询。文档结构: 对于结构化文档,使用标题或小节标题作为查询,并使用相应内容作为相关文档。优点: 可以快速、廉价地大规模生成。有助于启动评估。缺点: 生成的查询可能无法反映自然用户语言或意图。可能无法完整体现相关性的全部复杂性。“合成数据对于初始系统检查或当其他方法不可行时很有用,但需根据性能进行验证。”运用权威基准数据集对于网络搜索或问答等常见任务,存在标准化数据集。示例: MS MARCO(段落排序)、TREC数据集(各种信息检索赛道)、SQuAD(问答)、Natural Questions(问答)、BEIR(多样化检索任务的基准测试套件)。优点: 允许与已发布结果进行比较,定义明确的评估协议。缺点: 可能与您的特定数据领域、分布或相关性定义不符。使用它们需要使您的数据格式和嵌入策略与基准对齐。使用基准对于学术比较或验证组件很有价值,但可能无法完全代表您特定应用场景中的性能。真实标准的结构化和维护收集后,真实标准数据需要进行结构化,以便在评估脚本中使用。一种常用格式是将查询标识符映射到相关文档标识符列表,可能带有相关性分数。JSON结构示例:[ { "query_id": "q_001", "query_text": "如何调整HNSW参数", "relevant_docs": [ {"doc_id": "doc_abc", "relevance": 3}, {"doc_id": "doc_xyz", "relevance": 2}, {"doc_id": "doc_pqr", "relevance": 3} ] }, { "query_id": "q_002", "query_text": "标量量化与乘积量化对比", "relevant_docs": [ {"doc_id": "doc_lmn", "relevance": 3}, {"doc_id": "doc_def", "relevance": 1} ] } ]查询选择: 确保用于真实标准创建的查询覆盖了与您的应用程序相关的各种主题、长度和预期难度。数据集大小: 所需查询的数量取决于所需的统计显著性和任务的多样性。从一小组(例如,50-100个查询)开始,并根据需要扩展。偏差意识: 注意在查询选择(例如,仅专家查询)或标注(例如,标注者之间的群体思维)过程中可能引入的偏差。维护: 定期审查并可能更新真实标准数据集,特别是当底层文档集合发生显著变化或用户需求演变时。使用真实标准进行指标计算这个精心构建的数据集构成了计算相关性指标的基础。例如,要计算特定查询的Recall@k:从您的向量搜索系统中检索该查询的前 $k$ 个结果。在您的真实标准数据集中查找该查询对应的已知相关文档ID列表。计算系统中前 $k$ 个结果中有多少存在于真实标准列表中。将此计数除以真实标准中该查询列出的相关文档总数(或有时上限为 $k$,取决于精确的定义)。设 $R_q$ 为真实标准中查询 $q$ 的相关文档ID集合, $S_{q,k}$ 为搜索系统为查询 $q$ 返回的前 $k$ 个文档ID集合。则:$$ \text{召回率}@k(q) = \frac{|S_{q,k} \cap R_q|}{|R_q|} $$同样地,Precision@k、平均倒数排名 (MRR) 和归一化折现累积增益 (nDCG) 都依赖于将系统输出与真实标准进行比较,通常会包含分级相关性分数(如果可用)。构建真实标准数据集并非易事但不可或缺的投入。它提供了衡量进展、比较不同算法或参数设置所需的客观依据,并最终确保您的向量搜索系统有效满足用户的信息需求。