检索增强生成(RAG)将外部信息检索集成到大型语言模型(LLM)生成响应的过程中。它在预训练知识库之外搜索数据库中的信息,显著提高了生成响应的准确性和相关性。
自 ChatGPT 问世以来,语言模型在互联网上呈爆炸式增长,这是理所当然的。它们可以写论文、编写完整的程序,甚至制作表情包(尽管我们仍在决定这是否是一件好事)。
但尽管这些聊天机器人变得如此出色,在需要外部知识和事实信息的任务中,它们仍然存在局限性。是的,它可以极其详细地描述蜜蜂的摇摆舞。但是,如果它们能够从我们提供的任何数据中生成见解,而不仅仅是其原始训练数据,那么它们的价值将大得多。由于从零开始重新训练这些大型语言模型需要花费数百万美元并耗费数月时间,我们需要更好的方法让现有的 LLM 访问我们的自定义数据。
虽然你可以更具创造性地使用提示词,但这只是一个短期解决方案。LLM 在其响应中只能考虑有限的文本量,这被称为上下文窗口。像 GPT-3 这样的一些模型最多可以看到大约 12 页文本(即 4,096 个上下文 token)。这对于大多数知识库来说还不够。
上图显示了基本 RAG 系统的工作原理。在将问题转发给 LLM 之前,我们有一个层会搜索我们的知识库以获取“相关知识”来回答用户查询。具体来说,在本例中,是上个月的支出数据。我们的 LLM 现在可以生成关于我们预算的相关且无幻觉的响应。
随着你的数据增长,你需要高效的方法来识别对你的 LLM 有限内存最相关的信息。这就是你需要一种恰当的方式来存储和检索查询所需的特定数据,而无需 LLM 记住它。
向量数据库将信息存储为向量嵌入。这种格式支持高效的相似性搜索,以检索与您的查询相关的数据。例如,Qdrant 专为快速执行而设计,即使在处理数十亿个向量的场景中也是如此。
本文将重点介绍 RAG 系统和架构。如果您有兴趣了解更多关于向量搜索的信息,我们推荐以下文章:什么是向量数据库?和什么是向量嵌入?。
RAG 架构
在其核心,RAG 架构包括检索器和生成器。让我们首先了解每个组件的作用。
检索器
当你向检索器提问时,它使用相似性搜索扫描大量的向量嵌入知识库。然后,它会提取最相关的向量来帮助回答该查询。它可以使用几种不同的技术来判断哪些是相关的
RAG 检索器中的索引工作原理
索引过程以一种易于搜索的方式将数据组织到你的向量数据库中。这使得 RAG 在响应查询时可以访问相关信息。
如上图所示,过程如下
- 首先是一个 加载器,它收集包含你数据的 文档。这些文档可以是任何内容,从文章和书籍到网页和社交媒体帖子。
- 接下来,一个 分割器 将文档分割成更小的块,通常是句子或段落。
- 这是因为 RAG 模型处理较小的文本片段效果更好。在图中,这些是 文档片段。
- 然后将每个文本块输入到 嵌入器 中。这个机器使用复杂的算法将文本转换为向量嵌入。
所有生成的向量嵌入都存储在索引信息的知识库中。这支持在需要时高效检索相似的信息片段。
查询向量化
一旦你的知识库被向量化,你也可以对用户查询做同样的处理。当模型看到新的查询时,它使用相同的预处理和嵌入技术。这确保了查询向量与索引中的文档向量兼容。
相关文档检索
当系统需要找到最相关的文档或段落来回答查询时,它会利用向量相似性技术。向量相似性是机器学习和自然语言处理(NLP)中的一个基本概念,它量化向量(数据点的数学表示)之间的相似程度。
系统可以根据用于表示数据的向量类型采用不同的向量相似性策略
稀疏向量表示
稀疏向量的特点是维度很高,其中大部分元素为零。
经典方法是关键词搜索,它扫描文档以查找查询中的确切单词或短语。该搜索通过计算单词出现次数并对常用词进行逆向加权来创建文档的稀疏向量表示。包含较不常见词的查询会优先处理。
TF-IDF(词频-逆文档频率)和BM25是两个经典的相似算法。它们简单且计算高效。然而,它们难以处理同义词,并且并非总能捕获语义相似性。
如果您有兴趣深入了解,请参阅我们关于稀疏向量的文章。
密集向量嵌入
这种方法使用大型语言模型,如BERT,将查询和段落编码成密集向量嵌入。这些模型是紧凑的数值表示,能够捕获语义含义。像 Qdrant 这样的向量数据库存储这些嵌入,允许使用余弦相似度等距离度量进行基于语义相似性而非仅仅关键词的检索。
这使得检索器能够基于语义理解而非仅仅关键词进行匹配。因此,如果我询问“导致体臭的化合物”,即使没有使用这些确切的词语,它也可以检索到关于“产生体味的分子”的相关信息。我们在什么是向量嵌入一文中对此进行了更详细的解释。
混合搜索
然而,关键词搜索和向量搜索并非总是完美的。关键词搜索可能会错过表达方式不同的相关信息,而向量搜索有时难以处理特异性或忽略重要的词汇统计模式。混合方法旨在结合不同技术的优点。
一些常见的混合方法包括
- 使用关键词搜索获得初步的候选文档集合。然后,使用语义向量表示对文档进行重新排序/重新评分。
- 从语义向量开始查找通常主题相关的文档。然后,根据关键词匹配或其他元数据对文档进行过滤/重新排序。
- 在组合评分模型中同时考虑语义向量接近度和词汇统计模式/权重。
- 拥有包含不同技术的多个阶段。一个例子:首先进行初始关键词检索,接着是语义重新排序,然后是使用更复杂模型进行的最终重新排序。
当你以互补的方式结合不同搜索方法的优势时,你可以提供更高质量、更全面的结果。如果你想了解更多,请查看我们关于混合搜索的文章。
生成器
检索到最相关的段落后,生成器的任务是通过综合并以自然语言表达这些信息来生成最终答案。
LLM 通常是像 GPT、BART 或 T5 这样的模型,它们在海量数据集上进行训练,以理解和生成类人文本。它现在不仅将查询(或问题)作为输入,还接收检索器识别出的可能包含答案的相关文档或段落,以生成响应。
检索器和生成器并非独立运行。下图展示了检索结果如何馈送给生成器以生成最终的响应。
RAG 在哪里应用?
由于其更具知识性和上下文感知的响应,RAG 模型如今在许多领域得到应用,特别是那些需要事实准确性和知识深度的地方。
实际应用
问答:这可能是 RAG 模型最突出的用例。它们驱动着高级问答系统,能够从大型知识库中检索相关信息,然后生成流畅的答案。
语言生成:RAG 使得从多个来源进行上下文感知的文本摘要生成更具事实性和上下文相关性
数据到文本生成:通过检索相关的结构化数据,RAG 模型可以从数据库生成产品/商业智能报告,或描述数据可视化和图表中的洞察。
多媒体理解:RAG 不限于文本——它可以检索图像、视频和音频等多模态信息以增强理解。通过检索相关的文本上下文来回答关于图像/视频的问题。
使用 Langchain、Groq 和 OpenAI 创建你的第一个 RAG 聊天机器人
你准备好从零开始创建自己的 RAG 聊天机器人了吗?我们有一个视频从头到尾解释一切。Daniel Romero 将引导你完成以下步骤:
- 设置你的聊天机器人
- 预处理和组织用于聊天机器人使用的数据
- 应用向量相似性搜索算法
- 提高效率和响应质量
构建你的 RAG 聊天机器人后,你将能够评估其性能,并与仅由大型语言模型(LLM)驱动的聊天机器人进行比较。
下一步是什么?
有一个你想实现的 RAG 项目?加入我们的Discord 社区,我们在那里始终分享关于向量搜索和检索的技巧并回答问题。
了解更多关于如何正确评估你的 RAG 响应:评估检索增强生成 - 评估框架。