基于知识图谱增强的RAG系统阅读笔记(一)提升大语言模型的准确性
第一章 提升大语言模型的准确性
本章内容
- 大语言模型
- EXECUTE:大语言模型的局限性
- 持续微调模型的不足之处
- 检索增强生成
- 结合结构化与非结构化数据以支持各类问题
大语言模型(LLM)在多个领域展现了令人印象深刻的能力,但它们存在显著的局限性,影响了其实际应用效果,尤其是在生成准确且最新的信息时。为应对这些局限性,一种被广泛采用的方法是检索增强生成(Retrieval-Augmented Generation, RAG),该工作流将大语言模型与外部知识库相结合,以提供准确且时效性强的响应。通过在运行时从可信来源提取数据,RAG 能够显著减少(尽管无法完全消除)大语言模型最持久的挑战之一——“幻觉”现象。此外,RAG 使得系统能够无缝地将通用知识与模型预训练数据中可能未充分涵盖的专业领域信息相结合。尽管具有这些优势,目前的 RAG 实现往往仅专注于非结构化数据,而忽视了知识图谱等结构化数据源的潜力。
**知识图谱是实体、其属性及其相互关系的结构化表示,提供了一种语义框架,能够连接结构化与非结构化数据。**例如,**客户支持的对话记录属于非结构化文本,而产品目录或用户数据库则属于结构化数据。将二者结合,意味着系统能够将对话中提到的“我最近的笔记本电脑订单”与具体的型号、购买日期和保修状态等结构化记录关联起来。知识图谱作为 RAG 的关键组成部分,能够实现准确、富含上下文且相互关联的信息检索——例如,实时将客户关于药物相互作用的查询,链接到结构化的医疗指南、过往案例研究以及患者的病史。**将知识图谱集成到 RAG 流程中,可以克服大语言模型的局限性,增强数据检索能力,并促进在医疗、金融和技术支持等领域对多样化数据类型的统一管理和利用。
1.1 大语言模型简介
到目前为止,你很可能已经接触或听说过 ChatGPT,它是对话式人工智能中最著名的例子之一。ChatGPT 是由 OpenAI 开发的一种对话式用户界面,其背后由大语言模型(LLM)驱动,例如 GPT-4(OpenAI 等,2024)。大语言模型基于 Transformer 架构(Vaswani 等,2017),这种架构使它们能够高效地处理和生成文本。这些模型在海量的文本数据上进行训练,从而学习到语言的模式、语法、上下文,甚至一定程度的推理能力。**训练过程包括向模型输入包含各种文本的大型数据集,主要目标是使模型能够准确预测序列中的下一个词。**这种广泛的训练使模型能够基于从数据中学到的模式来理解和生成类似人类的文本。例如,如果你将“Never gonna”作为输入提供给一个大语言模型,你可能会得到如图 1.1 所示的输出。
尽管大语言模型在生成上下文恰当的文本方面表现出色,但它们远不止是自动补全系统。**它们在遵循指令和适应各种任务方面展现出的卓越能力令人印象深刻。**例如,你可以要求 ChatGPT 以特定风格生成关于某个主题的俳句。这种能力不仅体现了模式识别,更展示了对特定任务指令的理解,从而能够生成远超简单文本预测的创造性且细腻的输出。
大语言模型(LLM)遵循指令并生成多样化、复杂输出的能力,无论是创作一首俳句还是提供结构化的回答,都远远超出了简单预测序列中下一个词的范畴。这种理解和执行详细指令的能力,使得大语言模型特别适合处理各种各样的任务。在本书中,你将利用这种遵循指令的能力来设计和优化检索增强生成(RAG)流程。通过发挥模型的指令遵循能力,你可以更有效地集成检索组件,根据特定上下文定制响应,并优化系统的准确性与可用性。
如果你通过维基百科等外部信息源验证这一回答,你会发现模型生成的回答准确无误,没有包含任何虚假信息。这样的回应可能会让你误以为大语言模型内部构建了一个庞大的事实数据库,可以在被提问时进行检索。然而,事实并非如此:模型并不会存储其训练数据集中的具体事实、事件或信息。相反,它通过学习数据中的模式和统计规律,发展出一种生成看似准确内容的能力。
需要记住的是,大语言模型(LLM)基于 Transformer 架构,而 Transformer 是一种深度学习架构,其核心是利用神经网络来预测序列中的下一个词。
在训练过程中,模型会学习这些权重的值,以提高其预测准确性。当被问及某个具体历史事件时,大语言模型并不会像从数据库中检索那样“回忆”训练数据中的该事件,而是基于其神经网络中已学习到的权重生成响应,这类似于预测序列中的下一个词。因此,尽管大语言模型能够提供看似知识丰富的回答,但其响应是基于这些学习到的权重,而非明确的记忆。引用 Andrej Karpathy 的话:“我们大致理解它们(大语言模型)在构建并维护某种知识数据库,但即使这个知识库也非常奇怪、不完美且诡异。”
1.2 大语言模型的局限性
大语言模型(LLM)代表了人工智能发展历程中的一项突破性进展,在多种应用中展现出卓越的能力。然而,与任何变革性技术一样,它们也并非没有挑战和局限。在接下来的部分中,我们将深入探讨其中一些限制及其带来的影响。
1.2.1 知识截止问题
最明显的局限是,大语言模型无法获知其训练数据集之外发生的事件或信息。
在大语言模型的语境中,“知识截止日期”指的是模型训练数据所包含信息的最新时间点。模型可以访问涵盖该日期之前各类事件的广泛文本数据,并利用这些数据生成回答和提供信息。而在此截止日期之后发生的任何事件、出版物或研究成果,由于未包含在训练数据集中,模型均无法知晓,因此也无法提供有关这些事件、发展或研究的信息。
1.2.2 信息过时问题
另一个不那么明显的局限是,大语言模型(LLM)有时会提供过时的回应。尽管它们能够准确详尽地提供截至其知识截止日期之前的信息,但可能无法反映最近发生的发展。
这凸显了定期更新模型训练数据,或使其能够访问实时信息的重要性。随着事件和事实的不断演变,即使是所有权结构这样的细节,也可能显著影响我们对某个组织或个人的认知。这一局限性强调了确保人工智能系统在动态环境中保持准确性和时效性的必要性。
1.2.3 纯粹的幻觉
大语言模型(LLM)另一个众所周知的局限性是,它们倾向于给出断然且自信的回答——即使这些回答包含错误或捏造的信息。
人们可能会认为,尽管存在知识截止日期,这些模型在截止日期之前所涵盖的事件上仍能提供准确的事实数据。然而,即使是发生在截止日期之前的事件,其相关信息也可能是不可靠的。
一个典型的例子发生在美国:律师向法院提交了虚假的、凭空捏造的法律引用,而他们并未意识到这些引用是由 ChatGPT 生成的(Neumeister, 2023)。**这类自信但错误的信息通常被称为“幻觉”(hallucinations),即模型输出的内容听起来合理,但实际上在事实层面是错误的,甚至是完全虚构的。**外部引用,例如网址(URL)、学术文献引用或 WikiData ID 等标识符,尤其容易出现此类问题。
产生“幻觉”的原因是大语言模型并非推理引擎。它们是概率性的语言模型,其训练目标是基于训练数据中的模式,预测“听起来合理”的下一个词元(token)。它们并不像人类那样“知晓”事实,而是通过猜测最可能的文本延续来生成内容,而不论其真假。这种基于统计模式匹配与真正理解之间的根本差异,正是大语言模型与人类认知之间的本质区别。
用户必须认识到,大语言模型虽然通常能提供有用信息,但并非绝对可靠,仍可能生成错误的内容。在使用其输出时,必须持批判性态度,并通过可靠的外部来源验证其准确性,尤其是在对精确性和事实正确性要求较高的场景中。
1.2.4 缺乏私有信息
如果你正在使用大语言模型(LLM)构建一个企业聊天机器人,你很可能希望它能够回答涉及公司内部或专有信息的问题,而这些信息并未对外公开。在这种情况下,即使这些信息或事件发生在大语言模型的知识截止日期之前,由于它们并未包含在模型的训练数据中,模型也无法获知。因此,模型无法针对此类查询生成准确的回应。
种可能的解决方案是将公司的内部信息公之于众,以期其被纳入大语言模型的训练数据集中。然而,这种方法既不现实也不安全。相反,我们将在本书中探讨并演示更有效的策略,在保持数据隐私和控制权的前提下克服这些局限性。
关于大语言模型其他局限性的说明
大语言模型(LLM)在生成事实准确且时效性强的回应方面的局限性,但有必要指出,大语言模型还存在其他一些限制。其中包括:
- 回复中的偏见——大语言模型有时会生成带有偏见的回应,反映出其训练数据中存在的偏见。
- 缺乏真正理解和上下文感知——尽管大语言模型结构复杂,但它们并不真正理解文本。它们是基于从数据中学习到的语言模式来处理语言的,这意味着它们可能忽略语言中的细微差别和上下文的深层含义。
- 易受提示词注入攻击——大语言模型容易受到提示词注入(prompt injection)攻击,恶意用户可通过精心设计的输入操纵模型,使其生成不恰当、带有偏见或有害的回应。这一漏洞在现实应用场景中对大语言模型应用的安全性和完整性构成了重大挑战。
- 回应不一致——大语言模型在多次交互中可能对同一问题给出不同的答案。这种不一致性源于其概率性本质以及缺乏持久记忆,可能会影响其在需要稳定性与可重复性的应用中的实用性。
1.3 克服大语言模型的局限性
**大语言模型(LLM)是强大的工具,但在处理特定领域问题或访问专业、最新的知识时,常常面临局限性。在企业环境中部署类似 ChatGPT 的应用时,要求其输出必须既精确又事实准确。为了应对这些挑战,我们可以采用监督微调(supervised finetuning)和检索增强生成(RAG)等方法,将特定领域的知识注入大语言模型。**在本节中,我们将探讨这些方法的工作原理,以及如何将其应用于向大语言模型注入领域特定知识。
1.3.1 监督微调
起初,我们许多人认为可以通过额外的训练来克服大语言模型的局限性。例如,我们可以通过持续更新模型来解决知识截止日期的问题。然而,为了有效应对这一局限,我们首先需要更深入地理解大语言模型的训练过程。大语言模型的训练可以分为以下四个阶段:
- 1 预训练——模型阅读大量文本,通常超过一万亿个词元(token),以学习基本的语言模式。它通过练习预测句子中下一个词来掌握语言规律。这一步是基础,就像在能够写作之前先学习词汇和语法。这是资源消耗最密集的阶段,可能需要数千个 GPU,并持续训练数月。
- 2 监督微调——向模型提供高质量对话的具体示例,以提升其作为有用助手的回应能力。模型继续练习语言,但此时更专注于生成有用且准确的回应。这类似于从基础语言学习过渡到对话技能的实践。与预训练相比,这一阶段所需的资源显著减少,如今甚至可以在单台笔记本电脑上完成小型大语言模型的微调。
- 3 奖励建模——模型通过比较同一问题的不同回答,学习区分优质与劣质回应。这就像有一位教练向模型展示什么是高质量的表现,使其能够朝着该标准努力。
- 4 强化学习——模型通过与用户或模拟环境的互动,根据反馈进一步优化其回应。这类似于学习一项运动:不仅通过训练,还通过实际比赛并从经验中学习来提升技能。
由于预训练阶段成本高昂且耗时,因此不适合用于持续更新。于是,人们想到利用监督微调阶段来克服大语言模型的局限性。在监督微调阶段,你向语言模型提供具体的输入提示及其对应的期望输出,以引导模型生成你希望的结果。一些研究显示,监督微调可以提升大语言模型在事实性方面的表现(Tian 等,2023)。然而,其他采用不同方法的研究也表明,大语言模型在通过微调学习新事实信息方面仍存在困难(Ovadia 等,2023)。
**尽管监督微调可以增强模型的整体知识水平,但它仍然是一个复杂且不断发展的研究领域。**因此,在当前技术发展阶段,将一个可靠、经过微调的语言模型部署到生产环境中仍面临重大挑战。幸运的是,目前存在一种更高效且更简单的方法来应对大语言模型的知识局限性。
1.3.2 检索增强生成
提高大语言模型(LLM)准确性并克服其局限性的第二种策略是检索增强生成(RAG)工作流,该方法将大语言模型与外部知识库相结合,以提供准确且最新的响应。该方法不依赖大语言模型的内部知识,而是将相关的事实或信息直接提供在输入提示中(Lewis 等,2020)。这一概念(RAG)利用了大语言模型在理解和生成自然语言方面的优势,同时在提示中提供事实信息,从而减少对模型内部知识库的依赖,进而降低“幻觉”现象的发生。
RAG 工作流主要分为两个阶段:
- 检索
- 增强生成
在检索阶段,从外部知识库或数据库中查找相关信息。在增强生成阶段,将检索到的信息与用户的输入相结合,以增强提供给大语言模型的上下文,使其能够基于可靠、外部的事实生成回应。
如前所述,大语言模型(LLM)在理解自然语言和遵循提示中的指令方面表现出色。在检索增强生成(RAG)工作流中,目标转变为面向任务的响应生成,即大语言模型遵循一组特定的指令。该过程包括使用检索工具从特定知识库中获取相关文档,随后大语言模型基于所提供的文档生成答案,确保回应准确、上下文相关,并符合特定的指导原则。这种系统化的方法将答案生成过程转化为一项有针对性的任务,即检查并利用检索到的信息来生成最终答案。图 1.11 展示了在输入提示中提供事实信息的一个示例。
你可能会疑惑,如果用户必须同时提供上下文和问题,那么RAG过程的优势何在。实际上,检索系统是独立于用户运行的。用户只需提出问题,而检索过程则在后台自动进行。
在检索增强生成(RAG)过程中,用户首先提出一个问题。在后台,系统将该问题转化为搜索查询,并从公司文档、知识文章或数据库等来源检索相关信息。先进的检索算法找出最相关的内容,然后将其与原始问题结合,形成一个增强的提示(prompt)。该提示被发送给大语言模型,模型基于问题和检索到的上下文生成回应。整个检索过程是自动完成的,用户只需提供原始问题,无需额外输入。这使得 RAG 既无缝又高效,在提升事实准确性的同时,显著降低了生成虚构内容(幻觉)的可能性。
由于其简单性和高效性,RAG 方法已获得主流认可。
1.4 知识图谱作为 RAG 应用的数据存储
**在规划实现一个 RAG 应用时,选择合适的数据存储方案至关重要。**尽管存在多种数据库选项,但我们认为,知识图谱和图数据库特别适合大多数 RAG 应用。知识图谱是一种数据结构,它使用节点来表示概念和实体,并通过关系来连接这些节点。知识图谱能够在单一数据库系统中存储复杂的结构化与非结构化数据。这种双重能力使其特别适用于复杂的检索增强生成(RAG)应用。结构化数据支持精确且高效的查询,可用于回答诸如“某位特定员工被分配了多少项任务?”或“哪些员工向某位特定经理汇报?”等问题。这种能力对于从复杂且相互关联的数据中生成可操作的洞察至关重要。
另一方面,非结构化数据(如文章文本)通过提供丰富的上下文信息,为结构化数据提供了补充,增加了回答的深度和细致度。例如非结构化文章节点提供了关于一种新的大语言模型(LLM)和嵌入(embeddings)的详细信息。然而,若缺乏结构化框架,它无法回答具体问题。
**重要的是,仅靠非结构化数据无法回答所有类型的问题。虽然它可以为开放式或模糊性查询提供见解,但缺乏执行精确操作(如过滤、计数或聚合)所需的结构。**例如,要回答“公司内有多少项任务已完成?”或“哪些员工被分配了与 OpenAI 相关的任务?”,就需要如图 1.14 右侧所示的结构化关系和属性。如果没有结构化数据,这类查询将依赖于耗时且容易出错的全文解析和推理。通过在同一框架内整合结构化与非结构化信息,知识图谱实现了两种数据类型的无缝融合,使其成为在 RAG 应用中高效、准确地回答广泛问题的有力工具。此外,非结构化数据与结构化数据之间的显式连接,解锁了高级检索策略,例如将文本中的实体链接到图谱节点,或用原文片段对结构化结果进行上下文化,而这些功能若仅使用单一类型的数据则难以甚至无法实现。
总结
- 大语言模型(LLM),例如 ChatGPT,基于 Transformer 架构构建,使其能够通过从海量文本数据中学习语言模式,高效地处理和生成文本。
- 尽管大语言模型在自然语言理解和生成方面表现出卓越能力,但其存在固有的局限性,例如知识截止问题、可能生成过时或虚构(幻觉)信息,以及无法访问私有或特定领域的知识。
- 为了增强模型内部知识而持续对大语言模型进行微调,在实践中并不可行,原因在于资源消耗巨大,且定期更新模型十分复杂。
- 检索增强生成(RAG)通过将大语言模型与外部知识库相结合,解决了上述局限性。该方法将相关事实直接注入输入提示中,从而生成准确且富含上下文的回应。
- 传统的 RAG 实现主要集中于非结构化数据源,这限制了其在需要结构化、精确且相互关联信息的任务中的应用范围和有效性。
- 知识图谱使用节点和关系来表示并连接实体与概念,能够整合结构化与非结构化数据,提供全面统一的数据表示。
- 将知识图谱集成到 RAG 工作流中,可增强系统检索和组织上下文相关数据的能力,使大语言模型能够生成更准确、可靠且可解释的回应。