Self-Evolving Search Index
Sangam Lee, Wonjae Lee, Sunghwan Kim, Deogyong Kim, Jaehoon Kim, Daye Nam, SeongKu Kang, Dongha Lee
cs.IR, cs.AI
2026-09-17
Self-Index让索引按检索失败自行改写key,并用模拟查询主动探盲区。BRIGHT上BGE的nDCG@10从13.9升到21.8,相对提升57%,搜索agent正确率也跟着涨、检索次数下降。
检索质量卡在索引key怎么写。Doc2Query、SPIKE、EnrichIndex、RL-Index都是事先定一种改写策略,或者用标注数据学一种策略,再整库重跑。换语料类型(自然语言、代码、表格)或换retriever(BM25、BGE、Qwen3-Embedding),同一策略有时加分有时减分。环境一变,人要重新诊断失败、改策略、再全量重建。这套循环贵,也跟不上agent带来的多样查询。
延世大学(部分作者挂三星研究院)把「进化索引」从人驱动改成索引自己转。
每个文档对应一组key,检索分取该文档key与query的最大相关度。Self-Index不改原文,只改key。
Optimizer(Qwen3.6-35B-A3B)对一批查询跑三步。Self-Diagnosis:调用当前retriever,给每条被命中的key做共检索画像,记录它常跟哪些别的文档key一起出现;结合原文,判断这条key有没有把文档的区分性信息暴露出来。Self-Revision:对出问题的文档整组改写,避免只改一条造成组内重复。Self-Validation:新key必须过三关才入库,忠实(能被原文支撑)、特异(抓这份文档特有的内容)、分离(相对竞争key的最大相关度要下降)。原文本key始终保留。通不过就维持原状。
只对已见查询做反应会偏科。Query Simulator从语料抽样文档,生成尚未覆盖的查询,再用Jaccard做Dissimilarity过滤,压低和已用查询的词面重叠,把新查询交给Optimizer。主实验里,进化全程只用模拟查询,评测查询保持不可见。
BRIGHT上nDCG@10,三次运行平均:
| Retriever | 基线 | Self-Index | 相对提升 |
| BM25 | 14.5 | 20.4 | +40.4% |
| BGE | 13.9 | 21.8 | +57.0% |
| Qwen3-Emb-8B | 18.8 | 26.1 | +38.8% |
自然语言、代码、数学三类语料,在三种retriever下平均分都是Self-Index最高。对照里Doc2Query在部分设置会掉点(BGE上-6.2%),SPIKE和RL-Index多是个位数相对提升。表格检索(Spider2、FIBEN、BEAVER)上,BM25从33.2到49.5(+49.1%),Qwen3-Emb-8B从49.0到57.0(+16.2%),也超过专为表格设计的EnrichIndex。
下游BrowseComp-Plus:GPT-OSS-120B加BM25的正确率从31.08升到58.92,检索次数从21.16降到16.62;GPT-5.4-nano加BM25从36.51升到64.94。语料扩到40万篇时,Self-Index正确率仍稳,SPIKE和无索引的直接语料交互掉得更明显。Agent记忆LongMemEval-V2上,三种记忆系统整体正确率分别相对+13.9%、+12.4%、+9.2%;gotchas这类更依赖记忆怎么写、不那么依赖怎么取的子集,基本没动。
消融:拿掉验证,自然语言平均从26.6掉到16.1,低于基线。三个验证条件单独去都会掉。拿掉共检索画像,自然语言-6.9。拿掉查询去重,三类语料全掉。
索引优化长期是「人选一种改写、全库重做」。Self-Index把诊断、局部改写、过闸、再探盲区串成闭环,同一套流程能打BM25和稠密retriever,也能打表格和代码。对搜索agent,更高的正确率叠更少的search call,是同时改效果和在线成本。只改key、不改记忆内容,所以能接到现有memory系统上。
代价在离线:每轮都要LLM诊断和改写。这不是免费午餐,是把人的运维循环换成模型的离线循环。
没有独立局限节。Optimizer本身是35B级MoE,索引进化的离线账单不会小,论文主文几乎没报token或墙钟。主实验评测查询不可见,但模拟查询仍从同一语料采样,泛化边界是「未见查询」而不是「未见语料」。部分子集在变好的平均分下面是退步,例如BM25在LeetCode从24.4掉到22.4。记忆实验的gotchas没有提升,说明Self-Index救不了记忆内容本身写错。语料规模实验只跑了BM25加一个agent骨架,稠密retriever在百万级语料上的表现还是空白。