RAG论文 Retrieval-Augmented Generation for Knowledge-Intensive NLP Tasks

news2024/11/23 22:31:33

RAG(Retrieval-Augmented Generation,检索增强生成)由Facebook在2020年发表的论文
Retrieval-Augmented Generation for Knowledge-Intensive NLP Tasks

语言模型存在幻觉

  1. 由于知识缺乏,没有实时增量信息
  2. 没有具体领域的拓展信息

RAG架构

RAG架构包含:参数记忆(预训练语言模型作为生成器)与非参数记忆(预训练文档检索器)两部分
非参数记忆部分包含两个子部分:
查询编码器(Query Encoder):其将问题进行向量化
文档索引(Document Index):通过另一个编码器将文档进行向量化,并构建文档向量索引

在这里插入图片描述

问题描述

对于一个查询序列 x x x,使用Maximum Inner Product Search (MIPS) 寻找最接近的 K K K个文本 z i z_i zi。为了得到最终结果 y y y

检索器: p η ( z ∣ x ) p_{\eta}(z|x) pη(zx)返回文本 z z z与查询 x x x的相似性
生成器: p θ ( y i ∣ x , z . y 1 : i − 1 ) p_{\theta}(y_i|x,z.y_{1:i-1}) pθ(yix,z.y1:i1),根据文本 z z z与查询 x x x以及前 i − 1 i-1 i1个token,生成下一个token

端到端的RAG模型旨在同时训练检索器和生成器

端到端模型

RAG-Sequence Model

p RAG-Sequence  ( y ∣ x ) ≈ ∑ z ∈ top ⁡ − k ( p ( ⋅ ∣ x ) ) p η ( z ∣ x ) p θ ( y ∣ x , z ) = ∑ z ∈ top ⁡ − k ( p ( ⋅ ∣ x ) ) p η ( z ∣ x ) ∏ i N p θ ( y i ∣ x , z , y 1 : i − 1 ) p_{\text {RAG-Sequence }}(y \mid x) \approx \sum_{z \in \operatorname{top}-k(p(\cdot \mid x))} p_\eta(z \mid x) p_\theta(y \mid x, z)=\sum_{z \in \operatorname{top}-k(p(\cdot \mid x))} p_\eta(z \mid x) \prod_i^N p_\theta\left(y_i \mid x, z, y_{1: i-1}\right) pRAG-Sequence (yx)ztopk(p(x))pη(zx)pθ(yx,z)=ztopk(p(x))pη(zx)iNpθ(yix,z,y1:i1)
这个模型使用相同的检索文档来预测目标序列中的所有词元 (token)。它在整个生成过程中依赖单个文档,以保持一致性。

RAG-Token Model

p RAG-Token  ( y ∣ x ) ≈ ∏ i N ∑ z ∈  top  − k ( p ( ⋅ ∣ x ) ) p η ( z ∣ x ) p θ ( y i ∣ x , z , y 1 : i − 1 ) p_{\text {RAG-Token }}(y \mid x) \approx \prod_i^N \sum_{z \in \text { top }-k(p(\cdot \mid x))} p_\eta(z \mid x) p_\theta\left(y_i \mid x, z, y_{1: i-1}\right) pRAG-Token (yx)iNz top k(p(x))pη(zx)pθ(yix,z,y1:i1)
在 RAG-Token 模型中,目标序列中的不同词元可以根据不同的文档进行预测。这提供了更大的灵活性,因为每个词元都可以从最相关的上下文中获益。

检索器

使用BERT——BASE模型向量化
d ( z ) = B E R T d ( z ) , q ( x ) = B E R T q ( x ) d(z)=BERT_d(z),q(x)=BERT_q(x) d(z)=BERTd(z),q(x)=BERTq(x)
p η ( z ∣ x ) ∝ exp ⁡ ( d ( z ) ⊤ q ( x ) ) p_\eta(z \mid x) \propto \exp \left(\mathbf{d}(z)^{\top} \mathbf{q}(x)\right) pη(zx)exp(d(z)q(x))

通过最大内积搜索计算相似度

生成器

使用encoder-decoder架构的BART_large,400M

训练

同时训练(微调)检索器和生成器,对于选用哪一篇文本没有任何监督。
样本为输入输出对
目标位最小化负对数似然函数
m i n i m i z e ( ∑ j − log  p ( y j ∣ x j ) ) minimize(\sum_j{-\text{log} \ {p(y_j|x_j)}}) minimize(jlog p(yjxj))
使用随机梯度下降和Adam优化器

为了减低训练负载,冻结文档检索器BERT_d,仅训练BERT_q 和 BART

解码过程

RAG-Token

由于模型是基于token逐次训练,得知每一步的概率。可以通过标准的beam search算法解码输出结果

Beam Search

对于贪心算法全搜索算法的折中
贪心每一步选最大的一个
请添加图片描述
Beam Search每一步选最大的N个
请添加图片描述
算法描述
在这里插入图片描述

RAG-Sequence

不对每个token做beam search,对每个documents beam search。及评估每句话(sequence)被每个documents生成的概率。

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

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

相关文章

【MATLAB第103期】#源码分享 | 基于MATLAB的LIME可解释性线性分类预测模型,2020b以上版本

【MATLAB第103期】#源码分享 | 基于MATLAB的LIME可解释性线性分类预测模型,2020b以上版本 一、模型介绍 LIME(Local Interpretable Model-agnostic Explanations)是一种用于解释复杂机器学习模型预测结果的算法。它由Marco Ribeiro、Sameer…

如何使用极狐GitLab Maven 仓库?

本文作者:徐晓伟 GitLab 是一个全球知名的一体化 DevOps 平台,很多人都通过私有化部署 GitLab 来进行源代码托管。极狐GitLab 是 GitLab 在中国的发行版,专门为中国程序员服务。可以一键式部署极狐GitLab。 本文主要讲述了如何使用极狐GitLa…

xss-lab 1-10关过关记录

前言 最近发现xss学的知识点都忘干净了,来打一打靶子并且记录一下这些过关经历。 level1 特性: 1.get型传参 2.无任何过滤 过关操作: 直接构造payload传参过关 level2 get型传参 我们在输入框中输入payload发现并没有弹窗。 查看网页…

Python接口自动化测试-篇1(postman+requests+pytest+allure)

Python接口自动化测试是一种使用Python编程语言来编写脚本以自动执行针对应用程序接口(APIs)的测试过程。这种测试方法专注于检查系统的不同组件或服务之间的交互,确保它们按照预期规范进行通信,而不涉及用户界面(UI&a…

2024年04月IDE流行度最新排名

点击查看最新IDE流行度最新排名(每月更新) 2024年04月IDE流行度最新排名 顶级IDE排名是通过分析在谷歌上搜索IDE下载页面的频率而创建的 一个IDE被搜索的次数越多,这个IDE就被认为越受欢迎。原始数据来自谷歌Trends 如果您相信集体智慧&am…

书生·浦语训练营二期第二次笔记

1. 部署 InternLM2-Chat-1.8B 模型进行智能对话 1.1 配置环境 创建conda环境,安装必要的库 studio-conda -o internlm-base -t demo # 与 studio-conda 等效的配置方案 # conda create -n demo python3.10 -y # conda activate demo # conda install pytorch2.0.…

自定义 Unity Scene 的界面工具

介绍 文档中会进行SceneView的自定义扩展,实现显示常驻GUI和添加自定义叠加层(Custom Overlay)。 最近项目开发用回了原生的Unity UI相关内容。对于之前常用的FairyGUI来说,原生的UGUI对于UI同学来讲有些不太方便。再加上这次会…

圈子小程序源码-圈子系统成品搭建-APP小程序H5三端源码交付,支持二开!PHP书写,uniAPP后端开发!

【首页】 圈子列表页可分为个人圈子、企业圈子、加入圈子、智诚工业圈子 (平台圈) 四种。 其中重要圈子可选择置顶,方便快速进入:个人圈子和企业圈子数量有限始终位于前位。也可通过搜索快速搜索圈子。 为了实现流量分散入口的集中,将创建企业圈子、发…

服务器设置了端口映射之后外网还是访问不了服务器

目录 排查思路参考: 1、确认服务是否在运行 2、确认端口映射设置是否正确 3、使用防火墙测试到服务器的连通性 4、检查服务内部的配置 5、解决办法 6、学习小分享 我们在一个完整的网络数据存储服务系统设备中都会存有业务服务器、防火墙、交换机、路由器&a…

缓存(反向代理)服务器-varnish

varnish简介: varnish是一款高性能且开源的反向代理服务器和HTTP加速器,(其实就是带缓存的反向代理服务器)它可以把整个HTTP响应内容缓存到内存或文件中,从而提高web服务器器的响应速度。 与传统的squid相比&#xff0…

electron 打不同环境的包

我用的打包工具: electron-builder 1、在package.json 文件的同级下创建2个js文件 electron-builder-test.config.js electron-builder.config.js electron-builder-test.config.js const basejson require(./electron-builder.config.js); module.exports {extraMetada…

【opencv】教程代码 —features2D(6)透视矫正:读取两个棋盘格图片并进行图像对齐...

perspective_correction.cpp 透视校正 hconcat(img2, img1_warp, img_draw_warp); hconcat(img1, img2, img_draw_matches); #include <iostream> // 引入iostream库&#xff0c;用于进行标准输入和输出操作 #include <opencv2/core.hpp> // 引入opencv的core库&am…

session学习

3次请求均有sessionID session的作用 跟踪用户的行为&#xff0c;方便日后推荐客户端和服务器交互相对安全些session是代表会话&#xff0c;也可理解为客户端和服务端的交互sessionID是服务器生成的唯一字符串&#xff0c;用来跟踪用户行为cookie是浏览器自带的&#xff0c;专…

4.1作业

对菱形继承给出的代码中每一个类&#xff0c;写一个有参构造函数写出下列类的&#xff0c;构造函数(有参、无参)&#xff0c;析构函数&#xff0c;拷贝构造函数和拷贝赋值函数 class Father { int *p; const string name; } class Son:public Father { int *age; 3整理思维导图…

【JavaWeb】Day30.SpringBootWeb请求响应——响应

响应 HTTL协议的交互方式&#xff1a;请求响应模式&#xff08;有请求就有响应&#xff09;那么Controller程序&#xff0c;除了接收请求外&#xff0c;还可以进行响应。 1.ResponseBody 在我们前面所编写的controller方法中&#xff0c;都已经设置了响应数据。 controller方…

前端订阅推送WebSocket定时任务

0.需求 后端定时向前端看板推送数据&#xff0c;每10秒或者30秒推送一次。 1.前言知识 HTTP协议是一个应用层协议&#xff0c;它的特点是无状态、无连接和单向的。在HTTP协议中&#xff0c;客户端发起请求&#xff0c;服务器则对请求进行响应。这种请求-响应的模式意味着服务器…

路径规划——搜索算法详解(六):LPA*算法详解与Matlab代码

上文讲解了D*算法&#xff0c;D*算法为在动态环境下进行路径规划的场景提出了可行的解决方案&#xff0c;本文将继续介绍另外一种动态规划路径的方法——Lifelong Planning A*&#xff08;LPA*&#xff09;算法。 该算法可以看作是A*的增量版本&#xff0c;是一种在固定起始点…

语音克隆技术浪潮:探索OpenAI Voice Engine的奇妙之旅

每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗&#xff1f;订阅我们的简报&#xff0c;深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同&#xff0c;从行业内部的深度分析和实用指南中受益。不要错过这个机会&#xff0c;成为AI领…

Bridge Champ与Ignis公链:探索Web3游戏的新未来

在数字化和去中心化的浪潮中&#xff0c;Web3游戏与公链的融合为游戏行业带来了新的变革。特别是&#xff0c;Bridge Champ和Ignis公链的结合&#xff0c;展示了一种全新的游戏生态模式&#xff0c;不仅为玩家提供了更加公平、透明的游戏体验&#xff0c;同时也为游戏开发和运营…

Higress 基于自定义插件访问 Redis

作者&#xff1a;钰诚 简介 基于 wasm 机制&#xff0c;Higress 提供了优秀的可扩展性&#xff0c;用户可以基于 Go/C/Rust 编写 wasm 插件&#xff0c;自定义请求处理逻辑&#xff0c;满足用户的个性化需求&#xff0c;目前插件已经支持 redis 调用&#xff0c;使得用户能够…