许多组织正在考虑将大型语言模型用于业务场景,例如作为聊天机器人或虚拟助手回答问题,或生成创意文本。然而,它们通常会遇到一些限制,比如知识更新不及时、错误生成以及无法根据用户需求进行定制等问题。
应对这些挑战的两种方法是微调和检索增强型。微调一个大规模语言模型(LLM)包括一个监督训练阶段,提供问题和答案的配对以优化LLM的性能。相反,在检索增强生成,LLM作为自然语言接口来访问外部信息,这意味着它不仅依赖于其内部知识来生成答案。
本文探讨了使用微调和RAG来减少大型语言模型(LLMs)局限性的利弊。对于已经利用知识图谱来组织和管理数据的组织,这种方法有何影响。
Midjourney提出的知识图聊天机器人.
2022年11月ChatGPT发布没过多久,人们就开始琢磨将大规模语言模型集成到他们的应用中,以创作创意内容并解决诸如文本摘要和翻译等常见的自然语言处理任务。
直接将LLM应用于业务场景可能会引起严重的问题。下面让我们探讨几个最值得关注的问题。
知识截止点是指大型语言模型对其训练结束后的事件一无所知。例如,,如果你询问ChatGPT关于2024年发生的事件,你会得到这样的回答:
ChatGPT的知识截止时间。作者供图。
如果你询问大型语言模型关于其训练数据集中没有的任何事件,也会面临相同的问题。虽然截止日期前的所有公开信息都是相关的,但对于截止日期前的私人或保密信息,大型语言模型同样一无所知。
例如,许多公司有一些不对外公开的内部机密信息,但他们可能有兴趣使用一个定制的LLM来回答关于这些信息的问题。另一方面,公开的信息可能已经在LLM的认知中过时了。
我们不能盲目地相信LLMs产生的所有东西。
大型语言模型被训练产生听起来真实的内容,但这些信息未必总是准确。有些错误信息更难被发现,尤其是当缺少数据时,大型语言模型更可能编造出一个听起来合理但实际上错误的答案,而不是承认自己缺乏这方面的知识。
例如,研究或法院引文可能更容易验证。2023年,一名律师因为盲目信任ChatGPT生成的法院引文而遇到了麻烦。从那以后,人们对像ChatGPT和Gemini这样的公开的大规模语言模型生成的信息变得更加谨慎,但风险依然很大。
大型语言模型(LLM)会持续生成虽然自信但却是虚假的信息,关于任何类型的识别号码,例如Wikidata ID:
ChatGPT的错误。图片由作者提供。
在上面的截图中,ChatGPT坚定地回答,但这是不正确的。ChatGPT给出的Wikidata ID实际上指向的是一位俄罗斯歌手。
大型语言模型还有一些其他的问题:
为了省略细节,我们不会详细探讨这些。相反,我们来探讨你第一个克服这些挑战的选项:有监督的微调方法。
微调是一种针对大型语言模型的精细化训练。它指的是在监督学习过程中,通过提供额外的问题和答案对来优化大型语言模型的表现。通过不断处理这些数据样本,大型语言模型能够提高其理解能力,并提升其在特定领域内回答问题或生成文本的能力。
微调让您在利用大型语言模型现有功能的同时,根据您的具体需求进行调适。若将微调与特定领域的预训练结合,您将得到一个[特定领域的大型语言模型],用于在特定领域,比如金融行业,执行专业操作,从而提高其准确性。
注: 对于大型语言模型(LLM)的微调,两个主要应用场景是更新和扩展其内部知识库,以及为特定任务(如文本摘要或将自然语言转化为数据库查询)进行微调。你也可以准备模型用于创意目的,例如生成个性化艺术作品,并分析用户偏好和行为模式,以便进行内容过滤和推荐。本文将讨论使用微调技术更新和扩展LLM内部知识的第一个应用场景。
注意: 详细讲解LLM的训练过程超出了本文的范围。如果你感兴趣,可以观看Andrej Karpathy的这个视频来了解LLM及其不同阶段的训练过程。
创建一个LLM的第一步是预训练一个模型来建立基础LLM。基础LLM通常使用庞大的文本语料库进行预训练,这些语料库通常包含数十亿甚至数万亿个标记。训练的成本可能高达数十万甚至数百万美元——这是大多数组织想要避免的情况。
最近刚刚,微软发布的一篇论文(2024年6月发表,链接)表明,使用梯度检查点和低秩适应等技术可以在精调过程中缓解内存瓶颈问题。这将使精调更加节省时间和资金,但到目前为止,我们还没有任何实际例子证明成本确实降低了。
监督微调过程。图片由Tomaž Bratanič提供(见图)。图标来自Flaticon。
因此,最常见的第一步是为您的应用场景选择一个预训练的基础LLM。在做出选择时,您需要考虑几个方面。
选好基础LLM后,再对它进行一下微调
首先,准备用于微调基础LLM模型的数据集。
与预训练相比,微调在计算成本方面相对便宜,这得益于像LoRA和QLoRA这样的技术的帮助。然而,构建训练数据集比实际训练过程更为复杂,并且构建成本可能很高。
一些无法承担专职标注团队成本的组织会非常聪明地转向元层面,使用一个大型语言模型(LLM)来构建用于微调其LLM的训练数据集。例如,斯坦福大学的Alpaca训练数据集是通过使用OpenAI的LLM创建的。生成52,000条训练指令的成本约为500美元,这相对便宜。而Vicuna模型则是通过用户在ShareGPT上发布的ChatGPT对话进行微调的,训练这个模型的成本更低,仅为140美元。
H2O 还开发了一个名为 WizardLM 的项目,该项目将文档转换成问答对,用于微调 LLM。
然而,我们尚未见到任何使用知识图谱来准备优质问答对以帮助微调大语言模型并扩展其内部知识的实现。这对那些依赖知识图谱来存储公司特定数据的组织来说是一个令人担忧的问题。从他们的数据存储创建训练数据集可能会对他们构成挑战。微软在Graph RAG提案中提出的一个社区报告摘要步骤可能是一个解决方案,但该想法尚未得到验证。
当前LLM面临的一个关键问题是许多未知因素。例如,是否能对同一个问题给出不同的两个答案,这些答案是否会在LLM的内部知识库中以某种方式被整合?
如果你的组织想要使用知识图谱中的数据来训练大模型,考虑一下知识图谱中的某些信息只有在分析其关系时才会变得有意义。是否需要预先定义相关查询以将这些关系整合进训练数据集,还是有更通用的方法来完成这个任务?或者你可以通过生成节点-关系-节点模式(即主语-谓语-宾语表达式)来生成相关的对?
把这些担忧放在一边,让我们假设你生成了一个基于知识图的训练数据集,包含问答对。结果,LLM 现在更新了知识。然而,模型的微调并没有解决知识截止的问题;它只是将知识截止的时间往后推了。
此外,虽然微调方法可以减少生成不准确信息,但不能完全消除它们。在提供答案时,LLM 无法引用来源。因此,你无法确定答案的来源,无法知道答案是来自预训练数据、微调数据集,还是LLM自己编造的。如果你用LLM创建微调数据集,那么虚假信息的来源也总是可能的。
一个微调过的模型也无法自动根据提问的人的不同提供不同的回答。同样的,没有访问限制,这意味着任何人与该大型语言模型互动都可以访问其所有信息。
考虑到微调的限制,我们建议仅通过微调技术来更新那些变化缓慢的数据,以更新大规模语言模型内部的知识。
例如,你可以使用一个经过微调的模型来提供有关历史旅游景点的信息,只要它不需要任何特定的时间依赖信息。一旦你想在响应中加入实时的或个性化的促销信息,你就会遇到问题。
这些模型对于需要分析公司过去一周新增多少客户的流程而言,不太适合。
微调在您的应用程序需要模型在高度专业化任务或领域中表现优异时最为有用。通过在特定数据集上的训练,您可以自定义模型的响应,使其更好地适应特定领域的细微差别和细节。这一过程使模型的内在理解和生成能力得到了增强,使其更擅长处理专业查询并生成更准确、更具上下文相关性的输出。
使用提取增强型LLM应用的思路是避免仅依靠内部LLM的知识来生成答案。
RAG 使用大语言模型来处理诸如从自然语言构建数据库查询和根据外部提供的信息或通过插件或代理检索信息来构建答案等任务。因此,RAG 让你可以利用大语言模型作为公司或私人信息的自然语言接口,而不是依赖大语言模型自身的知识库。
检索增强生成。图片由 Tomaž Bratanič。图标来自 Flaticon 。
RAG 使用一个智能搜索工具来为你的大语言模型提供合适的问题措辞和从你的数据存储中提取的相关文档。然后,它根据数据源中的信息生成答案。这意味着你无需依赖大语言模型内部知识来生成答案。相反,大语言模型仅用于从你提供的文档中提取并总结相关信息。
引入代理和工具调用支持起到了推动作用,推动了RAG的发展。
代理充当中介,将大语言模型连接到外部知识来源,如数据库和API。因此,大语言模型可以访问大量实时数据,克服了知识限制,使它们能够获取最新信息。代理还可以将事实核查服务和验证工具集成到模型的工作流程中,从而通过降低错误风险来增强模型输出的可信度。
本机工具调用功能更进一步拓展了这一能力。大型语言模型可以直接调用外部工具来完成特定任务,如复杂的计算或数据分析,从而能处理更广泛的问题并扩展其功能。例如,ChatGPT工具用于从网络获取响应和上传文件以辅助写作或分析,可以被视为大型语言模型应用中的RAG方法之一。由于ChatGPT界面可以访问互联网资源,该模型可以通过搜索互联网获取最新信息,并利用这些信息来构建最终答案:
ChatGPT带浏览功能插件。图作者绘。
在这个例子中,ChatGPT 可以回答谁赢得了 2024 年 NBA MVP 的问题。不过,由于 ChatGPT 的知识截止日期是 2022 年 1 月,它无法用内部知识回答 2024 年 NBA MVP 的问题。相反,它通过其 使用 Bing 浏览功能 访问了网上的外部信息,从而能够用最新的信息回答问题。这些功能提供了一个集成的增强机制。
你可以用多种方法在你的系统中应用RAG。
LangChain,一个用于使用LLM开发和部署应用程序的库,提供了将LLM与检索与生成技术集成的工具。您可以使用LangChain让LLM能够实时访问各种来源的信息,比如谷歌搜索、向量数据库或知识图谱。
例如,LangChain 添加了一个 Cypher 搜索链,该链将自然语言问题转换成 Cypher 语句,利用它从图数据库(例如 Neo4j)中检索信息,并根据提供的信息构建最终答案。借助 Cypher 搜索链,LLM 不仅用于构建最终答案,还用于将自然语言问题翻译成 Cypher 查询,就像一个翻译工具一样。
在 LangChain 中的 Cypher 搜索。Tomaž Bratanič 拍摄.
另一个流行的用于增强检索的LLM工作流的库是LlamaIndex,之前叫做GPT Index。LlamaIndex 是一个全面的数据框架,它使LLM能够利用私人或定制的数据,从而提升LLM的性能表现。
LlamaIndex 提供数据连接器,便于从各种数据来源和格式(如 API、PDF、文档、SQL 数据或图数据等)中导入数据,将现有数据整合进大语言模型(LLM)中。它还提供了高效的方法来使用索引和图结构化导入的数据,确保数据适合与 LLM 结合使用。其先进的检索和查询接口允许用户输入一个 LLM 提示,并返回从上下文中检索并增强的知识输出。
LlamaIndex 支持创建和连接到属性图索引以从非结构化数据构建丰富的知识图谱,然后灵活地查询它,以发现信息中的见解和关联。如果您已经在如 Neo4j 之类的图数据库工具中已有知识图谱,您也可以跳过创建知识图谱,并在您的 LlamaIndex 项目中直接使用它。
由于 Neo4j 自带的属性图模型,构建在 Neo4j 图数据库上的知识图谱可以将事务数据、组织数据和向量嵌入结合到一个数据库中,简化整体应用设计。搭配 LlamaIndex 的属性图索引,你可以创建定制解决方案来查询图中的特定信息。
相比微调技术,检索增强的方法在很多方面都更胜一筹(fine-tuning)。
不过,记得RAG的一些限制:
以下是两种方法的关键区别,如下表所示:
微调过程非常适合领域明确且定义清晰,并且能够访问大量标注数据的任务,例如情感分析或针对特定产品的数据库查询生成。它可以利用新数据来更新基础LLM的上下文,并完全消除对外部数据来源的依赖。
然而,RAG更准确(参见这项研究和这项研究以了解更深入的分析),这意味着它更适合处理需要访问最新信息或与现有知识库集成的任务,例如问答系统和客服聊天机器人。
使用图数据库(如Neo4j)的RAG带来了多个优势。访问一个包含相互连接实体的更丰富知识库,可以提供更全面的答案,更好地适应新领域和不断发展的知识,并洞察RAG生成答案时所使用的关联和数据点。它还提供了比细调更胜一筹的解释能力,并且能获取最新的信息,而经过微调的LLM则依赖于静态训练数据。
微调可以用来补充RAG,特别是在需要高度专业化知识的特定领域时。然而,对于大多数应用来说,RAG提供了一种更经济、更高效的选择。它允许你直接使用一个预训练的LLM和知识库,而不需要准备训练数据集或经历监督训练阶段。RAG也不需要像微调那样高水平的技术知识。
实际上,大多数公司并不一定需要为特定技能创建专门的大型语言模型。通过将预训练的大型语言模型与领域特定的数据结合,使用检索增强生成(RAG),公司就可以利用自己的数据来增强其强大的语言模型,这种方法因此变得非常有吸引力。
许多团队正在研究如何有效地将RAG与图数据库结合使用的方法。术语“GraphRAG”正变得流行起来,来自像微软和位于亚特兰大的埃默里大学的团队分享了他们关于如何最好地将图技术与RAG结合以优化RAG系统性能的想法。想了解更多,请参阅Neo4j的GraphRAG宣言,该宣言对此进行了详细的解读和阐述。
我们正在提供一个免费的GraphAcademy课程、讲解如何将Neo4j知识图与生成式AI模型结合使用LangChain。