当前位置: 首页 > news >正文

检索增强生成(RAG)技术:实现流程、作用及应用案例

RAG技术

一. RAG简介

在自然语言处理(NLP)领域中,检索增强生成(Retrieval-Augmented Generation, RAG)技术巧妙地结合了信息检索与神经网络生成模型的力量,通过在生成过程中引入相关的外部信息,实现了在大规模知识库基础上的精准、多样且具有上下文关联性的文本生成。
RAG技术的目的在于提高生成模型的性能,其关键创新在于打破传统生成模型仅仅依赖自身参数预测输出的限制,转而引入检索策略获取外部知识库中的相关信息,再利用这些信息引导模型生成更准确、更具信息量的内容。这一革新极大地提升了模型在问答、对话系统、文本摘要等多种任务上的表现。

二. RAG实现流程

1、检索阶段

在RAG技术中,首先需要通过信息检索技术从外部知识库(通常是对大规模文本数据集进行索引处理后形成的数据库)中检索与输入文本相关的信息。
这通常涉及到构建倒排索引、使用BM25等排名算法对检索结果进行排序等操作。检索到的信息可以是文本片段、关键词或结构化数据等。

  • 构建索引:对知识库中的每一个文档片段或句子进行编码,得到对应的向量表示,并存储在索引中,以便快速检索。
  • 目标查询:给定一个输入文本(如问题),利用编码器将其转换成高维向量表示。
  • 检索过程:使用高效的近似最近邻搜索算法(如Annoy、FAISS等)找出与输入向量最相似的一组文档片段。

2、融合阶段

检索到的信息需要与输入文本进行融合,以便为生成模型提供丰富的上下文。信息融合的方式可以根据具体任务进行调整,以最大限度地发挥检索信息的作用。

  • 信息融合:将检索出的文档片段作为生成模型的输入、上下文或指导信号与原始输入一同输入至融合模块,如跨模态或多头注意力机制,计算每个片段对生成答案的重要程度。
  • 上下文更新:根据各片段的权重综合构建一个包含了外部知识的增强上下文表示。

3、生成阶段

使用预训练的自然语言生成模型(如GPT-2、T5等),根据输入的信息生成相应的输出。

  • 条件生成:将增强后的上下文输入至解码器,进行自回归式的序列生成,产出最终的回答或其他形式的文本。在生成过程中,可以利用检索到的相关信息来指导生成过程,从而提高生成内容的质量和多样性。
  • 后处理:对生成的结果进行后处理,如去除重复、调整句子结构等,以获得更好的生成效果。

下面是一个基于Hugging Face Transformers库实现的RAG模型基本运行示例:

from transformers import RagTokenForGeneration, RagTokenizer# 加载预训练好的RAG模型和分词器
model = RagTokenForGeneration.from_pretrained("facebook/rag-token")
tokenizer = RagTokenizer.from_pretrained("facebook/rag-token")# 示例问题
question = "哈利·波特系列小说的作者是谁?"# 将问题进行编码
inputs = tokenizer(question, return_tensors="pt")# 使用RAG模型生成答案
outputs = model.generate(inputs["input_ids"], num_return_sequences=1)# 解码并打印生成的答案
answer = tokenizer.decode(outputs[0], skip_special_tokens=True)
print(f"答案是:{answer}")

三. RAG技术的作用与价值

RAG技术在文本生成任务中发挥了重要作用,具体体现在以下几个方面:

  • 提升生成质量
    通过引入外部知识库中的信息,RAG技术能够生成更加准确、丰富和具有上下文的文本。这有助于解决传统生成模型中普遍存在的重复、冗余和缺乏创意等问题。

  • 增加多样性
    RAG技术结合了检索和生成两种能力,使得生成的文本具有更高的多样性。检索到的不同信息可以为生成模型提供不同的输入和上下文,从而产生多样化的输出。

  • 减少事实错误(缓解模型幻觉)
    在知识密集型任务中,RAG技术能够通过检索外部知识库中的事实信息,减少生成文本中的事实错误。这有助于提高文本的可信度和准确性。

RAG技术的主要应用体现在那些需要大量背景知识和精确上下文理解的场景,具体包括但不限于:

  • 开放域问答:面对未知领域的复杂问题,RAG模型可以即时检索相关知识并生成高质量答案。
  • 对话系统:在多轮对话中,模型能依据历史对话内容检索相关信息,从而生成连贯且有深度的回应。
  • 文档摘要与生成:借助知识库中的信息,模型能更好地提炼和合成文档的关键信息。

四. 补充说明

除了RAG之外,还有一些同类的混合检索与生成模型值得关注,如REALM(Retrieval-Enhanced Language Model)、KNN-LM(K Nearest Neighbor Language Model)等。它们都试图通过融合外部知识库来扩展模型的知识范围和生成能力,但在检索策略、知识融合机制以及模型架构等方面存在差异。
尽管RAG技术在文本生成任务中取得了显著成果,但仍面临一些挑战。首先,检索过程可能受到知识库质量和覆盖面的限制,导致无法找到与输入文本完全匹配的信息。其次,信息融合的方式和生成模型的性能对最终生成结果的质量具有重要影响,需要仔细设计和调整。

相关文章:

检索增强生成(RAG)技术:实现流程、作用及应用案例

一. RAG简介 在自然语言处理(NLP)领域中,检索增强生成(Retrieval-Augmented Generation, RAG)技术巧妙地结合了信息检索与神经网络生成模型的力量,通过在生成过程中引入相关的外部信息,实现了在…...

Ubuntu安装和使用

Ubuntu 安装和配置 修改下载源 打开软件与更新, 选择其它站点, 选择中国, 选择阿里云源 谷歌中文输入法配置 Ctrl Alt T打开终端, 执行下述命令下fcitx框架 输入密码进行安装 sudo apt-get install -y fcitx-googlepinyinWin呼出菜单, 选择语言支持, 第一次打开会显示语言…...

【Unity】Stream最好用的Selfhost开源轻量服务

【背景】 有好几种场景的投屏或者远控应用希望实现,无论用哪种方式,都绕不开如何构建服务这一关。 【分析】 外网有很多直接付费使用的信令传输类型或是提供流服务的服务器,但我的目标场景是断绝外网的局域网,而且付费也总觉得…...

Web 常见的攻击方式有哪些?

常见的 Web 攻击方式有以下几种: 跨站脚本攻击(XSS 攻击) 跨站请求伪造(XSRF 攻击) SQL 注入 XSS 攻击 MDN 定义如下: 跨站脚本攻击(Cross-site scripting,XSS)是一…...

Rancher(v2.6.3)——Rancher部署Redis(单机版)

Rancher部署Redis详细说明文档]:https://gitee.com/WilliamWangmy/snail-knowledge/blob/master/Rancher/Rancher%E4%BD%BF%E7%94%A8%E6%96%87%E6%A1%A3.md#6rancher%E9%83%A8%E7%BD%B2redis ps:如果觉得作者写的还行,能够满足您的需求&#…...

stm32-模拟数字转化器ADC

接线图: #include "stm32f10x.h" // Device header//1: 开启RCC时钟,包括ADC和GPIO的时钟//2:配置GPIO将GPIO配置为模拟输入模式//3:配置多路开关将左边的通道接入到规则组中//4:配置ADC转…...

[Repo Git] manifests的写法

​manifests​​是个啥 在Repo​中manifests​描述了Repo客户端的结构,也就是可以从manifests​中知道各个模块的代码应该从代码管理仓库当中哪个位置去获取。 ​manifests​的基本结构是一个Git存储库,在顶层目录中持有一个default.xml​文件。 由于m…...

位置编码与长度外推

位置编码 位置编码从前到后包括:绝对位置编码、余弦位置编码、旋转位置编码、ALiBi相对位置编码。 1 绝对位置编码(Absolute Positional Encoding) 应用的模型:BERT、GPT等Transformer基础模型广泛使用绝对位置编码来处理序列数据。 算法思想:绝对位置编码通过为序列中的…...

Linux信号补充——信号发送和保存

三、信号的发送与保存 3.1信号的发送 ​ 必须有操作系统来保存信号,因为他是管理者; ​ 信号给进程的task_struct发送信号,在task_struct中维护了一个整数signal有0-31位,共32个bit位;对于信号的管理使用的是位图结…...

Vue3 中应该使用 Ref 还是 Reactive?

一、引言 在Vue 3中,构建响应式数据结构是构建用户界面和交互体验的核心部分。而在创建这些响应式数据时,我们有两个主要工具:reactive和ref。选择使用哪一个,实际上取决于你的数据结构和访问需求。 reactive主要用于处理复杂的数…...

红外相机和RGB相机标定:实现两种模态数据融合

1. 前期准备 RGB相机:森云智能SG2-IMX390,1个红外相机:艾睿光电IR-Pilot 640X-32G,1个红外标定板:https://item.taobao.com/item.htm?_ujp3fdd12b99&id644506141871&spma1z09.2.0.0.5f822e8dKrxxYI 2.操作步…...

前端项目,个人笔记(五)【图片懒加载 + 路由配置 + 面包屑 + 路由行为修改】

目录 1、图片懒加载 步骤一:自定义全局指令 步骤二:代码中使用 ​编辑步骤三:效果查看 步骤四:代码优化 2、封装组件案例-传对象 3、路由配置——tab标签 4、根据tab标签添加面包屑 4.1、实现 4.2、bug:需要…...

【MySQL】2.MySQL数据库的基本操作

目录 数据库基本操作 查看数据库信息 查看数据库结构 显示数据表的结构(字段) 常用的数据类型 数据库管理操作 SQL语句概述 SQL分类 1.DDL:数据定义语言 1.1创建数据库和表 创建数据库 创建数据表 1.2删除数据库和表 删除数据表…...

常见技术难点及方案

1. 分布式锁 1.1 难点 1.1.1 锁延期 同一时间内不允许多个客户端同时获得锁; 1.1.2 防止死锁 需要确保在任何故障场景下,都不会出现死锁; 1.2.3 可重入 特殊的锁机制,它允许同一个线程多次获取同一个锁而不会被阻塞。 1.2…...

c#关键字 static

static 修饰符可用于声明 static 类。 在类、接口和结构中,可以将 static 修饰符添加到字段、方法、属性、运算符、事件和构造函数。 static 修饰符不能用于索引器或终结器 尽管类的实例包含该类的所有实例字段的单独副本,但每个 static 字段只有一个副…...

redis 如何保证数据同步(数据变化时)

redis 如何保证数据同步(数据变化时) 思路 1.新增、删除和修改都先对数据库进行操作,这时数据库的数据将域缓存中数据不同。 2.数据库进行变动后,返回结果,根据返回的结果判断数据库操作是否成功。 3.如果数据库操…...

Ubuntu18.04桌面版设置静态IP地址

引用: Ubuntu配置静态IP_ubuntu配置静态ip地址-CSDN博客 正文 默认Unbuntu 18.04 Desktop桌面版使用 netplan 管理网卡网络地址。使用Unbuntu 18.04 桌面版配置,可以通过桌面上的设置图标配置网卡的静态IP地址。 点击桌面右上角下拉框,点击“设置”按…...

Aztec的客户端证明

1. 引言 隐私保护 zk-rollup 的证明生成与通用 zk-rollup 的证明生成有很大不同。原因是给定交易中存在特定数据(由私有函数处理),我们希望保持完全私有。在本文中,我们探讨了用于证明私有函数正确执行的客户端证明生成&#xff…...

面试官:小伙子知道synchronized的优化过程吗?我:嘚吧嘚吧嘚,面试官:出去!

写在开头 面试官:小伙子,多线程中锁用过吗? 我:那是自然! 面试官:那你知道synchronized的优化吗? 我:synchronized作为重锁,开销大,在早期不被推荐使用&…...

100天精通风控建模(原理+Python实现)——第23天:风控建模中的贝叶斯优化是什么?怎么实现?

在当今风险多变的环境下,风控建模已经成为金融机构、企业等组织的核心工作之一。在各大银行和公司都实际运用于业务,用于营销和风险控制等。本文以视频的形式阐述风控建模中的召回率是什么,怎么实现。并提供风控建模原理和Python实现文章清单。    之前已经阐述了100天精通…...

SpringBoot-17-MyBatis动态SQL标签之常用标签

文章目录 1 代码1.1 实体User.java1.2 接口UserMapper.java1.3 映射UserMapper.xml1.3.1 标签if1.3.2 标签if和where1.3.3 标签choose和when和otherwise1.4 UserController.java2 常用动态SQL标签2.1 标签set2.1.1 UserMapper.java2.1.2 UserMapper.xml2.1.3 UserController.ja…...

Swift 协议扩展精进之路:解决 CoreData 托管实体子类的类型不匹配问题(下)

概述 在 Swift 开发语言中,各位秃头小码农们可以充分利用语法本身所带来的便利去劈荆斩棘。我们还可以恣意利用泛型、协议关联类型和协议扩展来进一步简化和优化我们复杂的代码需求。 不过,在涉及到多个子类派生于基类进行多态模拟的场景下,…...

基于Flask实现的医疗保险欺诈识别监测模型

基于Flask实现的医疗保险欺诈识别监测模型 项目截图 项目简介 社会医疗保险是国家通过立法形式强制实施,由雇主和个人按一定比例缴纳保险费,建立社会医疗保险基金,支付雇员医疗费用的一种医疗保险制度, 它是促进社会文明和进步的…...

【网络安全产品大调研系列】2. 体验漏洞扫描

前言 2023 年漏洞扫描服务市场规模预计为 3.06(十亿美元)。漏洞扫描服务市场行业预计将从 2024 年的 3.48(十亿美元)增长到 2032 年的 9.54(十亿美元)。预测期内漏洞扫描服务市场 CAGR(增长率&…...

智能在线客服平台:数字化时代企业连接用户的 AI 中枢

随着互联网技术的飞速发展,消费者期望能够随时随地与企业进行交流。在线客服平台作为连接企业与客户的重要桥梁,不仅优化了客户体验,还提升了企业的服务效率和市场竞争力。本文将探讨在线客服平台的重要性、技术进展、实际应用,并…...

ESP32 I2S音频总线学习笔记(四): INMP441采集音频并实时播放

简介 前面两期文章我们介绍了I2S的读取和写入,一个是通过INMP441麦克风模块采集音频,一个是通过PCM5102A模块播放音频,那如果我们将两者结合起来,将麦克风采集到的音频通过PCM5102A播放,是不是就可以做一个扩音器了呢…...

Qt Http Server模块功能及架构

Qt Http Server 是 Qt 6.0 中引入的一个新模块,它提供了一个轻量级的 HTTP 服务器实现,主要用于构建基于 HTTP 的应用程序和服务。 功能介绍: 主要功能 HTTP服务器功能: 支持 HTTP/1.1 协议 简单的请求/响应处理模型 支持 GET…...

新能源汽车智慧充电桩管理方案:新能源充电桩散热问题及消防安全监管方案

随着新能源汽车的快速普及,充电桩作为核心配套设施,其安全性与可靠性备受关注。然而,在高温、高负荷运行环境下,充电桩的散热问题与消防安全隐患日益凸显,成为制约行业发展的关键瓶颈。 如何通过智慧化管理手段优化散…...

Springcloud:Eureka 高可用集群搭建实战(服务注册与发现的底层原理与避坑指南)

引言:为什么 Eureka 依然是存量系统的核心? 尽管 Nacos 等新注册中心崛起,但金融、电力等保守行业仍有大量系统运行在 Eureka 上。理解其高可用设计与自我保护机制,是保障分布式系统稳定的必修课。本文将手把手带你搭建生产级 Eur…...

微服务商城-商品微服务

数据表 CREATE TABLE product (id bigint(20) UNSIGNED NOT NULL AUTO_INCREMENT COMMENT 商品id,cateid smallint(6) UNSIGNED NOT NULL DEFAULT 0 COMMENT 类别Id,name varchar(100) NOT NULL DEFAULT COMMENT 商品名称,subtitle varchar(200) NOT NULL DEFAULT COMMENT 商…...