信息检索与检索增强生成
“曾有两次有人问我:‘请问巴贝奇先生,如果把错误的数字输入机器,它会输出正确答案吗?’……我实在无法理解,究竟是怎样混乱的观念才会引出这样的问题。”——Babbage(1864)
人们总有了解事物的需要。因此,计算机几乎一出现,人们就开始向它提问。到 1961 年,已经有系统能够回答有关美国棒球统计数据的问题,例如“洋基队在七月打了多少场比赛?”(Green et al., 1961)。甚至在 20 世纪 70 年代的虚构作品中,道格拉斯·亚当斯在《银河系漫游指南》中创造的计算机“深思”也回答了“关于生命、宇宙以及一切的终极问题”。[1] 由于大量知识都编码在文本中,早在 LLM 出现之前,系统回答问题的表现就已经达到人类水平:2011 年,IBM 的 Watson 系统赢得电视智力竞赛节目 Jeopardy!,在下面这类问题上超过了人类:
威廉·威尔金森的《瓦拉几亚与摩尔达维亚公国纪事》启发了这位作家最著名的小说。[2]
因此,大语言模型的一项重要功能自然是满足人类的信息需求。大量信息都在线上,所以寻找能够满足我们需求的信息,与网络信息检索——即搜索引擎所执行的任务——密切相关。事实上,随着现代搜索引擎与大语言模型逐渐融合,两者的界限正日益模糊。
考虑一些简单的信息需求,例如可以用短文本中的事实回答的事实型问题:
(11.1) 卢浮宫位于哪里?
(11.2) 核爆炸中的能量来自哪里?
(11.3) 如何在 LaTeX 中输入花体小写字母 l?
要让 LLM 回答这些问题,我们可以直接对它进行提示。例如,一个经过问答指令微调(指令微调见第 8 章)的预训练 LLM,可以直接回答:
卢浮宫位于哪里?
模型以该前缀为条件进行生成,并将响应作为答案。这之所以有效,是因为大语言模型在预训练数据中处理过大量事实,包括卢浮宫的位置,并将这些信息编码进了参数。这类事实知识似乎存储在 Transformer 模型规模很大的前馈层连接中(Geva et al., 2021; Meng et al., 2022)。
直接提示 LLM 对许多生成任务都很有用,其中也包括涉及事实的任务。然而,知识存储在 LLM 的前馈权重中,这使得提示法在正确生成事实性文本或答案时面临若干问题。
第一个也是最主要的问题是,LLM 在生成有关事实的答案或其他文本时经常出错。大语言模型会产生幻觉(hallucination)。幻觉是指不忠实于现实事实的响应。也就是说,在回答问题时,大语言模型有时会编造听起来似乎合理的答案。例如,Dahl et al.(2024)发现,在被问及法律领域的问题(如特定法律案件)时,大语言模型产生幻觉的比例高达 69%~88%。即使正确事实已经存储在参数中,LLM 有时仍会给出错误的事实性回答;其原因似乎是前馈层未能回忆起参数中存储的知识(Jiang et al., 2024)。
我们也并非总能判断语言模型何时正在产生幻觉,部分原因在于 LLM 的校准(calibration)并不好。在一个经过良好校准的系统中,系统对答案正确性的置信度与答案实际正确的概率高度相关。因此,即使一个校准良好的系统答错了,它至少可能会对答案有所保留,或提醒我们查证其他来源。但由于语言模型的校准不佳,它们经常以十足的把握给出完全错误的答案(Zhou et al., 2024a)。
用简单提示方法满足用户信息需求的第二个问题是:要求大语言模型从预训练参数中作答,无法让我们查询专有数据。我们希望使用语言模型帮助用户满足与私人电子邮件等专有数据有关的信息需求;在医疗应用中,我们可能希望将语言模型用于医疗记录;公司可能拥有包含客户服务或内部使用所需答案的内部文档;律师事务所也需要查询专有文档中的法律证据开示材料。这些数据(但愿)都不在大语言模型预训练所用的大型网络语料库中。
使用大语言模型回答知识性问题的最后一个问题是,它们是静态的:模型只在某个特定时间进行过一次预训练。这意味着 LLM 无法讨论快速变化的信息(例如上周发生的事情),因为它们无法获得发布日期之后的最新信息。
为解决直接提示生成事实性文本时的上述问题,一种办法是为语言模型提供外部知识来源,例如医疗或法律记录、私人电子邮件或公司文档等专有文本,并使用这些文档回答问题。这种方法称为检索增强生成(retrieval-augmented generation, RAG),也是本章的重点。在 RAG 中,我们使用信息检索(information retrieval, IR)技术,检索可能含有有助于回答问题之信息的文档,再让大语言模型依据这些文档生成答案。
让答案以检索到的文档为依据,可以解决直接用提示回答问题时的部分困难。首先,这有助于确保答案以某个经过整理的数据集中的事实为基础。系统还可以在给出答案的同时,向用户展示答案所依据的段落或文档上下文。这些信息可以增强用户对答案准确性的信心(也可以帮助他们发现错误)。此外,这些检索技术还可用于我们希望使用的任何专有数据,例如法律或医疗应用中的数据。
我们先介绍信息检索,即根据表达用户信息需求的查询,从文档集合中选出最相关文档的任务。接着介绍基于稀疏 tf-idf 向量余弦的经典方法,以及使用 BERT 或其他语言模型对查询和文档进行神经表示的现代“稠密”检索器。随后,我们将介绍检索增强生成范式。
最后,我们将讨论各种带有问题和答案的数据集;这些数据集既可以在指令微调中用于微调 LLM,也可以作为评估基准。