AI数据技术02:RAG数据检索

一、说明

        在人工智能的动态环境中,检索增强生成(RAG)已成为游戏规则的改变者,彻底改变了我们生成文本和与文本交互的方式。RAG 使用大型语言模型 (LLM) 等工具将信息检索的强大功能与自然语言生成无缝结合,为内容创建提供了一种变革性的方法。

二、起源和演变

        在他们2020年的关键论文中,Facebook研究人员解决了大型预训练语言模型的局限性。他们引入了RAG,这是一种结合了两种类型的内存的方法:一种类似于模型的先验知识,另一种类似于搜索引擎,使其在访问和使用信息时更加智能。RAG 在需要大量知识的任务(如问答)中优于其他模型,并生成更准确和多样化的文本,给人留下了深刻的印象。这一突破已被研究人员和从业者所接受和扩展,是构建生成式人工智能应用程序的强大工具。

        在这篇文章中,我们将深入研究RAG的世界。阅读后,您将更好地了解 RAG、它的进化历程以及它多样化的实际应用。我们的目标是阐明RAG如何为AI系统提供支持,增强自然语言理解和生成能力,最终使它们能够制作与上下文相关且信息丰富的内容。

        无论您是经验丰富的 AI 专家还是该领域的新手,本指南都将为您提供利用 RAG 功能并保持在 AI 创新前沿所需的知识。

三、RAG 简介

        RAG一直在自然语言处理(NLP)领域掀起波澜。RAG 的核心是一个混合框架,它集成了检索模型和生成模型,以生成不仅上下文准确而且信息丰富的文本。

        RAG在NLP中的重要性怎么强调都不为过。传统的语言模型,尤其是早期的语言模型,可以根据它们所训练的数据生成文本,但往往缺乏在生成过程中获取其他特定信息的能力。RAG有效地填补了这一空白,在检索模型的广泛功能和生成模型(如LLM)的文本生成能力之间架起了一座桥梁。通过这样做,RAG 突破了 NLP 中可能的界限,使其成为问答、总结等任务不可或缺的工具。

3.1 检索和生成模型的协同作用

        虽然我们将在下面深入研究更多技术细节,但值得注意的是 RAG 如何将检索和生成模型结合起来。简而言之,检索模型充当专门的“图书馆员”,从数据库或文档语料库中获取相关信息。然后将这些信息提供给生成模型,该模型充当“编写器”,根据检索到的数据制作连贯且信息丰富的文本。两者协同工作,提供不仅准确而且上下文丰富的答案。为了更深入地了解像LLM这样的生成模型,您可能需要探索有关LLM的本指南。

3.2 关键组件和优势

        RAG 框架有两个主要组件:检索模型和生成模型。这些组件可以根据应用进行不同的配置和微调。它们共同使 RAG 模型成为令人难以置信的灵活和强大的工具。

        至于好处,RAG用途广泛。它用于各种应用程序,如实时新闻摘要、自动化客户服务,甚至用于需要理解和整合来自多个来源的信息的复杂研究任务。此外,它的适应性使其能够被整合到不同类型的系统中,使其成为现代NLP任务中的宝贵资产。

        总之,检索增强生成正在通过利用检索和生成模型的优势来彻底改变NLP。无论您是在学术、工业还是创业领域,了解 RAG 对于任何希望利用 NLP 全部功能的人来说都至关重要。

3.3 RAG 的关键组成部分

        了解 RAG 的内部工作原理需要深入研究其两个基本要素:检索模型和生成模型。这两个组件是RAG获取,合成和生成信息丰富的文本的卓越能力的基石。让我们来解开这些模型中的每一个带来了什么,以及它们在 RAG 框架中带来了哪些协同效应。

3.4 检索模型

        检索模型充当 RAG 架构中的信息守门人。它们的主要功能是搜索大量数据,以查找可用于文本生成的相关信息。把他们想象成专门的图书管理员,当你提出问题时,他们确切地知道哪些“书”应该从“书架”上拉下来。这些模型使用算法对最相关的数据进行排名和选择,提供了一种将外部知识引入文本生成过程的方法。通过这样做,检索模型为更明智、上下文丰富的语言生成奠定了基础,提升了传统语言模型的功能。

        检索模型可以通过多种机制实现。最常见的技术之一是通过使用向量嵌入和向量搜索,但也常用的是采用BM25(最佳匹配25)和TF-IDF(术语频率 - 反向文档频率)等技术的文档索引数据库。

3.5 创成模型

        一旦检索模型获得了适当的信息,生成模型就会发挥作用。这些模型充当创意作家,将检索到的信息合成连贯且上下文相关的文本。生成模型通常基于 LLM 构建,能够创建语法正确、语义有意义并与初始查询或提示一致的文本。它们获取检索模型选择的原始数据,并赋予其叙述结构,使信息易于消化和可操作。在 RAG 框架中,生成模型是拼图的最后一块,提供我们与之交互的文本输出。

3.6 为什么使用抹布?

        在不断发展的NLP领域,对更智能的上下文感知系统的追求正在进行中。这就是RAG的用武之地,解决了传统生成模型的一些局限性。那么,是什么推动了RAG的日益普及呢?

        首先,RAG 提供了一种生成文本的解决方案,该文本不仅流畅,而且事实准确且信息丰富。通过将检索模型与生成模型相结合,RAG 确保它生成的文本既信息丰富又写得很好。检索模型带来了“什么”——事实内容——而生成模型贡献了“如何”——将这些事实组合成连贯和有意义的语言的艺术。

        其次,RAG的双重性质在需要外部知识或上下文理解的任务中提供了固有的优势。例如,在问答系统中,传统的生成模型可能难以提供准确的答案。相比之下,RAG 可以通过其检索组件提取实时信息,使其响应更加准确和详细。

        最后,需要多步骤推理或综合来自各种来源的信息的场景是 RAG 真正闪耀的地方。想想法律研究、科学文献综述,甚至是复杂的客户服务查询。RAG搜索、选择和合成信息的能力使其在处理此类复杂任务方面无与伦比。

        总之,RAG 的混合架构提供了卓越的文本生成功能,使其成为需要深度、上下文和事实准确性的应用程序的理想选择。

四、探索 RAG 与 LLM 的技术实施

        如果 RAG 的概念激起了您的兴趣,深入研究其技术实现将提供宝贵的见解。以LLM为骨干,RAG采用复杂的流程,从数据源到最终输出。让我们剥离这些层来揭示 RAG 的机制,并了解它如何利用 LLM 来执行其强大的检索和生成功能。

4.1 源数据

        任何 RAG 系统的起点都是其源数据,通常由大量的文本文档、网站或数据库组成。此数据充当检索模型扫描以查找相关信息的知识存储库。拥有多样化、准确和高质量的源数据以实现最佳功能至关重要。管理和减少源数据中的冗余也很重要,例如,版本 1 和版本 1.1 之间的软件文档几乎完全相同。

4.2 数据分块

        在检索模型可以搜索数据之前,它通常分为可管理的“块”或段。此分块过程可确保系统可以有效地扫描数据并快速检索相关内容。有效的分块策略可以大大提高模型的速度和准确性:文档可能是它自己的块,但它也可以分成章节/部分、段落、句子,甚至只是“单词块”。请记住:目标是能够为生成模型提供信息,以增强其生成。

4.3 文本到矢量转换(嵌入)

        下一步涉及将文本数据转换为模型可以轻松使用的格式。使用向量数据库时,这意味着通过称为“嵌入”的过程将文本转换为数学向量。这些几乎总是使用使用机器学习技术构建的复杂软件模型生成的。这些向量封装了文本的语义和上下文,使检索模型更容易识别相关数据点。许多嵌入模型可以微调以创建良好的语义匹配;通用嵌入模型(如GPT和LLaMA)在处理科学信息方面可能不如SciBERT等模型。

4.4 源数据和嵌入之间的链接

        源数据和嵌入之间的链接是 RAG 架构的关键。它们之间精心编排的匹配可确保检索模型获取最相关的信息,从而通知生成模型生成有意义且准确的文本。从本质上讲,这种链接促进了检索和生成组件之间的无缝集成,使RAG模型成为一个统一的系统。

        如果您需要一个地方来保存文本文档以在 RAG 解决方案中使用,您需要一个矢量数据库!DataStax Astra DB 上的矢量搜索现已可用。在这里了解更多!

五、RAG的例子和应用

        RAG 具有各种各样的应用程序,跨越需要复杂 NLP 功能的多个领域。其结合检索和生成组件的独特方法不仅使其有别于传统模型,而且还为无数NLP任务提供了全面的解决方案。以下是一些引人注目的示例和应用,展示了RAG的多功能性。

5.1 文本摘要

        如前所述,RAG 的突出应用之一是文本摘要。想象一个人工智能驱动的新闻聚合平台,它不仅可以获取最新新闻,还可以将复杂的文章总结成易于消化的片段。通过利用 RAG,该平台可以生成简洁、连贯且与上下文相关的摘要,从而提供丰富的用户体验。

5.2 问答系统

        RAG在问答系统方面表现出非凡的实力。传统上,当查询需要深入了解多个文档或数据集时,QA 模型可能会动摇。但是,RAG 可以扫描广泛的语料库,以检索最相关的信息并制作详细、准确的答案。这使其成为为客户服务应用程序构建智能聊天机器人不可或缺的工具。

5.3 内容生成

        在内容生成领域,RAG 提供了前所未有的灵活性。无论是自动生成电子邮件、制作社交媒体帖子,还是编写代码,RAG 的检索和生成双重方法都确保输出不仅语法正确,而且具有丰富的上下文和相关性。

5.4 应对 NLP 挑战

        RAG 的架构使其能够出色地应对从情感分析到机器翻译的各种 NLP 挑战。它理解上下文、分析大型数据集和生成有意义的输出的能力使其成为任何依赖语言理解的应用程序的基石技术。

        若要开始使用这些功能构建应用程序,请查看此聊天机器人快速入门指南,其中展示了如何利用 RAG 和其他高级技术。

这些例子只是触及了表面;RAG的应用仅受到我们的想象力和NLP领域继续呈现的挑战的限制。

5.5 RAG 的潜在挑战和局限性

        虽然RAG提供了无数的优势,但它并非没有挑战和限制。最明显的缺点之一是模型复杂性。鉴于 RAG 结合了检索和生成组件,整体架构变得更加复杂,需要更多的计算能力并使调试更加复杂。

        另一个困难是数据准备:提供干净的、非冗余的文本,然后开发和测试一种方法,将文本分成对生成模型有用的部分,这不是一项简单的活动。完成所有这些工作之后,您必须找到一个嵌入模型,该模型在潜在的大量和多样化的信息中表现良好!

        参与LLM通常需要及时的工程设计 - 虽然RAG能够更好地为生成模型提供高质量的检索信息,但这些信息通常需要正确构建LLM以产生高质量的响应。

        最后,还有性能权衡。RAG 的双重性质(检索然后生成文本)会增加实时应用程序的延迟。必须决定如何平衡检索深度和响应速度,尤其是在时间敏感的情况下。

六、RAG 实施的最佳实践

        在涉足RAG领域时,从业者必须驾驭复杂的环境,以确保有效实施。下面,我们概述了一些关键的最佳实践,这些实践可以作为通过RAG优化LLM功能的指南。

6.1 数据准备

        成功实施 RAG 的基石是数据质量。必须投入时间和精力进行数据清理和预处理,以实现最佳的模型性能。这需要文本规范化,这涉及标准化文本格式,以及实体识别和解析,这有助于模型识别和上下文化文本中的关键元素。此外,消除不相关或敏感信息(如个人身份信息 (PII))对于符合隐私标准至关重要。

6.2 定期更新

        RAG 依靠实时或频繁更新的信息蓬勃发展。建立可靠的数据管道,允许定期更新数据源。这些更新的频率可能从每天到每季度不等,具体取决于您的特定用例。强烈建议使用自动化工作流来处理此过程。开源 Langstream 等框架可以将流与嵌入模型相结合,使这项任务更容易。

6.3 输出评估

        衡量模型的性能是一种双管齐下的方法。一方面,手动评估提供了对模型功能的定性见解。这可能涉及一个领域专家小组仔细检查一组模型输出样本。另一方面,BLEU、ROUGE 或 METEOR 等自动评估指标可以提供定量评估。用户反馈(如果适用)是另一个强大的绩效评估工具。

6.4 持续改进

        人工智能的世界在不断发展,持续改进不仅是一种理想,而且是一种必要。这可能意味着从更新训练数据、修改模型参数,甚至根据最新的研究和性能指标调整架构设置。

6.5 端到端集成

        为了获得流畅的操作体验,将 RAG 工作流集成到现有的 MLOps 协议中至关重要。这包括遵循持续集成和持续部署 (CI/CD) 方面的最佳做法、实施可靠的监视系统以及执行定期模型审核。

        通过遵循这些最佳实践,您不仅可以优化 RAG 模型的性能,还可以使其与更广泛的机器学习和数据管理生态系统保持一致。这种整体方法可确保您从 RAG 实现中提取最大的效用。

七、使用 DataStax 拥抱 RAG。

        RAG 是 NLP 中的一项关键创新,它集成了检索模型和生成模型的功能,以生成连贯、上下文丰富的文本。

        RAG将检索模型与生成模型合并,检索模型(如上所述)充当“图书馆员”,扫描大型数据库以查找相关信息,生成模型充当“编写者”,将这些信息合成为与任务更相关的文本。它用途广泛,适用于实时新闻摘要、自动化客户服务和复杂研究任务等不同领域。

        RAG需要检索模型,例如跨嵌入的矢量搜索,结合通常基于LLM构建的生成模型,该模型能够将检索到的信息合成为有用的响应。

        尽管它比单独使用 LLM 更复杂,但 RAG 已被证明可以提高 AI 支持的应用程序的准确性和质量。查看此网络研讨会重播;它部分讨论了像Shopify和Instacart这样的公司如何将RAG纳入其产品中。

        诸如LangChain的Cassandra矢量存储,前面提到的Langstream和DataStax AstraDB之类的解决方案可以减少包含矢量搜索的应用程序的开发和运营负担。

        Astra DB Vector 是唯一用于在实时数据上构建生产级 AI 应用程序的矢量数据库,将 NoSQL 数据库与流功能无缝集成。如果您想开始使用最具可扩展性的矢量数据库,您可以立即注册并在几分钟内开始使用!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/94218.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

智慧工地源代码 SaaS模式云平台

伴随着技术的不断发展,信息化手段、移动技术、智能穿戴及工具在工程施工阶段的应用不断提升,智慧工地概念应运而生,庞大的建设规模催生着智慧工地的探索和研发。 什么是智慧工地? 伴随着技术的不断发展,信息化手段、移…

算法基础学习|排序

快速排序 模板 void quick_sort(int q[], int l, int r) {if (l > r) return;int i l - 1, j r 1, x q[l r >> 1];while (i < j){do i ; while (q[i] < x);do j -- ; while (q[j] > x);if (i < j) swap(q[i], q[j]);}quick_sort(q, l, j)&#xf…

【AI视野·今日CV 计算机视觉论文速览 第259期】Tue, 3 Oct 2023

AI视野今日CS.CV 计算机视觉论文速览 Tue, 3 Oct 2023 (showing first 100 of 167 entries) Totally 100 papers &#x1f449;上期速览✈更多精彩请移步主页 Daily Computer Vision Papers GPT-Driver: Learning to Drive with GPT Authors Jiageng Mao, Yuxi Qian, Hang Zha…

linux系统的启动流程

目录 简述linux的启动流程 git简介 Linux文件 Ubuntu文件汇总 linux文件属性 Linux命令行 更换软件源 简述linux的启动流程 韦东山课程学习路线&#xff1a;APP应用--DEV驱动--项目。 百问网官网 git资料&#xff1a;https://e.coding.net/weiongshan/01_all_series_qu…

【C++11】多线程

多线程创建线程thread提供的成员函数获取线程id的方式线程函数参数的问题线程join场景和detach 互斥量库&#xff08;mutex&#xff09;mutexrecursive_mutexlock_guard 和 unique_lock 原子性操作库&#xff08;atomic&#xff09;条件变量库&#xff08;condition_varuable&a…

【2】c++设计模式——>UML表示类之间的继承关系

继承也叫作泛化&#xff08;Generalization&#xff09;&#xff0c;用于描述父子类之间的关系&#xff0c;父类又称为基类或者超类&#xff0c;子类又称作派生类。在UML中&#xff0c;继承关系用带空心三角形的实线来表示。 关于继承关系一共有两种&#xff1a;普通继承关系和…

操作系统学习笔记1

文章目录 1、OS的一个宏观比喻2、OS的目的和功能3、OS的发展4、OS的运行机制5、OS的特征6、OS的体系结构 参考视频&#xff1a;操作系统 1、OS的一个宏观比喻 2、OS的目的和功能 3、OS的发展 4、OS的运行机制 中断、系统调用、异常。 5、OS的特征 6、OS的体系结构

docker--redis容器部署及地理空间API的使用示例-II

文章目录 Redis 地理位置类型API命令操作示例JAVA使用示例导入依赖RedisTemplate 操作GeoData示例CityInfo实体类Geo操作接口类Geo操作接口实现类SpringBoot测试类RedissonClient 操作GeoData示例docker–redis容器部署及与SpringBoot整合 docker–redis容器部署及地理空间API的…

解决ASP.NET Core的中间件无法读取Response.Body的问题

概要 本文主要介绍如何在ASP.NET Core的中间件中&#xff0c;读取Response.Body的方法&#xff0c;以便于我们实现更多的定制化开发。本文介绍的方法适用于.Net 3.1 和 .Net 6。 代码和实现 现象解释 首先我们尝试在自定义中间件中直接读取Response.Body&#xff0c;代码如…

【算法训练-二分查找 三】【特殊二分】寻找峰值

废话不多说&#xff0c;喊一句号子鼓励自己&#xff1a;程序员永不失业&#xff0c;程序员走向架构&#xff01;本篇Blog的主题是【数组的二分查找】&#xff0c;使用【数组】这个基本的数据结构来实现&#xff0c;这个高频题的站点是&#xff1a;CodeTop&#xff0c;筛选条件为…

计组—— I/O系统

&#x1f4d5;&#xff1a;参考王道课件 目录 一、I/O系统的基本概念 1.什么是“I/O”&#xff1f; ​编辑2.主机如何和I/O设备进行交互&#xff1f; 3.I/O控制方式 &#xff08;1&#xff09;程序查询方式 &#xff08;2&#xff09;程序中断方式 &#xff08;3&#x…

CSS详细基础(一)选择器基础

本帖开始&#xff0c;我们来介绍CSS——即&#xff0c;层叠样式表~ 层叠样式表是一种用来表现HTML&#xff08;标准通用标记语言的一个应用&#xff09;或XML&#xff08;标准通用标记语言的一个子集&#xff09;等文件样式的计算机语言。简单的说&#xff0c;层叠就是对一个元…

Zama的fhEVM:基于全同态加密实现的隐私智能合约

1. 引言 Zama的fhEVM定位为&#xff1a; 基于全同态加密实现的隐私智能合约 解决方案 开源代码见&#xff1a; https://github.com/zama-ai/fhevm&#xff08;TypeScript Solidity&#xff09; Zama的fhEVM协议中主要包含&#xff1a; https://github.com/zama-ai/tfhe-…

2023/10/4 -- ARM

今日任务&#xff1a;QT实现TCP服务器客户端搭建的代码&#xff0c;现象 ser&#xff1a; #include "widget.h" #include "ui_widget.h"Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget) {ui->setupUi(this);server new QTcpSe…

多线程(pthread库)

POSIX线程库 引言 前面我们提到了Linux中并无真正意义上的线程 从OS角度来看&#xff0c;这意味着它并不会提供直接创建线程的系统调用&#xff0c;它最多给我们提供创建轻量级进程LWP的接口 但是从用户的角度来看&#xff0c;用户只认识线程啊&#xff01; 因此&#xff0c;…

十天学完基础数据结构-第二天(数据结构简介)

什么是数据结构&#xff1f; 在计算机科学中&#xff0c;数据结构是一种组织和存储数据的方式。它定义了数据的布局&#xff0c;以及对这些数据执行的操作。你可以把数据结构看作是计算机内存中的特定组织方式&#xff0c;就像图书馆中书籍的排列一样。 数据结构可以是各种形…

C++算法 —— 动态规划(9)完全背包问题

文章目录 1、动规思路简介2、完全背包【模板】3、零钱兑换4、零钱兑换Ⅱ5、完全平方数 背包问题需要读者先明白动态规划是什么&#xff0c;理解动规的思路&#xff0c;并不能给刚接触动规的人学习。所以最好是看了之前的动规博客&#xff0c;以及01背包博客&#xff0c;才能看完…

Vue11 计算属性

先看不用计算属性的两种方法 插值语法 简单的计算&#xff0c;可以使用插值语法 <!DOCTYPE html> <html><head><meta charset"UTF-8" /><title>姓名案例_插值语法实现</title><!-- 引入Vue --><script type"te…

软件测试基础学习

注意&#xff1a; 各位同学们&#xff0c;今年本人求职目前遇到的情况大体是这样了&#xff0c;开发太卷&#xff0c;学历高的话优势非常的大&#xff0c;公司会根据实际情况考虑是否值得培养&#xff08;哪怕技术差一点&#xff09;&#xff1b;学历稍微低一些但是技术熟练的…