avatar

齐远航

2023-10-20 15:34:54

2899 浏览, 4 min 阅读

什么是检索增强生成(RAG)

检索增强生成(Retrieval Augmented Generation),简称RAG。 在这之前,我们需要先了解什么是大语言模型(LLM),LLM 使用海量数据进行训练,拥有数十亿个参数,能够轻松完成诸如回答问题、翻译语言和完成句子等文字任务。

而 RAG 是一种优化大语言模型(LLM)输出的方法,使其能够在生成响应之前引用训练数据之外的权威知识库,合并成为提示(prompt)模板,让大语言模型(LLM)生成漂亮的回答。 当用户向 LLM 提问一个问题(answer)时,RAG 从各种数据源检索相关的信息,并将检索到的信息和问题(answer)注入到 LLM 提示中,LLM 最后给出答案。

简而言之:检索增强生成(RAG) = 检索技术 + LLM 提示词(prompt)。

为什么我们需要检索增强生成(RAG)

由于大模型设计机制和目前机器的限制,一般的大语言模型只能接受几千-几万个字符的输入。 接下来我们用一个简单的场景来说明大语言模型的限制:

在GPT中,用户输入问题,例如让GPT总结几百字的中心思想,GPT可以很快做出答复,但是用户如果用户输入几十万字,GPT就没法处理了。

目前虽然有些模型能够通过一些微调方法,例如稀疏注意力,滑动窗口等方法支持20万字级别字符的输入,但是这些方法仍然有一些局限性,例如有些模型输入文本越长,输出效果就越差。 而且在现实情况中,用户可能需要在很多个文档中进行查询,这样需要输入的问题长度可能达到几百万几千万字,GPT等LLM(大语言模型)是无力解决这个问题的。

检索增强生成(RAG)技术可以很好地解决这一点,它的方法很简单。接下来就让我们来看看RAG的具体工作流程:

检索增强生成(RAG)技术的具体工作流程

我们先来看,如下图所示:

  • 1、当用户上传文档(PDF、Doc、Markdown 或者 Webpage 网页信息)后,我们先将文档解析成文本,然后将文档切成几百字的小切片。
  • 2、我们会将切片进行进一步处理(例如将文本向量化转成embedding,我们会在后面解释这个概念),并将结果存储在向量数据库里。
  • 3、用户问问题时,我们将用户的问题转换成embedding去查询向量数据库,查到和用户问题最相似的几个文本,然后让LLM参考这些文本进行总结。
RAG工作流程

下面我们用更通俗易懂的原理来解释RAG的工作流程。

假设我们有一个大三学生,他要在没有任何准备的情况下参加一门期末考试。 但是我们给他一个宽松的条件,就是把参考资料给他,允许他随时查阅,这些资料就是用户上传的文档,将文档切片相当于把这些资料分成很多的条目, 存向量数据库相当于按一定方式把这些条目进行分类,当遇到用户的考试题目时,学生就翻阅这些条目,参考查到的信息给出回复。

检索增强生成(RAG)技术还是模型微调(Fine Tune)

我们还有另外一种方法让模型学到文档的信息,这种方法叫微调(Fine Tune)。 微调的原理是通过将文本输入模型,让模型内部的参数发生改变来学习到这些文档的词与词之间的联系。 相比于RAG,微调更能学习到输入文本的语言风格,但是RAG对知识的提取性比较好,而且这两者并不是互斥的。 我们还是以上面大三学生为例,RAG相当于他不做任何准备参加开卷考试, 而微调相当于让他学习一个学期后参加闭卷考试,虽然他经过学习能够理解课程,但是可能会出现有些细节遗忘了而回答不准。 如果同时做了RAG和微调,相当于学习了一个学期,有了一定理解后参加开卷考试。

检索增强生成(RAG)技术与模型微调(Fine Tune)的表现比较

但是微调相比RAG而言,需要花费大量的算力资源和时间进行训练。而RAG的实现的成本较低。RAG的难点在于如何优化。 对此,GPTbots将RAG流程整合进我们的产品,并对RAG流程做了如下优化:

GPTBots如何对RAG流程进行优化

总体来说,我们做了两块优化:文件解析和文档切片。以下是具体的优化点:

  • 用一定的规则对表格类文件进行更好的切分。
  • 采用更好的向量化(embedding)模型来进行匹配。
  • 将向量化(embedding)搜索和关键词搜索结合起来。
  • 比向量化(embedding)搜索和关键词更好的方案。
  • 对提示词(prompt)进行规范化,以取得更好的搜索效果。

RAG具体实践:对表格逐行行切分并分别存储

对于CSV等表格类的文件,我们需要不同的处理方法,因为表格类文件的每一行都代表了信息。 我们的处理方法是将每一行的数据都切分,用户可以自定义标题是哪几行,我们将标题行和每一个数据存进一个切片。

举个例子,假如我们有如下表格数据:

表格数据

我们会一行一行地将它们读成如下切片,分别写了表格,这样用户在问某行某列相关的信息时,我们就能快速定位到对应切片并做出相应回答:

表格数据

体验更多 GPTBots 使用 RAG 技术给您带来的惊喜

如上图所以,使用 RAG 技术,可以极大的改善LLM的回答质量。我们诚挚地邀请您探索 GPTBots 如何应用 RAG 技术,了解它如何改善AI机器人的回答效果。

请访问 GPTBots.ai 了解更多关于 RAG 的信息,并利用其强大功能。 拥抱 AI 的未来,与 GPTBots 一同前行。