论文翻译 | 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将成为研究人员和从业者的一项宝贵资源,以促进他们的研究和开发工作。
 

 

 

 

 

 

 

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

龙信科技:引领电子物证技术,助力司法公正

文章关键词&#xff1a;电子数据取证、电子物证、手机取证、计算机取证、云取证、介质取证 在信息技术飞速发展的今天&#xff0c;电子物证在司法领域扮演着越来越重要的角色。苏州龙信信息科技有限公司&#xff08;以下简称“龙信科技”&#xff09;作为电子数据取证领域的先…

bat(批处理脚本学习)

输出banner echo off echo () echo JL echo ^|^| echo LJ echo _,--"""""""---. echo , …

从零实现高并发内存池

目录 1. 项目介绍1.1 这个项目具体功能是什么&#xff1f;1.2 本项目的知识储备 2. 什么是内存池2.1 池化技术2.2 内存池主要解决的问题2.3 malloc 3. 定长内存池设计4. 高并发内存池整体框架设计4.1 Thread Cache的设计思路4.2 Central Cache的设计思路4.3 Page Cache的设计思…

【C语言】分支结构switch

switch分支语句 多适用于明确表达式结果的情况&#xff0c;多个分支&#xff0c;用if过于繁琐。 case后跟具体的表达式值&#xff0c;break&#xff1b;跳出分支语句。 #include <stdio.h> #include <math.h> /* 功能&#xff1a;选择结构&#xff08;switch&…

Qt初识_项目文件解析

个人主页&#xff1a;C忠实粉丝 欢迎 点赞&#x1f44d; 收藏✨ 留言✉ 加关注&#x1f493;本文由 C忠实粉丝 原创 Qt初识_项目文件解析 收录于专栏【Qt开发】 本专栏旨在分享学习Qt的一点学习笔记&#xff0c;欢迎大家在评论区交流讨论&#x1f48c; 目录 1. pro文件解析 2.…

java异步多线程Async学习记录

java异步多线程Async学习记录 第1步:声明线程池AsyncConfiguration import org.springframework.context.annotation.Bean; import org.springframework

vue+element的confirm提示消息文字变色和换行

效果: 思路: 可以考虑采用模板字符串的思路实现 代码: this.confirm(您确定要<b style"Color: red">${text}</b>的数据项&#xff1f;<br/>单位名称: ${row.companyName} <br/>属性: ${row.attributeName}).then(() > {console.log(确定…

SCM供应商管理怎么做?

在企业的供应链管理中&#xff0c;供应商管理是至关重要的一环。然而&#xff0c;传统的供应商管理方式常常面临诸多痛点&#xff0c;导致管理效率低下、成本增加、风险增大。不注重供应商管理的企业&#xff0c;常常会面临以下问题&#xff1a; 供应商档案管理难&#xff1a;…

Redis 五种数据类型的操作命令

一、五种数据类型的介绍 五种数据类型如图所示&#xff1a; Redis 是一个开源的键值存储系统&#xff0c;它支持多种数据结构&#xff0c;每种数据结构都有其特定的用例和底层实现。以下是 Redis 的五种主要数据类型&#xff0c;以及它们适合存储的数据类型和底层实现&#xf…

健康生活的重要性

在当今快节奏的生活中&#xff0c;养生保健已成为人们日益关注的话题&#xff0c;而健身作为其中的重要一环&#xff0c;更是被赋予了前所未有的重视。谈及养生保健与健身&#xff0c;我们不得不深入思考&#xff1a;如何在繁忙的日常中&#xff0c;找到那条通往健康与活力的道…

MAC地址漂移实验

MAC地址漂移实验的概述&#xff1a; MAC地址漂移实验的概述主要围绕网络设备中的MAC地址动态变化及其检测与防护措施。以下是对MAC地址漂移实验的具体介绍&#xff1a; MAC地址漂移的定义&#xff1a;MAC地址漂移是指在同一个VLAN内&#xff0c;一个MAC地址被交换机的两个不同…

【哈希】1. leetcode 1. 两数之和

1 题目描述 题目链接&#xff1a;两数之和 2 题目解析 一般的思维&#xff1a;找到两个数A和B&#xff0c;判断A和B相加是否为target。 我们可以采用逆向思维&#xff1a;找到一个数A&#xff0c;在nums数组中找是否有值等于target - A&#xff0c;因为题目要求只返回一个…

QT实现改变窗口大小其子控件也自动调节大小

创建一个顶层布局即可&#xff0c;一定要在MainWindows或者Widget的下面&#xff01; 观察图标变化 带有禁止的意思是分拆布局&#xff08;当前无布局&#xff09; 现在是添加布局后了 注意&#xff1a;一定是在MainWindows或Widget才可以添加顶层布局&#xff0c;才可以实现…

Flutter技术学习

以下内容更适用于 不拘泥于教程学习&#xff0c;而是从简单项目入手的初学者。 在开始第一个项目之前&#xff0c;我们先要了解 两个概念。 Widget 和 属性 Widget 是用户界面的基本构建块&#xff0c;可以是任何 UI 元素。属性 是 widget 类中定义的变量&#xff0c;用于配…

linux 效率化 - zsh + tmux

文章目录 简介涉及的资料/代码仓库让我们开始吧1. Oh my Zsh!2. 终端主题 - powerlevel10k &#xff08;赋能优雅终端界面&#xff09;3. Oh my Tmux!安装完成&#xff0c;再加点料1. tmux2. zsh 结语进阶配置&#xff08;发烧友关注&#xff09;zsh-vim-mode&#xff08;终端支…

拉拢商家、直播PK,这届双11开始卷平台

文丨郭梦仪 在一声声“上链接”中&#xff0c;不少网友在昨晚已经成为了第一批“尾款人”。第一份战报也在今日傍晚发出。 据天猫双11战报显示&#xff0c;活动首小时&#xff0c;大家电整体成交同比去年双11预售同期暴涨765%。仅开售4小时&#xff0c;老板、TCL、西门子、方太…

【Docker】安装部署项目流程(Pycharm版)

安装部署步骤 1.准备项目 第一步要准备好你所需要部署的项目&#xff0c;确保在工作目录下所以程序.py文件正常调用并能正确运行 如上&#xff0c;main要在工作目录中能跑通&#xff0c;这里有一点需要注意 在IDE src不要标记为源代码根目录&#xff0c;观察一下是否能跑通代…

【Vue】Vue扫盲(三)计算属性和监听器

【Vue】Vue扫盲&#xff08;一&#xff09;事件标签、事件修饰符&#xff1a;click.prevent click.stop click.stop.prevent、按键修饰符、及常用指令 【Vue】Vue扫盲&#xff08;二&#xff09;指令&#xff1a;v-for 、v-if、v-else-if、v-else、v-show 文章目录 1、 计算属…

|动漫爬取|001_djangodjango基于Spark的国漫推荐系统的设计与实现2024_tpd6q1o4

目录 系统展示 开发背景 代码实现 项目案例 获取源码 博主介绍&#xff1a;CodeMentor毕业设计领航者、全网关注者30W群落&#xff0c;InfoQ特邀专栏作家、技术博客领航者、InfoQ新星培育计划导师、Web开发领域杰出贡献者&#xff0c;博客领航之星、开发者头条/腾讯云/AW…

【3dgs】3DGS与NeRF对比

以下是 3DGS&#xff08;3D Geometry Sensing&#xff09;与 NeRF&#xff08;Neural Radiance Fields&#xff09;对比表格&#xff1a; 更加详细的资料&#xff0c;轻参考&#xff1a; NERF/3DGS 对比维度3DGS (3D Geometry Sensing)NeRF (Neural Radiance Fields)基本原理…