文章不给了,先检索再回答 — DPR-ConvQA(攻关三)
这一章讲三件事: 开放域怎么改写了任务;稠密检索+对比学习怎么协同;检索器质量为什么是阅读器的天花板。 这是三大挑战的最后一条,也是离今天最近的一章——本章的「检索器+阅读器」骨架,就是现在人人挂在嘴边的那套「先找资料再作答」框架(名字见第 6 节)的前身。
1. 先看现象:真实用户不会替你翻好文章
前两章的世界其实很安逸:文章总是和问题一起递到手边。原书开篇就把这个舒适区拆了:现有 ConvQA 设定要求源文章随问题提供,这与真实场景不符——真实对话里,「金标文章」不会预先给到1。
于是任务扩成开放域对话式问答(OD-ConvQA,open-domain ConvQA):模型要先从一个大集合里检索出相关段落,再从中选答案。第 04 章的第四代(ORConvQA 三件套)已经在这条路上起步,但它们有一个共同习惯:把整个对话上下文原样喂给检索器。原书点破后果:无关轮次跟着混进检索,检回的段落也跟着跑偏,最终答案跟着遭殃2。而检索环节的失误特别致命:检索器传给阅读器的错误会被阅读器放大——上游一错,下游全垮3。
DPR-ConvQA(Dense Passage Retrieval for ConvQA)的两步棋,恰好对准这两个病灶:①把第 06/07 章的「实体剪历史」第一次搬进检索器——原书自述这是第一次有人把精选过的上下文放进检索模块4;②用对比学习微调段落表示,让相关段落更靠得近、 无关段落更推得开5。
2. 检索的两代:数关键词 vs 比向量
这一节回答:为什么检索非得换成「向量」不可。
第一代检索是关键词匹配,代表是 DrQA 用的 TF-IDF:给每个词按「在这篇多常见、在全集多稀有」打权重,数问题和段落的重合词。词面对得上就有分。它在本章的考卷上输得很惨:OR-QuAC 上 F1 只有 6.3(满分为 100)——因为对话式检索的痛点恰恰是词面对不上:当前问题只有「它是什么时候发行的?」,而目标段落里是「Aadat(2004)」。原书把这类问题叫词汇失配(vocabulary mismatch),并指出对话场景里失配更严重——这正是稠密检索的主场6。
第二代就是稠密检索(DPR,dense passage retrieval):用双编码器(dual-encoder)架构——问题一个编码器、段落一个编码器——把两边分别映进同一个向量空间,再用点积(两串数对应位相乘再求和,数字越大越相似)当相似度7。词面不重合没关系,「它发行的年份」和「Aadat 2004」的向量可以离得很近。代价是要