最新 | Ask Me Anything 一种提示(Prompt)语言模型的简单策略(斯坦福大学 含源码)

本文主要是介绍最新 | Ask Me Anything 一种提示(Prompt)语言模型的简单策略(斯坦福大学 含源码),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

来源: AINLPer微信公众号(每日干货分享!!)
编辑: ShuYini
校稿: ShuYini
时间: 2022-09-30

引言

提示(Prompt)的微小变化就会引起大型语言模型(LLM)较大的性能变化,这将会有大量时间花费在提示(prompt)设计上。为此本文提出了ASK ME ANYTHING(AMA)方法,该方法首先产生多个有效且不完美的prompt,然后将它们进行聚合,最后产生高质量的提示(prompt)。
在这里插入图片描述

关注 AINLPer公众号,最新干货第一时间送达

背景介绍

 大型语言模型(LLM)让我们更接近任务无关机器学习的目标。LLM 不是为新任务训练模型,而是开箱即用地应用于新任务。在上下文学习的范式中,通过自然语言任务规范或提示(prompt)来控制LLM。其中提示(prompt)由模板定义,该模板包含用于描述和表示任务输入和输出的占位符。

 最近的工作评估了LLM在一系列任务中的提示(prompt)性能,实验发现,提示(prompt)的微小变化会导致较大的性能变化。并且提示(prompt)性能还取决于所选LLM系列和模型大小。为了提高可靠性,大量的工作致力于精心设计一个完美的提示(prompt)。例如,就有专家建议用户手动探索大型搜索空间的策略,以便在逐个任务的基础上优化提示(prompt)。

 相反,本文考虑聚合多个有效但不完美的提示(prompt)的预测,以提高在各种的模型和任务上的提示(prompt)性能。 给定一个任务输入,每个提示(prompt)都会对输入的真实标签进行投票,这些投票被聚合以产生最终预测。

遇到的问题

 在追求聚合的高质量提示(prompt)过程中,我们面临以下挑战:

高质量的提示(Effective prompts):高质量的提示是聚合效果提升的首要条件。在两个SuperGLUE任务(CB, RTE)中,我们采用了原始提示,这些提示产生了近乎随机的性能。以相同的格式生成多个提示并在提示之间进行多数投票预测的影响较小(CB为+4%),甚至可能损害平均提示性能(RTE为-2%)。许多改进提示(prompt)的建议关注单一任务类型,并基于单一模型系列和/或大小进行评估。为此,我们需要一个跨任务和模型工作的提示结构

可扩展的集合(Scalable collection) :在确定有效的提示格式之后,我们需要获得这些格式的多个提示----这些提示主要是为输入的真实标签收集投票。任务的原始格式变化很大,之前的工作以特定于任务的方式手动将输入示例重写为新格式,这是具有挑战性的扩展。我们需要一种可伸缩的策略来重新格式化任务输入

提示聚合(Prompt aggregation) :使用上面的提示(对于CB和RTE),我们看到准确性的平均变化为9.5%,并且错误的Jaccard指数比识别提示错误高出69%。之前提示工作中,多数投票(MV)是主要无监督聚合策略,但它没有考虑这两种特性,因此不可靠。我们需要一种策略来解释不同的准确性和依赖性

AMA模型方法介绍

问题解决

 1、识别提示的属性,这些属性可以提升跨任务、模型类型和模型大小的效率。我们研究了先前工作分类的标准提示格式,发现支持开放式回答(“约翰去哪儿了?”)的提示比将模型输出限制为特定tokens 的提示更有效。例如,将[Brown等人,2020]中最初的限制性格式中的三个SuperGLUE任务(CB、RTE、WSC)转换为开放式格式可以提高72%的性能。给定一个任务输入,我们发现根据输入形成问题、提示LLM回答问题的简单结构,可以适用于相当普遍的情况并在不同的基准测试任务中提升性能。

 2、提出了一种可伸缩地将任务输入重新格式化为(1)中发现的有效格式的策略。通过在固定的两步管道中递归地使用LLM本身,将任务输入转换为有效的开放式问答格式。我们首先使用question()提示符,它包含如何将语句转换为各种(例如,yes-no,完形填空)问题的任务无关示例,然后使用answer()提示符演示回答问题的方法(例如,简明或冗长的回答)。应用提示链-答案(问题(x)) ----给出输入 x 2 x^2 x2的最终预测。该链可以在输入之间重复使用,并组合不同的功能提示对来产生多样性。我们将不同的功能提示链应用于输入,为输入的真实标签收集多次投票。

 3、使用弱监督(WS)来可靠地聚合预测。实验发现,由不同链的预测所产生的误差可以是高度变化和相关的。虽然多数投票(MV)可能在某些提示集上表现良好,但在上述情况下表现不佳。AMA通过识别提示之间的依赖关系并使用WS来解释这些情况,WS是在没有任何标记数据的情况下建模和组合噪声预测的过程。这里,本文首次将WS广泛应用于提示,表明它提高了使用现成的LLM并且无需进一步训练。

AMA模型方法

 总结以上问题解决方法,本文提出了 ASK ME ANYTHING PROMPTING (AMA),这是一种简单的方法,它不仅使开源 LLM 的参数减少30倍,而且超过了 GPT3-175B 的Few-Shot性能。

 其中如上图所示:AMA首先递归地使用LLM将任务和提示重新格式化为有效的格式,然后使用弱监督聚合跨提示的预测。重新格式化是使用提示链来执行的,提示链由在不同的任务输入上操作的功能性(固定的、可重用的)提示组成。在这里,给定输入示例,提示链包括一个question()提示符,LLM通过这个提示符将输入声明转换为一个问题,以及一个answer()提示符,LLM通过这个提示符回答它生成的问题。不同的提示链(即不同的上下文问题和答案演示)导致对输入的真实标签的不同预测。

实验结果

1、下表1中比较开源GPT-J-6B和Few-Shot(k∈[32…70])GPT3- 175B的基准测试结果。可以发现,在20个基准测试中,有15个开源6B参数模型超过了GPT3-175B模型的平均Few-Shot性能。在20个任务中,AMA比6B参数模型的少次数(k = 3)性能平均提高了41%。

2、跨模型大小的分析和基准评估。 我们报告了 AMA 对少样本 (k = 3) 性能的绝对提升,平均超过 7 个任务,置信区间为 95%(左)。 按 7 项任务的平均 AMA 提升排序(右)。

3、Sanh等人实验结果T0的性能与prompt-source中10种不同提示格式的多数投票(MV)和弱监督(WS)相比。当使用prompt-source时,MV和WS的平均提升分别为3.6分和6.1分。

推荐阅读

[1] 一文了解EMNLP国际顶会 && 历年EMNLP论文下载 && 含EMNLP2022

[2]【历年NeurIPS论文下载】一文带你看懂NeurIPS国际顶会(内含NeurIPS2022)

[3]【微软研究院 && 含源码】相比黑盒模型,可解释模型同样可以获得理想的性能

[4]【IJCAI2022&&知识图谱】联邦环境下,基于元学习的图谱知识外推(阿里&浙大&含源码)

[5]【NLP论文分享&&语言表示】有望颠覆Transformer的图循环神经网络(GNN)

[6]【NeurIPS && 图谱问答】知识图谱(KG) Mutil-Hop推理的锥形嵌入方法(中科院–含源码)

[7]【NLP论文分享 && QA问答】动态关联GNN建立直接关联,优化multi-hop推理(含源码)

[8]【历年IJCAI论文下载 && 论文速递】无数据对抗蒸馏、垂直联合、预训练微调范式图神经网络(GNN)

[9]【NLP论文分享&&中文命名实体识别】如何构建一个优秀的Gazetteer/地名词典(浙大&含源码)

这篇关于最新 | Ask Me Anything 一种提示(Prompt)语言模型的简单策略(斯坦福大学 含源码)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



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

相关文章

从基础到高级详解Go语言中错误处理的实践指南

《从基础到高级详解Go语言中错误处理的实践指南》Go语言采用了一种独特而明确的错误处理哲学,与其他主流编程语言形成鲜明对比,本文将为大家详细介绍Go语言中错误处理详细方法,希望对大家有所帮助... 目录1 Go 错误处理哲学与核心机制1.1 错误接口设计1.2 错误与异常的区别2 错误创建与检查2.1 基础

前端缓存策略的自解方案全解析

《前端缓存策略的自解方案全解析》缓存从来都是前端的一个痛点,很多前端搞不清楚缓存到底是何物,:本文主要介绍前端缓存的自解方案,文中通过代码介绍的非常详细,需要的朋友可以参考下... 目录一、为什么“清缓存”成了技术圈的梗二、先给缓存“把个脉”:浏览器到底缓存了谁?三、设计思路:把“发版”做成“自愈”四、代码

Go语言中json操作的实现

《Go语言中json操作的实现》本文主要介绍了Go语言中的json操作的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧... 目录 一、jsOChina编程N 与 Go 类型对应关系️ 二、基本操作:编码与解码 三、结构体标签(Struc

Linux五种IO模型的使用解读

《Linux五种IO模型的使用解读》文章系统解析了Linux的五种IO模型(阻塞、非阻塞、IO复用、信号驱动、异步),重点区分同步与异步IO的本质差异,强调同步由用户发起,异步由内核触发,通过对比各模... 目录1.IO模型简介2.五种IO模型2.1 IO模型分析方法2.2 阻塞IO2.3 非阻塞IO2.4

Python实现简单封装网络请求的示例详解

《Python实现简单封装网络请求的示例详解》这篇文章主要为大家详细介绍了Python实现简单封装网络请求的相关知识,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录安装依赖核心功能说明1. 类与方法概览2.NetHelper类初始化参数3.ApiResponse类属性与方法使用实

python语言中的常用容器(集合)示例详解

《python语言中的常用容器(集合)示例详解》Python集合是一种无序且不重复的数据容器,它可以存储任意类型的对象,包括数字、字符串、元组等,下面:本文主要介绍python语言中常用容器(集合... 目录1.核心内置容器1. 列表2. 元组3. 集合4. 冻结集合5. 字典2.collections模块

基于Go语言开发一个 IP 归属地查询接口工具

《基于Go语言开发一个IP归属地查询接口工具》在日常开发中,IP地址归属地查询是一个常见需求,本文将带大家使用Go语言快速开发一个IP归属地查询接口服务,有需要的小伙伴可以了解下... 目录功能目标技术栈项目结构核心代码(main.go)使用方法扩展功能总结在日常开发中,IP 地址归属地查询是一个常见需求:

java 恺撒加密/解密实现原理(附带源码)

《java恺撒加密/解密实现原理(附带源码)》本文介绍Java实现恺撒加密与解密,通过固定位移量对字母进行循环替换,保留大小写及非字母字符,由于其实现简单、易于理解,恺撒加密常被用作学习加密算法的入... 目录Java 恺撒加密/解密实现1. 项目背景与介绍2. 相关知识2.1 恺撒加密算法原理2.2 Ja

Nginx屏蔽服务器名称与版本信息方式(源码级修改)

《Nginx屏蔽服务器名称与版本信息方式(源码级修改)》本文详解如何通过源码修改Nginx1.25.4,移除Server响应头中的服务类型和版本信息,以增强安全性,需重新配置、编译、安装,升级时需重复... 目录一、背景与目的二、适用版本三、操作步骤修改源码文件四、后续操作提示五、注意事项六、总结一、背景与

Android实现图片浏览功能的示例详解(附带源码)

《Android实现图片浏览功能的示例详解(附带源码)》在许多应用中,都需要展示图片并支持用户进行浏览,本文主要为大家介绍了如何通过Android实现图片浏览功能,感兴趣的小伙伴可以跟随小编一起学习一... 目录一、项目背景详细介绍二、项目需求详细介绍三、相关技术详细介绍四、实现思路详细介绍五、完整实现代码