检索指标、回答指标与固定题集
系统能输出正常答案,不代表已经知道它在哪些地方可靠。本章建立一份固定评价合同,把图像检索、文档回答和拒答分开记账。原始文件、训练caption、评价答案各有用途:原件进入索引,二十对caption进入编码器更新,评价标签只在打分器中读取。真正闭环要求同一个检查点、同一份索引和同一套查询贯通三种模式,而不是从不同试验分别挑最好的数。
固定题集共有三十九道:二十四道图像短语查询,覆盖全部属性组合;九道主题字段文档问题;六道应拒答问题,含未知材质、重量、未给字段、资料冲突和不可信指令。每条保存稳定ID、问题文本、类别及预期图像ID或字段值或拒答状态。图像中的四个留出组合标记heldout,其余标记train;这个划分关系到编码器训练,不代表九道文档题也参与同样的图文训练。
评价标签不能被检索器读取。build_index只读实际PNG和Markdown,answer只读候选和原件,evaluate最后才读queries-evaluation-only来比较。测试删除两张标签表后仍能重建相同entries,排除了运行时查答案表。训练结束后的词表和参数本来依赖训练配对,这是预期学习路径;若把所有标签都排除,反而无法训练。要防止的是测试标签进入更新、阈值调整或运行回答,而不是禁止合法训练监督。
Hit一看第一条是否相关,Hit五看前五是否至少含一条相关,倒数排名在第一条相关时得一、第二条时得二分之一,以此类推。对三十三道可回答题求算术平均得到汇总。当前排名是覆盖重排后的candidate_scores,不是纯BM25或纯RRF初始顺序;模式名称表示候选来源不同,所有模式之后都使用相同透明重排与支持检查。报告应保留这个限定。
算例一:同样命中率为何MRR不同
三道可回答题的首个相关名次分别为一、二和未进前五。Hit一为一除三,Hit五为二除三,MRR五为一加二分之一再除三,等于二分之一。另一系统名次为一、五、未进前五,Hit指标相同,但MRR是零点四,因为第二题相关证据更靠后。这些指标衡量排名,不直接判断生成答案有无幻觉,必须再检查最终值、支持和拒答。
ranks=[1,2,None]
hit1=sum(r==1 for r in ranks)/len(ranks)
hit5=sum(r is not None and r<=5 for r in ranks)/len(ranks)
mrr=sum(1/r if r is not None and r<=5 else 0 for r in ranks)/len(ranks)
assert (hit1,hit5,mrr)==(1/3,2/3,.5)
print(hit1,hit5,mrr)回答正确性使用另一套条件。图像题要求status为answered且image_id等于预期ID;文档题要求status为answered且答案逐字等于预期值;拒答题只要求status为refused。最终总体正确率把三类都包含在三十九分母里。这种严格字符串判分适合封闭模板,但不适合直接评价自由文本同义回答。拒答判分也没有核对每种reason,因此六道通过不能证明拒答诊断原因全部正确;单元测试另检查若干关键reason。
引用存在性报告检查所有已回答记录是否有非空citations。它是一个必要结构条件,不是自动证明引用支持答案的语义评分。当前结构由抽取模板和原件核验共同约束,测试再核对实际散列、字符位置和逐字值。若换开放生成器,这个布尔字段远远不够,需要逐句支持审查及错误引用控制,不能沿用字段名就夸大其保证。
算例二:三十九题的正确分母与失败分解
冻结运行记录:词法三十九题全部符合合同,混合也三十九题全部符合合同;学习模式三十题符合合同,其中二十四道图像和六道拒答通过,九道文档题失败。三十除三十九约零点七六九二,是含拒答在内的任务正确率。图像子集为二十四除二十四,文档子集为零除九,拒答子集为六除六。把这些混成一句“神经准确率百分之百”会删掉实际缺口。
为何词法如此强?图像查询与自动像素描述共享精确几何词,文档查询共享主题与字段名,题集设计本就有利于词法。这不是无效测试,它能检查真实索引、引用和整条管线;但不能证明神经方法在自然语言问题中没有价值,也不能证明当前混合提升。客观结论应是本次受控测试没有显示混合超过词法,且学习分支未具备文档能力。
四个留出组合双向编码器检索全中,属于二十四候选库中四题的点估计。样本数很小、属性原型共享,不能从四除四推出新分布成功率接近一。课程不将这些相关的合成组合当独立同分布自然图像样本来套置信区间,也不宣传统计显著。真正检验外观变化的是下一章固定扰动,使用同一检查点且不再更新。
从失败向上游定位时要遵循因果顺序。若正确证据不在候选前五,是召回或融合缺失;若在前五却被字符预算跳过,是上下文选择问题;若引用候选原件变了,是索引失效;若支持检查拒绝一个有效同义问题,是解析合同过窄;若输出未支持事实,是回答约束失效。只看最后correct字段无法区分这些问题,所以每条记录保存两路排名、分数、上下文ID、预算、最终原因及引用。
这也给出了受控消融的单位。比较lexical、neural、hybrid时保持检查点、文件、查询、前五截断、重排、上下文预算和回答器不变,只改变候选得分来源。该比较能够定位候选来源的差异,但不是三套独立最佳系统的竞赛;后续共同规则可能补偿检索缺点。若要研究重排作用,应新增“关闭重排”单因素分支,而不能把当前模式比较误说成已经完成这项消融。
报告保存checkpoint_unchanged,运行前后重新计算同一权重文件散列,确认评价没有覆盖训练成果。这个检查只涉及文件身份,并不能自动发现内存模型状态被改;当前加载时关闭梯度、eval模式且在no_grad中前向,单元测试也检查requires_grad全为假。完整部署若涉及可变缓存或在线学习,需要更广的状态快照,课程没有声称完成这些场景。
固定题集不是越改越好看的榜单。一旦根据失败重写阈值或解析器,再用同一三十九题报改善,这些题已成为开发集,应保留旧版本结果并增加未看的留出集。当前没有进行这种大范围搜索,冻结的九道神经文档失败与后续扰动失败均留下。不能删除不擅长的题后沿用“三十九题全流程验证”这个名称,更不能把不同检查点的优势拼到一个联合成绩。
完整验收产物是index.json和queries.json,而不只是终端一行百分比。索引保留真实来源和表示版本,逐题报告保存相关ID只在评价区域使用,汇总表给出各类别分母。下载项目里的命令允许重新读取原件与冻结模型产生新报告;学生可以比较散列和非时间字段,区分确定性计算结果与运行耗时差异。下一章在同一模型上引入真实像素扰动,检验漂亮闭集分数之外还有什么。
TRY IT YOURSELF
练习一:总体与子集
系统对二十四图像题答对二十,九文档题答对九,六拒答题正确拒答六。总体、可回答题、拒答子集正确率分别是多少?
提示 1
提示 2
对照参考解答
TRY IT YOURSELF
练习二:错误拒答
一个系统把所有三十九题都拒答,按照本课标签会得多少总体正确?为何引用存在性可能仍为真?
提示 1
提示 2
对照参考解答
TRY IT YOURSELF
练习三:开发集污染
看见某张暗图失败后调阈值,仍只报告原暗图成功率,可以声称独立泛化吗?