论文翻译 | OpenICL: An Open-Source Framework for In-context Learning

摘要

         近年来,上下文学习(In-context Learning,ICL)越来越受到关注,并已成为大型语言模型(Large Language Model,LLM)评估的新范式。与传统微调方法不同,ICL无需更新任何参数,即可将预训练模型适应于未见任务。然而,由于涉及多样的检索和推理方法,以及不同模型、数据集和任务的不同预处理需求,ICL的实现较为复杂。迫切需要一个统一且灵活的ICL框架,以简化上述组件的实施。为了促进ICL研究,我们推出了OpenICL,这是一个用于ICL和LLM评估的开源工具包。OpenICL具有高度灵活的架构,对研究友好,用户可以轻松组合不同的组件以满足其需求。它还提供了各种最先进的检索和推理方法,以简化将ICL应用于尖端研究的过程。OpenICL的有效性已在包括分类、问答、机器翻译和语义解析在内的广泛自然语言处理任务上得到验证。作为一个副产品,我们发现OpenICL是一个高效且稳健的LLM评估工具。OpenICL发布于 https://github.com/Shark-NLP/OpenICL。

1 引言

        大型语言模型(LLMs)(Brown等人,2020年;Zhang等人,2022a年;Scao等人,2022年)的兴起展示了令人印象深刻的涌现性上下文学习(In-Context Learning,ICL)能力(Wei等人,2022a年)。与需要参数更新的微调不同,ICL可以在模型参数冻结的情况下进行推理。ICL规避了微调的资源密集型特性,但在特定任务中仍能产生与微调模型相当的结果(Zhao等人,2021年;Lu等人,2022年;Gao等人,2021a年)。然而,我们注意到缺乏一个统一的ICL框架。现有项目的实现往往高度定制化,满足自己的需求,这使得进一步的发展和与先前方法的比较变得具有挑战性。
        基本的ICL流程包含两个步骤:检索和推理。给定一个测试输入X0,在检索阶段,从训练集中检索出几个示例作为上下文演示。在推理阶段,这些演示被添加在X0之前,并输入到LLM中以生成预测。研究人员已经探索了各种检索(例如,BM25(Robertson和Zaragoza,2009年),TopK(Liu等人,2022年;Gao等人,2021a年)和VoteK(Su等人,2022年))和推理(例如,基于困惑度(Brown等人,2020年),基于通道(Min等人,2022年),以及思维链(Wei等人,2022b年))方法。然而,这些方法通常在不同的框架下实现,并且/或者使用不同的LLMs和任务进行评估。这些不一致性使得对各种方法的系统评估和比较具有挑战性,从而阻碍了更好的ICL方法的发展。
        为了解决这一问题,我们推出了OpenICL,这是一个开源且易于使用的ICL工具包。OpenICL内置了许多最先进的检索和推理方法,以促进系统的比较和快速的研究原型设计。OpenICL还提供了一个统一且灵活的接口,用于开发和评估新的ICL方法。用户可以轻松地将不同的检索和推理方法,以及不同的提示指令,整合到他们的流程中。为了验证OpenICL的实现和设计,我们使用OpenICL在几个自然语言处理任务上评估LLMs,包括分类、问答、翻译和语义解析。我们的贡献总结如下:

  • 我们提出了OpenICL,这是一个易于使用且可扩展的ICL框架,用于语言模型的零/少样本评估。
  • OpenICL提供了广泛的ICL方法、LLMs和任务,只需几行代码即可使用,为未来的更多扩展铺平了道路。
  • 我们提供了完整的教程,引导用户了解该框架,从而促进ICL的研究和发展。

2 相关工作 

        上下文学习 除了经典的“预训练和微调”范式,Brown等人(2020年)提出了上下文学习(In-context learning,ICL),这是一种新范式,利用预训练的语言模型在没有基于梯度训练的情况下执行新任务。它在测试输入之前附加少量的训练示例作为提示,并已被证明能够在少样本场景中提高LLMs的性能,并泛化到广泛的后端任务中,如信息检索(Tay等人,2022年)、事实核查(Rae等人,2021年)、常识推理(Geva等人,2021年)、算术推理(Cobbe等人,2021年)、机器翻译(Agrawal等人,2022年;Lin等人,2021a年)和数据生成(Ye等人,2022年)等。
        除了早期的成功之外,研究人员还开发了一些更复杂的ICL方法,这些方法需要一些中间推理步骤。其中,思维链(Chain-of-thoughts,CoT)是第一个在许多推理任务上显著超越先前最先进方法的尝试(Wei等人,2022b年)。之后,提出了不同变种的CoT以加强其性能,如自我提问(Self-Ask,Press等人,2022年)、iCAP(Wang等人,2022年)、从最少到最多提示(Least-to-Most prompting,Zhou等人,2022年)和选择推理(Selection-Inference,Zhang等人,2022b年;Fu等人,2022年)。
        尽管性能令人惊讶,但ICL因对上下文示例的选择和排序非常敏感而受到批评(Zhao等人,2021年;Lu等人,2022年)。为了解决这个问题,提出了不同的标准和上下文构建方法。Gao等人(2021a年)和Liu等人(2022年)选择在嵌入空间中与测试输入更接近的示例;一系列工作(Su等人,2022年;Levy等人,2022年;Ye等人,2023年)选择训练集中最具代表性的示例,以鼓励上下文示例的多样性;Wu等人(2022年)观察到最小描述长度(Minimum Description Length,MDL)原则可以是选择上下文示例的有效标准。
        提示学习 提示学习(Prompt learning,Liu等人,2021年)是不包含任何上下文示例的ICL的特殊情况。提示学习包括各种主题,包括手动模板工程(Petroni等人,2019年;Brown等人,2020年)、自动模板学习(Wallace等人,2019年;Shin等人,2020年;Li和Liang,2021年)和答案工程(Gao等人,2021b年;Schick和Schütze,2021年)。我们建议读者使用专门为提示学习设计的工具包OpenPrompt(Ding等人,2021年)。相比之下,OpenICL更侧重于整合各种示例检索方法和推理策略以进行上下文学习。请注意,OpenICL也可以通过设置上下文示例数量为零,并使用OpenPrompt为不同任务指定手动或预搜索的提示模板,无缝支持提示学习。

3 OpenICL 

        在本节中,我们首先解释OpenICL的设计原则。然后,我们将简要介绍OpenICL的两个主要组件,即检索器和解释器。 

3.1 设计原则 

        OpenICL的设计原则是促进上下文学习研究,实现高效、鲁棒的大型语言模型评估。具体来说,我们考虑了以下原则:[P1:模块化]由于ICL是一个快速发展的研究领域,OpenICL的设计应该是解耦的,这样不同的组件可以很容易地修改以支持最新的方法和/或组合以适应各种任务和应用程序需求。
        [P2:效率]如今,大型语言模型可以有数千亿个参数。为了支持如此大规模的推理,OpenICL应该进行优化,以实现高效的并行推理。
        [P3:通用性]ICL已经广泛应用于NLP的各个领域,因此OpenICL需要一个灵活的接口,使其能够与各种LLM、任务、检索方法和推理方法一起工作。

3.2 架构简介 

        图1概述了OpenICL的体系结构。对于来自测试集\hat{x}的每个输入\hat{X},检索器检索几个(X;Y)对(在虚线框中表示为一行)来自索引集(X;Y)作为x^的上下文例子。然后根据用户定义的提示模板对这些示例以及\hat{x}进行格式化,并将它们连接起来形成一个文本序列。之后,Inferencer消化这些序列并将其输入LLM以获得模型预测\hat{Y }。 

3.3 模块化 

        为了满足原则P1,OpenICL采用了组件之间松散耦合的设计。这些组件通过非常灵活的接口分离了数据预处理、检索和推理过程,允许轻松定制以适应特定需求。下面详细介绍了两个主要组件:
        检索器(Retriever) 检索器负责从预先存在的训练数据中检索上下文示例。这个模块支持语料库级别(即只为整个测试集检索一组示例)和实例级别(即为每个测试输入单独检索示例)的检索方法。OpenICL主要支持以下无需学习的检索方法:

  •  随机:ICL的早期实践(Brown等人,2020年)通常随机选择示例来构建上下文。尽管随机方法为ICL性能带来了高方差,但在只有少量演示可用时(Wei等人,2022b年;Zhao等人,2021年),它仍然是流行的选择。
  • 启发式方法:为了克服随机的缺点,已经提出了各种基于语义相似性的检索方法,并显示出巨大的潜力,如BM25(Robertson和Zaragoza,2009年)、TopK(Liu等人,2022年;Gao等人,2021a年)和VoteK(Su等人,2022年)。
  • 基于模型的方法:最近,研究人员探索使用模型对输出置信度来选择和排序示例,如熵(Lu等人,2022年)和MDL(Wu等人,2022年)。

        OpenICL实现了上述现有方法,以促进未来的研究和系统比较。此外,检索器模块的灵活性允许实践者选择最适合其任务和数据的检索方法,并进行进一步修改。检索器的接口还允许用户打包这些上下文示例,并在其他地方使用。
        推理器(Inferencer)推理器调用预训练的语言模型,根据上下文示例和测试输入的连接生成预测。推理器支持各种推理方法:

  •  直接:Brown等人(2020年)使用词汇中的令牌来表示候选答案,并选择概率最高的作为最终预测。
  • 困惑度:Brown等人(2020年)计算输入和候选答案序列连接的句子困惑度,并选择困惑度最低的作为最终预测。
  • 通道:Min等人(2022年)提出利用通道模型(Yu等人,2016年;Yee等人,2019年)以相反的方向计算条件概率,即估计给定标签的输入查询的可能性。

        推理器的灵活性也允许用户递归调用它,以支持多阶段的ICL方法,如思维链(Wei等人,2022b年)和选择推理(Creswell等人,2022年)。此外,推理器可以增加一个评分器来评估其预测。

3.4 效率 

        为了满足原则P2,我们为OpenICL配备了各种并行技术,以实现大规模模型的高效推理。
数据并行(Data Parallel)
        数据并行(Li等人,2020年)是并行计算中常用的技术,用于提高大规模计算任务的效率。OpenICL实现了数据并行,以改进检索和推理步骤的性能。在检索和推理期间,数据被划分为更小的批次进行处理。
        此外,对于可以放入GPU的VRAM的模型,OpenICL通过将数据分片到多个GPU上,并在每个GPU上使用完整的模型副本进行并行推理来实现数据并行。这在处理大型数据集时显著提高了推理速度。
        模型并行(Model Parallel)在大型语言模型(LLMs)的时代,模型通常有数十亿甚至数千亿个参数,超出了现代GPU的容量。为了解决这个问题,我们采用了模型并行(Shoeybi等人,2019年):一种将大型深度学习模型划分为更小的子模型进行并行计算的技术,每个子模型都可以在单独的GPU上运行。OpenICL支持模型并行,用户可以轻松地对他们的模型进行并行化,而几乎不需要修改代码。目前,我们支持Megatron(Shoeybi等人,2019年)和Zero(Rajbhandari等人,2019年)。

3.5 一般性 

        为了满足原则P3,OpenICL旨在通过支持广泛的模型、任务和方法来最大化用户的生产力:

        [模型] OpenICL支持仅解码器LMs(例如,GPT系列(Radford和Narasimhan,2018年;Radford等人,2019年;Black等人,2021年;Wang和Komatsuzaki,2021年;Black等人,2022年))和基于编码器-解码器的LMs(例如,T5(Raffel等人,2020年))。我们还提供了两种访问模型的替代方式:用户可以直接加载模型检查点进行评估,或者通过API访问模型(例如,OpenAI的GPT-3系列模型;Brown等人,2020年;Chen等人,2021年;Ouyang等人)。

        [任务]在OpenICL的帮助下,用户可以轻松地在分类和生成任务上进行实验。OpenICL集成了HuggingFace的数据集,使得用户可以轻松访问和下载成千上万的NLP任务。
        [方法] 如前所述,OpenICL为覆盖检索和推理的ICL方法提供了广泛的支持。此外,OpenICL提供了灵活性,可以逐步返回检索器和推理器的结果,这使得将这些中间结果轻松整合到其他项目中变得简单。 

4 Toolkit攻略 

        在本节中,我们通过带领读者了解几个典型的ICL用例来展示OpenICL。
        示例1. 我们首先展示如何使用OpenICL开发一个典型的用于语言分类的ICL流程,只需几行代码,并在流行的情感分类数据集SST-2(Socher等人,2013年)上进行评估。如图2所示,流程从DatasetReader开始,它根据HuggingFace数据集中心的名字或本地文件路径加载数据集。用户需要指定存储输入(“text”)和输出(“label”)的列名。其次,使用一个定义每个类标签提示的字典实例化一个自定义的PromptTemplate。占位符</E>和</Q>将分别被上下文示例和测试输入替换。之后,我们根据TopK(Liu等人,2022年)初始化检索器,并将上下文示例的数量设置为8(“ice_num = 8”)。我们选择基于困惑度的方法来初始化推理器,并使用GPT2-XL作为LLM。设置好这些后,我们可以通过调用推理器(第17行)运行推理,并计算模型预测的准确性(第18行)。


        示例2. 图3展示了如何使用OpenICL处理生成问题。我们考虑了流行的机器翻译数据集WMT16(Bojar等人,2016年)。与示例1类似,我们可以轻松地加载数据集,定义提示模板,并通过分别为函数提供新参数来初始化检索器。与示例1的主要API区别在于:(i)我们为翻译任务添加了一些预处理(第5行);(ii)PPLInferencer被替换为适用于生成的推理器(第16行);(iii)我们使用BLEU来评估模型性能。


        示例3. OpenICL还支持更高级的ICL方法,如图4所示。用户只需修改两行代码即可无缝切换到CoT:第14行定义了CoT的模板,第15行使用OpenAI的API初始化了带有GPT3的推理器。类似的多步骤ICL方法,如自一致性(Wang等人,2022年)和选择推理(Creswell等人,2022年),也可以通过继承OpenICL中设计的超类Inferencer轻松实现。

5 评估

        为了展示OpenICL的灵活性,我们在多样化的数据集、LLMs和ICL方法上进行了实验。我们考虑了用于常识推理的PiQA(Bisk等人,2019年),用于情感分析的SST-2(Socher等人,2013年),用于算术推理的GSM8K(Cobbe等人,2021年),用于机器翻译的WMT16德英(Bojar等人,2016年)以及用于摘要的Gigaword(Napoles等人,2012年)。


        我们还测试了各种LLMs,包括GPTNeo(2.7B)(Black等人,2021年;Gao等人,2020年),GPT-3的text-davinci-003版本(175B),以及XGLM(7.5B)(Lin等人,2021b年)。我们使用OpenAI的官方API4来访问GPT-3。详细的设置和结果如图5所示。我们可以看到,OpenICL的组件可以轻松地串联起来,以支持不同的评估需求并复现最先进方法的结果。

6 结论 

        我们介绍了OpenICL,一个用于上下文学习的开源工具包。OpenICL为上下文学习的实践和研究提供了一个便捷且灵活的接口。我们的模块化设计使其能够轻松支持广泛的LLMs、任务和ICL方法。我们实现了模型并行和数据并行,以使大型模型的推理更加高效。OpenICL具有高度的可扩展性,我们将继续更新它,以跟上最新的研究步伐。尽管结果令人鼓舞,但ICL仍处于早期阶段,许多挑战仍然存在。我们相信OpenICL将成为研究人员和从业者的一项宝贵资源,以促进他们的研究和开发工作。
 

 

 

 

 

 

 

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

如何用好 CloudFlare 的速率限制防御攻击

最近也不知道咋回事儿,群里好多站长都反映被CC 攻击了。有人说依旧是 PCDN 干的,但明月感觉不像,因为有几个站长被 CC 攻击都是各种动态请求(这里的动态请求指的是.php 文件的请求)。经常被攻击的站长们都知道,WordPress /Typecho 这类动态博客系统最怕的就是这种动态请求…

C++模板初阶,只需稍微学习;直接起飞;泛型编程

&#x1f913;泛型编程 假设像以前交换两个函数需要&#xff0c;函数写很多个或者要重载很多个&#xff1b;那么有什么办法实现一个通用的函数呢&#xff1f; void Swap(int& x, int& y) {int tmp x;x y;y tmp; } void Swap(double& x, double& y) {doubl…

【自然语言处理】多头注意力Multi-Head Attention机制

多头注意力&#xff08;Multi-Head Attention&#xff09;机制是Transformer模型中的一个关键组件&#xff0c;广泛用于自然语言处理任务&#xff08;如机器翻译、文本生成等&#xff09;以及图像处理任务。它的核心思想是通过多个不同的注意力头来捕获输入的不同特征&#xff…

MedSAM2调试安装与使用记录

目录 前言一、环境准备多版本cuda切换切换cuda版本二 安装CUDNN2.1 检查cudnn 二、使用步骤1.安装虚拟环境2.测试Gradio3.推理 总结 前言 我们在解读完MedSAM之后&#xff0c;迫不及待想尝尝这个技术带来的福音&#xff0c;因此验证下是否真的那么6。这不&#xff0c;新鲜的使…

使用 KVM 在 Xubuntu 上创建 Windows 10 虚拟机

目录 前言说明注意准备 iso官网思博主(嘻嘻)拖动到虚拟机里面启动 virt-manager创建虚拟机选择本地安装介质选择 iso配置 内存 和 CPU选择 创建的虚拟机 保存的位置启动虚拟机看到熟悉的 Win10界面点击现在安装点击我没有产品密钥选择 Win10 专业工作站版勾选接受许可条款选择自…

《智慧博物馆:科技与文化的完美融合》

《智慧博物馆&#xff1a;科技与文化的完美融合》 一、智慧博物馆的兴起与发展 随着科技的飞速发展&#xff0c;智慧博物馆应运而生。进入新时代&#xff0c;大数据、人工智能、信息化的进步以及智能产品的应用&#xff0c;改变了人们接收信息和学习的习惯。为顺应社会变革&am…

【超详细】UDP协议

UDP传输层协议的一种&#xff0c;UDP(User Datagram Protocol 用户数据报协议)&#xff1a; 传输层协议无连接不可靠传输面向数据报 UDP协议端格式 定长报头&#xff0c;8字节源端口号和目的端口号来定位16位UDP长度, 表示整个数据报(UDP首部UDP数据)的最大长度如果校验和出错…

【C++】线程库常用接口

1.创建线程&#xff0c;等待线程&#xff0c;获取线程id 2.全局变量&#xff0c;局部变量&#xff0c;互斥锁 要让不同的线程访问同一个变量和同一把锁&#xff0c;有两种方法&#xff1a; 2.1方法一 定义全局的变量和全局的锁&#xff0c;这样自然就能访问到。 但全局变量在…

电能表预付费系统-标准传输规范(STS)(5)

5.5MeterFunctionObjects / companion specifications配套规格 With reference to Figure 1 it can be seen that the TokenCarrierToMeterInterface, which also includes the TokenCarrier, is dealt with in the IEC 62055-4x and IEC 62055-5x series. The remaining Mete…

论文 | OpenICL: An Open-Source Framework for In-context Learning

主要内容&#xff1a; 2. 提供多种 ICL 方法&#xff1a; 3. 完整的教程&#xff1a; 4. 评估和验证&#xff1a; 背景&#xff1a; 随着大型语言模型 (LLM) 的发展&#xff0c;上下文学习 (ICL) 作为一种新的评估范式越来越受到关注。问题&#xff1a; ICL 的实现复杂&#xf…

[ABC367C] Enumerate Sequences

1.注意输入的是哪个数组&#xff0c;输出的是哪个 2.dfs函数可以带两个参数&#xff0c;方便记录&#xff0c;一个记录第几个位置&#xff0c;一个记录题目的要求&#xff0c;例如求和。 3.注意递归出口输出后一定要return. #include<bits/stdc.h> using namespace std; …

Unity XR PICO 手势交互 Demo APK

效果展示 用手抓取物体&#xff0c;调整物体位置和大小等 亲测pico4 企业版可用&#xff0c; 其他设备待测试 下载链接&#xff1a; 我标记的不收费 https://download.csdn.net/download/qq_35030499/89879333

AI 编译器学习笔记之七三 -- 应用配置测试

1、通过jit_compile来进行算子调用控制 (不同的模型对推理的时间影响巨大) 昇腾pytorch代码地址&#xff1a;https://gitee.com/ascend/pytorch jit_compile true&#xff1a;走的是GEIR&#xff0c;进行了在线编译&#xff0c;可以用到的算子包含了 ascendC 、tbe、tik、aicpu…

Spring事务管理:应用实战案例和规则

背景 想象一下&#xff0c;如果没有Spring框架对事务的支持&#xff0c;我们得自行对事物进行管理&#xff1a; 获得JDBC连接、 关闭JDBC连接、 执行JDBC事务提交、 执行JDBC事务回滚操作 有了Spring事务框架&#xff0c;我们再也不需要在与事务相关的方法中处理大量的try.…

Faker:自动化测试数据生成利器

Faker&#xff1a;自动化测试数据生成利器 前言1. 安装2. 多语言支持3. 常用方法3.1 生成姓名和地址3.2 生成电子邮件和电话号码3.3 生成日期和时间3.4 生成公司名称和职位3.5 生成文本和段落3.6 生成图片和颜色3.7 生成用户代理和浏览器信息3.8 生成文件和目录3.9 生成UUID和哈…

4 机器学习之归纳偏好

通过学习得到的模型对应了假设空间中的一个假设。于是&#xff0c;图1.2的西瓜版本空间给我们带来一个麻烦&#xff1a;现在有三个与训练集一致的假设&#xff0c;但与它们对应的模型在面临新样本的时候&#xff0c;却会产生不同的输出。例如&#xff0c;对&#xff08;色泽青绿…

Excel日期导入数据库变为数字怎么办

在Excel导入到数据库的过程中&#xff0c;经常会碰到Excel里面的日期数据&#xff0c;导进去过后变成了数字。 如下图&#xff1a; 使用navicate等数据库编辑器导入数据库后&#xff1a; 原因分析&#xff1a;这是因为日期和时间在excel中都是以数字形式存储的&#xff0c;这个…

PolarCTF靶场[web]file、ezphp WP

[WEB]file 知识点&#xff1a;文件上传漏洞 工具&#xff1a;Burp Suite、dirsearch 方法一&#xff1a; 根据页面提示&#xff0c;先用dirsearch工具扫一扫 访问/upload.php&#xff0c;发现一个上传区 在访问/uploaded/,再点击Parent Directory&#xff0c;发现链接到首页…

带隙基准Bandgap电路学习(三)

一、导入器件到版图中 从原理图中导入器件&#xff1a; Connectivity——>Generate——>All From Source I/O Pins暂不添加&#xff0c;后面自己画 PR&#xff08;Primary Region&#xff09;Boundary: 通常是用来定义芯片设计中某些关键区域的轮廓&#xff0c;比…

用Eclipse运行第一个Java程序

1.左键双击在桌面“软件 (文件夹)”&#xff0c;打开该文件夹 2.左键双击“eclipse (文件夹)”&#xff0c;打开该文件夹 3.左键双击“eclipse (文件夹)”&#xff0c;打开该文件夹 4.左键双击“eclipse.exe”&#xff0c;运行这个可执行程序 5.左键单击“Ok&#xff08;按下按…