【RAG 论文】Selfmem:使用 LLM 自己的输出来作为下一轮的 context 从而提升自己的生成效果

论文:Lift Yourself Up: Retrieval-augmented Text Generation with Self Memory
⭐⭐⭐⭐
NeurIPS 2023,北大

文章目录

    • 一、论文速读
    • 二、实现细节
      • 2.1 检索增强的 Generator
      • 2.2 Memory Selector
      • 2.3 Generator 的两种 mode
    • 总结

一、论文速读

在以为 RAG 中,LLM 使用 user query 和检索到的文档(本文中称之为 memory)作为输入来生成回复。然后,这样检索到的 memory 是来自于一个固定的 corpus 并受限于 corpus 的质量,这样有界的 memory 明显限制了 memory-augmented generation model 的效果,因此本文提出:better generation also prompts better memory,意思也就是说,LLM 所生成的好的 generation 也可以作为一种好的 memory,从而将有界的 memory 推广到了无界中。

因此在这篇论文扩展了 LLM 输入的上下文,提出 LLM Generator 的输入应该是 user query + memory,其中 memory 既包含检索到的文档,也包含 LLM 自己的输出。这种将 generation 也作为 memory 的思路,是本文重点强调的创新点

另外,本论文还抽象了 RAG 中各个概念,将 RAG 用了在诸如机器翻译等多个场景中。

本论文提出 Selfmem 框架:

Selfmem 框架

上图以机器翻译的场景为例,训练数据包含 source X X X 和 target Y Y Y。Selfmem 框架包含两个部分:

  1. 检索增强的 Generator:它拿到 source X X X,调用 retriever 进行检索,形成 memory M M M。然后把 memory M M M 和 source X X X 输入给 LM 得到生成多个候选回复 candidates
  2. Memory Selector:Selector 接收到前面 LM 生成的多个 candidates,将其与 source X X X 做计算,根据某个评价指标 metric(比如 BLEU)从 candidates 中选出一个 candidate 作为选择结果,然后把这个选择结果输送给 Generator,这样下一次 Generator 部分在形成 memory 时,会把 candidate 选择结果和 retrieval 结果一同用于形成 memory 作为下一轮 LM 的输入。

可以看到,Selfmem 的关键创新就是,改造了 RAG 框架中输入给 LLM 的上下文,这个上下文不仅仅包含了检索到的文档,还包含了 LLM 在上一轮中生成的回复,这个回复是由 Memory Selector 从多个候选回复中根据 metric 选出来的一个。

二、实现细节

2.1 检索增强的 Generator

文中提到,Generator 既可以是 frozen LLM,也可以是 trainable LM。对于一个任务,输入是 x x x,输出是 y y y,在不同的下游任务中,输入和输出的含义不同,比如 summarization 任务中,就是 (document, summary),在对话任务中,就是 (context, response),在机器翻译中,就是 (source, target)。

Generator 的输入包含任务的输入 x x x 和 memory m m m,为了连接 x x x m m m,其架构可以有两种:

  • Joint-Encoder:将 x x x m m m join 成一个 sequence 做 encode: e n c o d e r ( x [ S E P ] m ) encoder(x [SEP] m) encoder(x[SEP]m),然后再解码。
  • Dual-Encoder:使用两个 encoder —— SourceEncoderMemoryEncoder —— 分别对 x x x m m m 进行编码,并将两个编码做 Cross Attention 后再解码。

两种架构都可以统一为 Transformer 的结构封装为一个 block,然后使用 NLL loss 做 optimize。

2.2 Memory Selector

Memory Selector 的目标就是从 LM 生成的多个 candidates 中,按照某个特定的 metric 从中选出一个作为选择的结果,用于送给 Generator 形成下一轮的 memory。

具体来说,内存选择器的目标是从生成器产生的候选池中选择一个最佳候选项作为新的记忆。为了做到这一点,内存选择器需要学习一个评分函数,该函数能够根据某些性能指标(如BLEU、ROUGE等)对候选项进行评分。在训练内存选择器时,KL散度被用来量化内存选择器的预测分布与真实分布之间的差异

  • 真实分布:这是根据性能指标(如 BLEU 分数)得到的候选项的分布,其中每个候选项的概率与其性能指标的分数成比例
  • 预测分布:这是内存选择器对候选项的预测分布。

通过最小化 KL 散度损失,内存选择器学习如何根据性能指标更准确地对候选项进行评分,从而选择更好的记忆用于下一轮的生成过程

2.3 Generator 的两种 mode

Generator 有两种 mode:

  1. hypothesis mode:只生成一个 output,这用于 inference 或者 system evaluation 时。
  2. candidate mode:会生成多个 candiates,这用于训练 memory selector 和 memory selection 的时候。

总结

Selfmem 是一个让生成模型利用自己的输出提升自己来实现检索增强文本生成的通用框架,并将其用在了多个任务场景中。

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

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

相关文章

LLM系列(4):通义千问7B在Swift/DeepSpeed上微调秘诀与实战陷阱避坑指南

LLM系列(4):通义千问7B在Swift/DeepSpeed上微调秘诀与实战陷阱避坑指南 阿里云于 2023年8 月 3 日开源通义千问 70 亿参数模型,包括通用模型 Qwen-7B 以及对话模型 Qwen-7B-Chat,这也是国内首个开源自家大模型的大厂。在诸多权威大模型能力测评基准上,如 MMLU、C-Eval、…

规控不分家,实际岗位职责是如何划分的

1. 实践和演练 2. 自动驾驶技术分类 3. 自动驾驶关键技术 4. 自动驾驶架构 5. 感知perception

前端高频算法

分析算法排序: 时间复杂度: 一个算法执行所耗费的时间。 空间复杂度: 运行完一个程序所需内存的大小。 执行效率、内存消耗、稳定性 三方面入手。 1. 排序 1.1 冒泡排序 冒泡的过程只涉及相邻数据的交换操作,所以它的空间复杂度为 O(1)。 为了保证…

solidworks出现slderrresu.dll错误如何解决?亲测有效

通过近来给客户安装SolidWorks发现,SolidWorks2010、SolidWorks2012、SolidWorks2014、SolidWorks2015、SolidWorks2016、SolidWorks2017都会出现这个slderrresu.dll安装错误问题: 其实这个错误很好解决,主要是因為安裝中文版solidworks沒有選擇安裝中文…

社交媒体数据恢复:Tandem

Tandem数据恢复方法 1. 概述 Tandem 是致力於提供語言學習者和母語者交流的語言交換app,已發行iOS及Android版本。 使用者可以透過文字或者語音對談找到語言交換對象。 該應用程序於2020年4月支援超過160種語言,其中包含12種手語。 2. 操作步骤 2.1.…

linux 光驱(光盘)安装

文章目录 选择光盘自带 YUM 库创建 repo创建文件夹挂载光驱开机自启动挂载安装软件YUM 安装RPM 安装源码包安装 选择光盘 vmware 选择光盘 自带 YUM 库 ls /etc/yum.repos.d创建 repo vim /etc/yum.repo.d/demo.repo // 编写 repo 相关配置 [demo] namedemo baseurlfile://…

预训练模型介绍

一、什么是GPT GPT 是由人工智能研究实验室 OpenAI 在2022年11月30日发布的全新聊天机器人模型, 一款人工智能技术驱动的自然语言处理工具 它能够通过学习和理解人类的语言来进行对话, 还能根据聊天的上下文进行互动,能完成撰写邮件、视频脚本、文案、翻译、代码等任务 二、 为…

【Canvas技法】流星雨的实现

【关键点】 流星的绘制,本质上还是绘制一条直线,但在渲染上有差别。 通常绘制直线都是给的固定颜色,绘制流星给的是渐变色,渐变色的开头是与背景色对比度明显的亮色,结尾是与背景色相同的暗色,中间渐变过…

基于SSM的“一汽租车辆共享平台”的设计与实现(源码+数据库+文档+PPT)

基于SSM的“一汽租车辆共享平台”的设计与实现(源码数据库文档PPT) 开发语言:Java 数据库:MySQL 技术:SSM 工具:IDEA/Ecilpse、Navicat、Maven 系统展示 登录界面 租车界面 订单管理界面 财务报表界面 理赔界面 …

链表(数组实现的伟大二踢脚)

一.链表与数组 链表作为 C 语言中一种基础的数据结构,在平时写程序的时候用的并不多,但在操作系统里面使用的非常多。不管是RTOS还是Linux等使用非常广泛,所以必须要搞懂链表,链表分为单向链表和双向链表,单向链表很少…

c++大湾区模拟题4

一、单项选择题(共 15 题,每题 2 分,共计 30 分;每题有且仅有一个正确选项) 1. 以下哪些不是属于国家顶级域名的是() A..au B..cn C.com D..jp 2. 一棵完全二叉树,共有 1234 个节点,其叶子…

2024年教你怎么将学浪视频保存到本地

你是否曾为无法将学浪视频保存到本地而烦恼?现在,我们将在2024年教给你如何解决这个问题!只需简单几步操作,即可轻松将学浪视频保存到您的本地设备,随时随地想看就看! 我已经将下载学浪的工具打包好了&…

与Apollo共创生态:探索自动驾驶的未来蓝图

目录 引言Apollo开放平台Apollo开放平台企业生态计划Apollo X 企业自动驾驶解决方案:加速企业场景应用落地Apollo开放平台携手伙伴共创生态生态共创会员权益 个人心得与展望技术的多元化应用数据驱动的智能化安全与可靠性的重视 结语 引言 就在2024年4月19日&#x…

解码Starknet Verifier:深入逆向工程之旅

1. 引言 Sandstorm为: 能提交独立proof给StarkWare的Ethereum Verifier,的首个开源的STARK prover。 开源代码见: https://github.com/andrewmilson/sandstorm(Rust) L2Beat 提供了以太坊上Starknet的合约架构图&…

一探究竟轻松畅玩:我独自升级崛起怎么玩 怎么快速上手的教程

一探究竟轻松畅玩:我独自升级崛起怎么玩 怎么快速上手的教程 最近一款漫改的MMORPG游戏《我独自升级:崛起》给玩家们带来了不少惊喜。在刚进入游戏时,玩家们需要从E级猎人开始玩起,逐步成长为S级猎人,通过升级学习新技…

ngrinder项目-本地调试遇到的坑

前提-maven mirrors配置 <mirrors><!--阿里公有仓库--><mirror><id>nexus-aliyun</id><mirrorOf>central</mirrorOf><name>Nexus aliyun</name><url>http://maven.aliyun.com/nexus/content/groups/public</ur…

在龙梦迷你电脑福珑2.0上试了三款操作系统

最近抽时间在龙梦迷你电脑上试了三款操作系统。 这几款操作系统以前都下载过。试用速度会快很多。 试用第一款&#xff1a;统信操作系统龙芯版。能正常安装。安装好了以后&#xff0c;下载了一个软件&#xff1a;龙芯游览器。修改该游览器的界面&#xff0c;不能实现所有页面…

C语言----贪吃蛇(补充)

各位看官好&#xff0c;我想大家应该已经看过鄙人的上一篇博客贪吃蛇了吧。鄙人在上一篇博客中只是着重的写了贪吃蛇的实现代码&#xff0c;但是前期的一些知识还没有具体的介绍&#xff0c;比如确认光标位置&#xff0c;句柄等。那么我这一篇博客就来补充上一篇博客所留下来的…

nacos2.3.x 修改登陆密钥

在使用nacos2.3.x的时候&#xff0c;启动之后&#xff0c;可以不用登陆&#xff0c;直接进入nacos的控制台&#xff0c;但是会提示去开启鉴权&#xff0c;开启的方式如下&#xff1a; 重启nacos之后&#xff0c;再次访问nacos时&#xff0c;就会跳到登陆页面&#xff0c;默认登…

JAVA面试专题-框架篇(Spring+Mybatis)

Spring Spring框架中的单例bean是线程安全的吗&#xff1f; bean上面可以加入注解Scope&#xff0c;如果是singleton&#xff08;默认&#xff09;&#xff0c;意味着bean在每个spring IOC容器中只有一个实例&#xff1b;如果是prototype&#xff0c;说明一个bean定义可以有多…