当前位置:   article > 正文

Elasticsearch:检索增强生成 (RAG)_python langchain 与 elasticsearch

python langchain 与 elasticsearch

作者:来自 Elastic Joe McElroy

生成式人工智能最近取得了巨大的成功,并引起了轰动,其模型可以生成流畅的文本、逼真的图像甚至视频。就语言而言,经过大量数据训练的大型语言模型能够理解上下文并生成与问题相关的答案。这篇博文探讨了与生成式人工智能相关的挑战、检索增强生成 (retrieval augmented generation - RAG) 如何帮助克服这些挑战、RAG 的工作原理以及使用 RAG 的优势和挑战。

生成式人工智能的挑战

然而,重要的是要明白这些模型并不完美。这些模型所拥有的知识是它们在训练过程中学习到的参数知识,是整个训练数据集的浓缩表示。

缺乏领域知识

这些模型应该能够对训练数据中出现的一般知识问题做出良好的回答。但它们无法可靠地回答训练数据集中没有的事实问题。如果模型对齐良好,它将拒绝回答此类领域外的问题。但是,它可能会简单地编造答案(也称为幻觉)。例如,通用模型通常会大致了解每家公司都有休假政策,但它不会了解我所在公司的休假政策。

参数知识冻结

LLMs 的知识是冻结的,这意味着它对训练后发生的事件一无所知。这意味着它将无法可靠地回答有关当前事件的问题。模型通常经过训练以使其对此类问题给出的答案符合要求。

幻觉 - hallucinations

有人提出,LLMs 的参数类似于一般本体的知识图谱表示:表示有关实体的事实和实体之间的关系。在训练数据中经常出现的常见事实在知识图中得到了很好的表示。然而,在训练数据中不太可能有很多示例的小众知识只能被近似地表示出来。因此,LLMs 对这些事实的理解是嘈杂的。对齐过程至关重要,即根据模型所知道的内容进行校准。错误经常发生在已知信息和未知信息之间的灰色区域,这凸显了区分相关细节的挑战。

在上面的例子中,关于与 Borcherds 同年获得菲尔兹奖的获奖者的问题就是这种小众知识的典型例子。在这种情况下,我们在对话中植入了有关其他数学家的信息,而 ChatGPT 似乎对要关注哪些信息感到困惑。例如,它漏掉了 Tim Gowers,而添加了 Vladimir Voevodsky(2002 年获奖者)。

训练成本高昂

虽然 LLM 在特定领域内的数据上进行训练后能够生成与问题相关的答案,但训练成本高昂,并且需要大量数据和计算来开发。同样,微调模型需要专业知识和时间,并且在此过程中存在 “忘记” 其他重要功能的风险。

RAG 如何帮助解决这个问题?

检索增强生成 (RAG) 通过将生成模型的参数知识与来自数据库等信息检索系统的外部源知识相结合,帮助解决此问题。此源知识作为附加上下文传递给模型,并帮助模型生成更相关的问题答案。

RAG 如何工作?

RAG 管道通常有三个主要组件:

  • 数据 (data):包含相关信息以回答问题的一组数据(例如文档、网页)。
  • 检索(retrieval):可以从数据中检索相关源知识的检索策略。
  • 生成(generation):利用相关源知识,在 LLM 的帮助下生成响应。

RAG 管道流程

当直接与模型交互时,LLM 会收到一个问题,并根据其参数知识生成响应。RAG 为管道添加了一个额外的步骤,使用检索来查找相关数据,从而为 LLM 构建额外的上下文。

在下面的示例中,我们使用密集向量检索策略从数据中检索相关的源知识。然后,将此源知识作为上下文传递给 LLM 以生成响应。

RAG 不必使用密集向量检索,它可以使用任何可以从数据中检索相关源知识的检索策略。它可以是简单的关键字搜索,甚至是 Google 网络搜索。

我们将在以后的文章中介绍其他检索策略

检索源知识

检索相关源知识是有效回答问题的关键。

使用生成式人工智能进行检索的最常见方法是使用密集向量语义搜索。语义搜索是一种需要嵌入模型将自然语言输入转换为表示源知识的密集向量的技术。我们依靠这些密集向量来表示源知识,因为它们能够捕捉文本的语义含义。这很重要,因为它使我们能够将源知识的语义含义与问题进行比较,以确定源知识是否与问题相关。

给定一个问题及其嵌入,我们可以找到最相关的源知识。

使用密集向量的语义搜索并不是唯一的检索选项,但它是当今最流行的方法之一。我们将在以后的文章中介绍其他方法。

RAG 的优势

训练后,LLMs 被冻结。模型的参数知识是固定的,无法更新。但是,当我们将数据和检索添加到 RAG 管道时,我们可以随着底层数据源的变化而更新源知识,而无需重新训练模型。

以源知识为基础

模型的响应也可以限制为仅使用上下文中提供的源知识,这有助于限制幻觉。这种方法还提供了使用较小的、特定于任务的 LLM 而不是大型通用模型的选项。这使得优先使用源知识来回答问题,而不是在训练期间获得的一般知识。

在回复中引用来源

此外,RAG 可以提供用于回答问题的源知识的清晰可追溯性。这对于合规和监管原因很重要,也有助于发现 LLM 幻觉。这被称为源跟踪。

RAG 实际操作

一旦我们检索到相关的源知识,我们就可以用它来生成对问题的回答。为此,我们需要:

构建上下文

包含相关信息以回答问题的源知识集合(例如文档、网页)。这为模型生成响应提供了上下文。

提示模板

用自然语言编写的用于特定任务(回答问题、总结文本)的模板。用作 LLM 的输入。

问题

与任务相关的问题。

一旦我们有了这三个组件,我们就可以使用 LLM 来生成对问题的回答。在下面的示例中,我们将提示模板与用户的问题和检索到的相关段落相结合。提示模板将相关的源知识段落构建到上下文中。

此示例还包括源跟踪,其中在响应中引用了源知识段落。

  1. Given the following extracted parts of a long document and a question, create an answer with references ("SOURCES").
  2. If you don't know the answer, just say that you don't know. Don't try to make up an answer.
  3. ALWAYS return a "SOURCES" part in your answer.
  4. Question: "Which state/country's law governs the interpretation of the contract?"
  5. =========
  6. Content: This Agreement is governed by English law and the parties submit to the exclusive jurisdiction of the English courts in relation to any dispute (contractual or non-contractual) concerning this Agreement save that either party may apply to any court for an injunction or other relief to protect its Intellectual Property Rights.
  7. Reference: 28-pl
  8. Content: No Waiver. Failure or delay in exercising any right or remedy under this Agreement shall not constitute a waiver of such (or any other) right or remedy.\n\n11.7 Severability. The invalidity, illegality or unenforceability of any term (or part of a term) of this Agreement shall not affect the continuation in force of the remainder of the term (if any) and this Agreement.\n\n11.8 No Agency. Except as expressly stated otherwise, nothing in this Agreement shall create an agency, partnership or joint venture of any kind between the parties.\n\n11.9 No Third-Party Beneficiaries.
  9. Reference: 30-pl
  10. Content: (b) if Google believes, in good faith, that the Distributor has violated or caused Google to violate any Anti-Bribery Laws (as defined in Clause 8.5) or that such a violation is reasonably likely to occur,
  11. Reference: 4-pl
  12. =========

RAG 面临的挑战

有效检索是有效回答问题的关键。良好的检索可为上下文提供一组多样化的相关源知识。然而,这更像是一门艺术而非科学,需要进行大量实验才能正确完成,并且高度依赖于用例。

精确的密集向量

大型文档很难表示为单个密集向量,因为它们包含多个语义含义。为了有效检索,我们需要将文档分解为较小的文本块,这些文本块可以准确地表示为单个密集向量。

对于通用文本,一种常见的方法是按段落分块,并将每个段落表示为一个密集向量。根据你的用例,你可能希望使用标题、标题甚至句子作为块来分解文档。

大上下文

使用 LLMs 时,我们需要注意传递给模型的上下文的大小。

LLM 一次可以处理的 token 数量是有限制的。例如,GPT-3.5-turbo 的限制是 4096 个 token。

其次,随着上下文的增加,生成的响应质量可能会下降,从而增加出现幻觉的风险。

更大的上下文也需要更多的时间来处理,而且至关重要的是,它们会增加 LLM 成本。

这又回到了检索的艺术。我们需要在嵌入的分块大小和准确性之间找到适当的平衡。

结论

检索增强生成是一种强大的技术,它可以通过提供相关的源知识作为上下文来帮助提高 LLM 生成的响应的质量。但 RAG 并不是灵丹妙药。它需要大量的实验和调整才能正确使用,而且它也高度依赖于你的用例。

在下一篇文章中,我们将介绍如何使用 LangChain(一种用于处理 LLM 的流行框架)构建 RAG 管道。

准备好自己尝试一下了吗?开始免费试用

Elasticsearch 集成了 LangChain、Cohere 等工具。加入我们的 Beyond RAG Basics 网络研讨会,构建你的下一个 GenAI 应用程序!

原文:Retrieval Augmented Generation: Refine LLM Responses with RAG — Search Labs

声明:本文内容由网友自发贡献,转载请注明出处:【wpsshop博客】
推荐阅读
相关标签
  

闽ICP备14008679号