【LLM 论文】UPRISE:使用 prompt retriever 检索 prompt 来让 LLM 实现 zero-shot 解决 task

本文主要是介绍【LLM 论文】UPRISE:使用 prompt retriever 检索 prompt 来让 LLM 实现 zero-shot 解决 task,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

论文:UPRISE: Universal Prompt Retrieval for Improving Zero-Shot Evaluation
⭐⭐⭐⭐
EMNLP 2023, Microsoft
Code:https://github.com/microsoft/LMOps

一、论文速读

这篇论文提出了 UPRISE,其思路是:训练一个 prompt retriever,面对一个 task 的 input 时,可以通过 prompt retriever 从 prompt pool 中检索到一个最合适的 prompt 作为 in-context learning 中的 exemplars,然后把这些 exemplars + task input 一起输入给 LLM,从而得到 answer。

下图是一个 case:(下半部分是 UPRISE 改进后的)

在这里插入图片描述

二、Prompt Retriever

2.1 Prompt Retriever 是什么

prompt retriever 是这篇论文的关键创新点,它的提出思路是这样的:以往 prompt engineering 方法中,使用 LLM 解决每一个 downstream task 都需要预先设定一个对应的 prompt。但也有可能为某个 task 设定的 prompt 也能够泛化到其他未见过的 task 上,于是,这篇论文的工作首先构建了一个 prompt pool,里面存储了很多用于解决 downstream tasks 的 prompts,然后当一个 test input 到来时,prompt retriever 可以从中检索出最适合这个 task 的 prompt,然后把 retrieved prompt + task input 输入给 LLM 来得到 answer。

论文的关键是训练出能够满足要求的 prompt retriever,并期待它面对没有见过的 task(prompt pool 中也没有这个 task 的 prompt),也可以检索出一个合适的 prompt 并让 LLM 来回复这个 input,这也就是论文提出的 Cross-task retrieval。另外也期待这个 prompt retriever 可以用于多个不同系列的 LLM,这也是论文提出的 Cross-model retrieval

2.2 Prompt Retriever 的训练和 inference

在这里插入图片描述

分别介绍 prompt retriever 的训练和推理思路。

retriever 的训练

这里会使用一个 frozen LLM 用于 prompt retriever 的监督微调。

对于一个 prompt-input 的 pair,会将其视为 positive pair,然后更换其中的 prompt 制作出一些 negative pairs,之后:

  • 把一个 pair 给 retriever,retriever 是一个 bi-encoder 模型,prompt encoder 和 input encoder 分别对 prompt 和 input 进行编码
  • 把一个 pair 和 negative pairs 给 frozen LLM,让其输出一个 task score 来评估 prompt 的有效性

对 positive pair 和 negative pairs 都循环上述过程,并使用对比学习来训练 prompt retriever,损失函数使用的 InfoNCE 这样的对比损失函数。

inference 阶段

预先使用 prompt encoder 对所有 prompt 进行编码,存入 prompt pool 中。

在 inference 时,对于 task input x t e s t x_{test} xtest,对其使用 input encoder 进行编码,然后从 prompt pool 中检索出最相似的 K 个 prompts 并降序排列: P + = ( p 1 , … , p K ) P^+ = (p_1, \dots, p_K) P+=(p1,,pK),然后把这个些 prompts 和 input 连接在一起,形成 p k ⊕ ⋯ ⊕ p 1 ⊕ x t e s t p_k \oplus \dots \oplus p_1 \oplus x_{test} pkp1xtest作为给 LLM 的输入。

同时神奇的是,在多个 downstream tasks 上训练出来的 retriever,能够很不错的应对未见过的任务,并从 prompt pool 选出相对来说比较合适的 prompts 来与 input 组装从而输入给 LLM 获得好的 answer。

三、总结

总的来说,这篇论文提出了一个很新颖的思路:prompt retriever,从而提高 LLM 的 zero-shot 的能力。

同时还研究了 prompt retriever 从训练的任务类型推广到其他未见过的任务类型,以及从小的 LLM 推广到更大规模的

这篇关于【LLM 论文】UPRISE:使用 prompt retriever 检索 prompt 来让 LLM 实现 zero-shot 解决 task的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/959350

相关文章

MySQL中On duplicate key update的实现示例

《MySQL中Onduplicatekeyupdate的实现示例》ONDUPLICATEKEYUPDATE是一种MySQL的语法,它在插入新数据时,如果遇到唯一键冲突,则会执行更新操作,而不是抛... 目录1/ ON DUPLICATE KEY UPDATE的简介2/ ON DUPLICATE KEY UP

Python中Json和其他类型相互转换的实现示例

《Python中Json和其他类型相互转换的实现示例》本文介绍了在Python中使用json模块实现json数据与dict、object之间的高效转换,包括loads(),load(),dumps()... 项目中经常会用到json格式转为object对象、dict字典格式等。在此做个记录,方便后续用到该方

JWT + 拦截器实现无状态登录系统

《JWT+拦截器实现无状态登录系统》JWT(JSONWebToken)提供了一种无状态的解决方案:用户登录后,服务器返回一个Token,后续请求携带该Token即可完成身份验证,无需服务器存储会话... 目录✅ 引言 一、JWT 是什么? 二、技术选型 三、项目结构 四、核心代码实现4.1 添加依赖(pom

SpringBoot路径映射配置的实现步骤

《SpringBoot路径映射配置的实现步骤》本文介绍了如何在SpringBoot项目中配置路径映射,使得除static目录外的资源可被访问,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一... 目录SpringBoot路径映射补:springboot 配置虚拟路径映射 @RequestMapp

RabbitMQ 延时队列插件安装与使用示例详解(基于 Delayed Message Plugin)

《RabbitMQ延时队列插件安装与使用示例详解(基于DelayedMessagePlugin)》本文详解RabbitMQ通过安装rabbitmq_delayed_message_exchan... 目录 一、什么是 RabbitMQ 延时队列? 二、安装前准备✅ RabbitMQ 环境要求 三、安装延时队

Python与MySQL实现数据库实时同步的详细步骤

《Python与MySQL实现数据库实时同步的详细步骤》在日常开发中,数据同步是一项常见的需求,本篇文章将使用Python和MySQL来实现数据库实时同步,我们将围绕数据变更捕获、数据处理和数据写入这... 目录前言摘要概述:数据同步方案1. 基本思路2. mysql Binlog 简介实现步骤与代码示例1

504 Gateway Timeout网关超时的根源及完美解决方法

《504GatewayTimeout网关超时的根源及完美解决方法》在日常开发和运维过程中,504GatewayTimeout错误是常见的网络问题之一,尤其是在使用反向代理(如Nginx)或... 目录引言为什么会出现 504 错误?1. 探索 504 Gateway Timeout 错误的根源 1.1 后端

Redis实现高效内存管理的示例代码

《Redis实现高效内存管理的示例代码》Redis内存管理是其核心功能之一,为了高效地利用内存,Redis采用了多种技术和策略,如优化的数据结构、内存分配策略、内存回收、数据压缩等,下面就来详细的介绍... 目录1. 内存分配策略jemalloc 的使用2. 数据压缩和编码ziplist示例代码3. 优化的

Python ORM神器之SQLAlchemy基本使用完全指南

《PythonORM神器之SQLAlchemy基本使用完全指南》SQLAlchemy是Python主流ORM框架,通过对象化方式简化数据库操作,支持多数据库,提供引擎、会话、模型等核心组件,实现事务... 目录一、什么是SQLAlchemy?二、安装SQLAlchemy三、核心概念1. Engine(引擎)

Java Stream 并行流简介、使用与注意事项小结

《JavaStream并行流简介、使用与注意事项小结》Java8并行流基于StreamAPI,利用多核CPU提升计算密集型任务效率,但需注意线程安全、顺序不确定及线程池管理,可通过自定义线程池与C... 目录1. 并行流简介​特点:​2. 并行流的简单使用​示例:并行流的基本使用​3. 配合自定义线程池​示