《BLOOM: A 176B-Parameter Open-Access Multilingual Language Model》
论文地址:https://arxiv.org/pdf/2211.05100.pdf 一、简介
预训练语言模型已经成为了现代自然语言处理pipeline中的基石,因为其在少量的标注数据上产生更好的结果。随着ELMo、ULMFiT、GPT和BERT的开发,使用预训练模型在下游任务上微调的范式被广泛使用。随后发现预训练语言模型在没有任何额外训练的情况下任务能执行有用的任务,进一步证明了其实用性。此外,根据经验观察,语言模型的性能随着模型的增大而增加(有时是可预测的,有时是突然的),这也导致了模型规模越来越多的趋势。抛开环境的问题,训练大语言模型(LLM)的代价仅有资源丰富的组织可以负担的起。此外,直至最终,大多数LLM都没有公开发布。因此,大多数的研究社区都被排除在LLM的开发之外。这在不公开发布导致的具体后果:例如,大多数LLM主要是在英文文本上训练的。
为了解决这些问题,我们提出了BigScience Large Open-science Open-access Multilingual Language Model(BLOOM)。BLOOM是在46种自然语言和13种编程语言上训练的1760亿参数语言模型,其是由数百名研究人员合作开发和发布的。训练BLOOM的计算力是由来自于法国公共拨款的GENCI和IDRIS,利用了IDRIS的Jean Zay超级计算机。为了构建BLOOM,对于每个组件进行了详细的设计,包括训练数据、模型架构和训练目标、以及分布式学习的工程策略。我们也执行了模型容量的分析。我们的总体目标不仅是公开发布一个能够和近期开发的系统相媲美的大规模多语言的语言模型,而且还记录其开发中的协调过程。 二、BLOOM
多任务提示微调(也称为instruction tuning)涉及到对预训练语言模型的微调,微调的数据集由通过自然语言提示构成的大量不同任务组成。T0证明了在多任务混合的prompted数据集上微调的模型具有强大的zero-shot泛化能力。此外,T0优于那些数量级大但是没有经过这种微调的语言模型。受这些结果启发,我们探索了使用现有自然语言数据集来进行多任务prompted微调。
T0是在Public Pool of Prompt(P3)子集上进行训练的,其是一个各种现有的、开源的应用自然语言数据集的prompt集合。该prompt集合是通过BigScience合作者参与的一系列黑客马拉松创建的,其中黑客马拉松参与者为170+数据集编写了2000+的prompt。P3中的数据集覆盖了各种自然语言任务,包括情感分析、问答、自然语言推理,并且排除了有害的内容或者非自然语言。PromptSource,一个开源工具包促进了自然语言prompt的创建、共享和使用。
对BLOOM预训练之后,我们应用相同的大规模多任务微调,使BLOOM具有多语言zero-shot任务泛化能力。我们称得到的模型为BLOOMZ。为了训练BLOOMZ,我们扩展了P3来包含非英语中新数据集和新任务,例如翻译。这产生了xP3,它是83个数据集的提升集合,覆盖46种语言和16中任务。正如上图4所述,xP3反映了ROOTS的语言分布。xP3中的任务包含跨语言和单语言。我们使用PromptSource来收集这些prompts,为prompt添加额外的元数据,例如输入和目标语言。为了研究多语言prompt的重要性,我们还将xP3中的英语提示用机器翻译为相应的数据集语言,来生成一个称为xP3mt的集合。 2. 模型架构
消融实验设计
LLM的主要吸引力是其以"zero/few-shot"的方式执行任务的能力:足够大的模型可以简单的从in-context指令和例子执行新的任务,不需要在监督样本上训练。由于对100B+模型微调很麻烦,我们评估架构决策专注在zero-shot泛化能力上,并且不考虑迁移学习。具体来说,我们衡量了不同任务集合的zero-shot表现:29个任务来自于EleutherAI Language Model Evaluation Harness(EAI-Eval),9个任务来自T0的验证集(T0-Eval)。两者之间有很大的重叠:T0-Eval中仅有一个任务是不在EAI-Eval,尽管两者的所有prompt都不同。
此外,也使用更小的模型进行了消融实验。使用6.7B模型对预训练目标进行消融实验,使用1.3B模型对位置嵌入、激活函数和layer normalization进行消融实验。近期,Dettmers在大于6.7B的模型上发现了相变,观察到了"异常特征"出现。那么在1.3B规模上是否能够外推自最终模型尺寸上?
虽然大多数现代语言模型都是基于Transformer架构,但是架构实现之间存在着显著的不同。显然,原始的Transformer是基于encoder-decoder架构的,许多流行的模型仅选择encoder-only或者decoder-only方法。当前,所有超过100B参数的state-of-the-art模型都是decoder-only模型。这与Raffel等人的发现相反,在迁移学习方面encoder-decoder模型显著优于decoder-only模型。
在我们工作之前,文献缺乏不同架构和预训练目标的系统性评估zero-shot泛化能力。我们在Wang et al.(2022a)等人的工作中探索了这个问题,其探索了encoder-decoder和decoder-only架构以及与causal、prefix和masked language modeling预训练模型的相互作用。我们的结果显示,经过预训练之后,causal decoder-only模型的表现最好,验证了state-of-the-art LLM的选择。 2.3 建模细节
在选择架构和预训练目标之外,对原始Transformer架构提出了许多的更改。例如,可选的位置嵌入方案或者新颖的激活函数。我们执行了一系列的实验来评估每个修改,在Le Scao et al.的causal decoder-only模型上。我们在BLOOM中采用了两种变化:
考虑到BLOOM可能带来的潜在有害用例,我选择了不受限制的开发访问和负责任的使用之间取得平衡,包括行为使用准则来限制模型对潜在有害用例的应用。这些条款通常被包含在"Responsible AI Licenses(RAIL)",社区在发布模型时所采用的Licenses。与BLOOM开始时采用的RAIL license显著区别是,它分离了"源代码"和"模型"。它还包括了模型的"使用"和“派生工作”的详细定义,来确保明确识别通过prompting、微调、蒸馏、logits使用和概率分布的下游使用。该license包含13项行为使用限制,这些限制根据BLOOM Model Card描述的预期用途和限制,以及BigScience道德章程来确定。该license免费提供模型,用户只要遵守条款,就可以自由使用模型。BLOOM的源代码已经在Apache 2.0开源许可证下提供访问。 三、评估
基于最近关于prompt对于语言模型性能影响的研究,我们决定建立一个语言模型评估套件,该套件允许我们改变基础任务数据,以及用于“上下文”化任务的prompting。我们的prompt是先于BLOOM发布开发的,没有使用模型进行任何先验改进。我们以这种方式设计prompt的目的是,模拟新用户期望BLOOM的zero-shot或者one-shot结果。
我们使用promptsource来为每个任务生成多个prompt。我们遵循Sanh et al.(2022)使用的流程,prompt是由众包生成的,因此能够看到prompt的不同长度和风格。为了提升质量和明确性,对每个prompt执行多个同行评审。
上表5展示了一些用于WMT'14任务的最终prompt。由于资源限制,我们还为许多没有包含在本文中的任务生成prompt。所有任务的所有prompt都可以公开访问。 1.2 基础设施
我们的框架通过集成promptsource库来扩展EleutherAI's Language Model Evaluation Harness。我们发布了Prompted Language Model Evaluation Harness作为开源库供人们使用。我们使用这个框架来运行实验和聚合结果。 1.3 数据集
基于最近在多任务微调上的工作,我们探索使用多语言多任务微调来改善BLOOM模型的zero-shot效果。我们使用xP3语料来在BLOOM上执行多语言多任务微调。我们发现zero-shot表现的能力显著增强。上图10,我们比较了BLOOM和XLGM模型与多任务微调BLOOMZ、T0和mTk-Instruct的zero-shot效果。BLOOM和XGLM的表现解决随机基线。经过多语言多任务微调(BLOOMZ),zero-shot的效果显著改善。尽管在多任务上进行了微调,由于T0是单语言英语模型,它在多语言数据集上表现很差。然而,由Muennighoff et al.提供的额外结果表明,当控制大小和架构,在xP3的英文数据集上微调的模型仍然优于T0。这可以是由于T0微调的数据集(P3)包含的数据集和prompt的多样性低于xP3。 5. 代码生成