Differentiable Search Index 简读
DSI(Differentiable Search Index)是生成式检索方向较早的一篇代表性论文,发表于 NeurIPS 2022。其核心做法是:将整个文档库的内容编码进一个 Transformer 的参数中,检索时直接用 seq2seq 解码出文档 ID,省去倒排索引、向量库与近邻搜索这一整套独立组件。
更早的 GENRE(De Cao et al., 2020)已用 seq2seq 自回归地解码 Wikipedia 实体页面标题,DSI 在论文中也将其作为相关工作引用。DSI 的进一步贡献在于:将解码目标从有语义的实体名扩展到任意形式的 docid(包括随机整数和层次化语义 ID),并系统比较了文档表示、ID 表示与训练策略的影响。这把检索从一个系统工程问题,重新表述成了一个端到端的机器学习问题,索引等价于训练,检索等价于推理。
论文地址: arxiv.org/abs/2202.06991
基本设定
传统检索方案分为两个阶段:将 query 与 doc 各自编码为向量,再通过 MIPS(Maximum Inner Product Search)找最近邻。Dual Encoder 是这一思路的代表,目前仍是工业界的默认选择。
DSI 将两个阶段合并为一步:训练一个 seq2seq 模型,输入 query,直接生成 docid。

文档内容存储于模型权重中。训练包含两个任务:indexing(doc → docid)负责让模型记住每个文档与其 ID 的对应,retrieval(query → docid)负责将查询映射到对应文档。两者共享参数,多任务联合训练。
在 NQ320K 数据集上,11B 参数的 DSI(语义 docid)Hits@1 达到 40.4%,同规模 Dual Encoder 为 24.3%。
docid 的表示方式
Atomic docid:每个文档分配一个独立 token,输出层的 softmax 维度随之扩展。直观,但 NQ320K 中 docid 词表规模需开到 32 万量级,扩展性差,训练亦不稳定。
Naive string docid:将整数 ID 视作字符串(如 “237491”),逐字符解码。可行,但 docid 之间没有语义关联,模型只能死记。
Semantic structured docid:先用 BERT 将所有文档编码为向量,对其做 k-means 聚成 10 类,每个文档以所属大类的数字(0-9)作为 docid 第一位;若某类内文档数超过 100,则在该类内继续聚 10 个子类,递归构造。每个文档最终得到形如 “233” 的层次化字符串。

整个语料库被组织为一棵 trie,beam search 沿树结构解码,每解码一位搜索空间缩小为原来的十分之一。
检索的难度与目标对象的命名方式高度相关。随机数字 ID 等价于让模型从零学习一套查表算法;层次化语义 ID 则相当于将聚类结果以决策树的形式预先提供给模型。在相同模型容量下,后者的优化难度显著更低。
scaling 曲线上这一差异尤其明显:

Dual Encoder 几乎不随模型规模提升,220M 到 11B 仅增长不到 4 个点。DSI Naive 受益于规模,从 220M 的 6.7 增长到 11B 的 23.8,但绝对值在 11B 时才与 DE 大致追平。DSI Semantic 起点与 DE 相当,增长趋势更陡,11B 时相对 DE 提升约 66%(40.4 vs 24.3)。
模型架构未变,仅 docid 的命名方式不同,scaling 行为已截然不同。
indexing 即训练目标
在传统检索系统中,indexing 是离线预处理,retrieval 是在线运行时,两者完全分离。
DSI 将两者均视为 seq2seq 的训练目标。作者发现,先 indexing 再 retrieval 的两段式训练效果一般(mediocre),混合多任务训练显著更优,indexing 与 retrieval 样本的最佳比例约为 32:1。
原因在于这两个任务并非平级。retrieval 完全寄生于 indexing:若 docid 未被先"赋予含义",retrieval 阶段所做的不过是预测无意义的 token。
附录中还有一个现象。DSI 训练过程中存在明显的 catastrophic forgetting:刚 index 完一批文档时,对该批文档的 retrieval 准确率最高;经过一个 epoch 再次轮回到该批数据之前,准确率会显著下跌。整个训练过程呈现规律的"波峰波谷",最终选取的 checkpoint 实际上对应某个波峰时刻。
模型权重与数据库的存储语义并不相同。数据库中插入一行不影响其他行,而模型权重的更新是全局性的,新增一篇文档可能挤压已记忆的内容。
文档长度的影响
另一个发现是 indexing 阶段输入文档的长度。作者比较了 32、64、128 个 token 三种截断方案。

L=32 的效果显著优于 L=128,L=64 与 L=32 接近,主要在 L>64 之后下降。这一结果初看反直觉,因为更多 token 通常意味着更多信息。论文将其归因于 token 数变多后的优化与记忆难度上升。
一个可能的直观解释是:模型实际记忆的并非文档内容本身,而是 doc → docid 的映射。短文本对应的"指纹"更紧凑,更易绑定到唯一 docid 上;过长的文本则引入额外噪声。
类似的"短单元更易对齐"的经验在后续检索工作中反复出现。RAG 系统普遍采用 chunk 而非整篇文档,主要出于上下文长度与召回粒度的考虑,indexing 粒度本身的影响也是其中一环。
零样本检索
零样本设定下,模型仅做 indexing 训练,不做 retrieval 训练,全程未见 (query, docid) 标注。
实验结果:DSI(atomic docid)在 NQ320K 上 Hits@1 为 25.1%,BM25 为 11.6%,SentenceT5 为 16.9%。
模型在没有任何监督信号指明 query-doc 对应关系的前提下,仅凭 indexing 阶段对文档内容的记忆,便能在测试时将自然语言问题映射到正确的文档。
一种可能的解释是 indexing 任务在内部学到了某种隐式的语义对齐:encoder 对"问题"与"答案文档"产生相近的表示,使得 decoder 触发的 docid 概率分布也接近,相当于一个不显式构造向量空间的 dual encoder。论文未明确给出这一解释。
总结
DSI 提出时 RAG 尚未成为主流。此后的发展走向了另一条路径:RAG 成为默认方案,向量数据库进入基础设施层,DSI 这条路线在搜索场景中并未大规模铺开。原因主要有三点。
增量更新。线上语料库每日都在变化。DSI 新增一篇文档需重新训练,向量库仅需 insert 一行。论文 Conclusion 中也将动态语料库列为重要的 future work。
可解释性。向量检索可以给出召回理由(点积高),DSI 直接由模型解码出 docid,调试难度较大。
规模。论文实验上限为 32 万文档、T5-11B。互联网级别的语料库下,这一参数预算难以支撑。
但 DSI 提出的问题并未过时:检索与生成是否是同一件事?LLM 直接回答 closed-book QA,与 DSI 将问题映射到 docid,本质区别究竟何在?
这一类比并不严格。论文 Related Work 中已明确将两者区分:CBQA 输出答案本身,DSI 输出的是定位文档的 ID;docid 是任意符号,需 indexing 显式建立 doc-id 绑定,而答案 token 在预训练词表中本就携带语义。即便如此,两者底层都依赖某种"参数化记忆",将语料知识压缩进权重,再通过解码取出。
DSI 在搜索场景中并未大规模落地,但在推荐场景下,将物品编码为语义 ID、由 seq2seq 直接解码出推荐结果的范式近年来已有不少落地工作。“索引即训练,检索即推理"这一线索一直在延续。LLM 知识截止日期的讨论,某种意义上也可以视为模型 indexing 了什么的问题,而 RAG 则是用外挂数据库弥补模型 indexing 不充分的部分。
DSI 暂时没有成为主流方案,但生成式检索可能是检索的未来。