赞
踩
如今,大型语言模型 (LLM) 使系统构建者能够通过提示创建有效的 NLP 系统,他们只需要用自然语言描述任务并提供一些示例。然而,在其他方面,LLM 比传统的专用 NLP 模型倒退了一步;它们需要大量的计算资源来进行部署,并且可以通过 API 进行控制。在本文中,我们提出了 Prompt2Model,这是一种通用方法,它采用自然语言任务描述(如提供给LLM的提示),并用它来训练有利于部署的专用模型。 这是通过检索现有数据集和预训练模型、使用 LLM 生成数据集以及对这些检索和生成的数据集进行监督微调的多步骤过程来完成的。通过三个任务,我们证明了在给定相同的few-shot提示作为输入的情况下,Prompt2Model 训练的模型的性能比强大的 LLM gpt-3.5-turbo 的结果平均高出 20%,同时尺寸最多缩小 700 倍。我们还表明,这些数据可用于获得模型性能的可靠性能估计,使模型开发人员能够在部署之前评估模型的可靠性。Prompt2Model 在 https://github.com/neulab/prompt2model 上开源。
传统上,从头开始构建 NLP 模型是一项艰巨的任务。寻求解决新问题的 NLP 从业者需要定义其任务范围、查找或创建满足预期系统行为的数据、选择合适的模型架构、训练模型、通过评估其性能,然后将其部署到实际环境中。
像 GPT-3 这样的LLM通过“提示”为 NLP 系统构建提供了一种更轻量级的范式。从业者现在可以编写一个提示,指定预期的系统行为(可选地提供一些演示),并要求LLM通过文本补全生成所需的输出。这使得无需编写一行代码即可快速为各种应用程序构建 NLP 系统原型。
然而,概念验证原型(显示可以提示LLM完成特定任务)与实际部署之间仍然存在差距。提示LLM可能会很昂贵,因为它们需要大量计算或访问商业 API,而且它们对输入提示质量的依赖使得它们与经过训练的模型相比不稳定。由于从业者通常没有足够多的带标注的验证数据来衡量他们的系统性能,因此他们在部署之前调试系统也更具挑战性。此外,LLM 提示的系统也带来了可用性挑战。从业者对与使用 LLM 相关的高服务成本和缓慢的预测时间表示担忧,并且由于隐私问题,那些在高风险领域工作的人不能依赖商业 LLM API。例如,对于美国的许多应用程序来说,向LLM服务提供商共享用户数据是非法的。
在这项工作中,我们提出了 Prompt2Model,这是一个保留了通过提示以轻量级方式指定系统行为的系统,同时仍然产生可部署的专用模型,并保留了其所有优点。Prompt2Model 被设计为一个自动化管道,从用户的提示中提取必要的任务信息,然后通过三个渠道自动收集和合成特定于任务的知识:
Prompt2Model 旨在支持每个组件的不同实例化。我们提供了一个参考实现,其中通过基于 gpt-3.5-turbo 的数据集生成器、基于 DataFinder 的数据集检索器和使用 BM25 的模型检索器来演示其实用性。我们对涵盖了传统 NLP 基准和新应用的三个任务进行评估,并发现,根据经验,Prompt2Model 有时会在使用相同的提示作为输入时生成优于 gpt-3.5-turbo 的小模型。在这 3 项任务中的 2 项中,我们观察到比 gpt-3.5-turbo 基线提高了 20 点以上,尽管 Prompt2Model 生成的最终模型小了 700 倍。我们还发现我们可以生成有效的评估数据集;在这些真实基准的合成克隆基准赏的性能改进也与真实基准测试相同。我们相信 Prompt2Model 可以为社区提供以下服务:
我们的系统 Prompt2Model 提供了一个平台来自动化机器学习管道的组件:数据收集、模型训练、评估和部署。我们在图 2 中展示了我们的自动化流程。其核心是我们的自动数据收集系统,它利用数据集检索和基于 LLM 的数据集生成来获取与用户需求相关的标注数据。然后,我们检索预训练的模型,并根据收集数据集分割后的训练集进行微调。最后,我们在相同分割后的测试集上评估我们训练的模型,并选择创建一个可用于与模型交互的 Web UI。
我们的通用方法被设计为模块化和可扩展的;每个组件都可以由从业者以不同的方式实现或禁用。我们概述了我们的框架,然后在第 3 节中我们描述了我们的参考实现。
Prompt Parser。作为我们系统的主要输入,用户提供类似于LLM使用的提示。这些提示包括指令以及可选的一些目标行为的演示样例。虽然这种开放式界面对用户来说很方便,但端到端的机器学习管道可能会受益于用于处理输入的提示解析器,例如将提示分割成指令和单独的演示样例或将指令翻译成英语。
Dataset Retriever。根据提示,我们首先尝试发现可以用于支持用户任务描述的现有人工标注数据。数据检索器有几个设计决策:
Färber and Leisinger (2021) 以及 Viswanathan et al. (2023) 之前的工作引入了数据集搜索系统。在我们的实现中则使用后者,称为DataFinder,如第 3.2 节中所述。
Dataset Generator。并非所有可想象的任务都有现成的带标注的数据,并且许多任务仅与现有数据集有些相关。为了支持广泛的任务,我们引入了数据集生成器,根据提示解析器解析用户的特定要求以生成合成训练数据。该组件提出了对成本效率、生成速度、示例多样性和质量控制相关的挑战。我们在第 3.3 节中讨论了针对这些挑战所提出的解决方案。
Model Retriever。除了训练数据之外,我们还必须确定合适的模型进行微调。 我们将其视为一个检索问题,其中每个模型都由用户生成的描述和元数据(例如受欢迎程度或支持的任务)表示。我们的模型检索器的参考实现(如第 3.4 节中所述)用于在 Hugging Face 上搜索预训练模型,但这可以覆盖其他模型存储库,例如 Model Zoo。
Training。给定检索和生成的数据集以及预训练模型,我们使用模型训练器在数据子集上微调模型。我们目前通过将所有任务视为文本到文本的生成来训练模型,如第 3.5 节中所述,但需要强调的是该组件将来可以扩展以支持新方法。
Evaluation。在对检索和生成的数据集的一部分进行模型训练后,我们将剩余的数据提供给模型评估器模块。我们的目标是支持各种任务,因此为任意任务选择正确的特定于任务的指标是一个难题。我们在第 3.6 节中描述了我们提出的与任务无关的评估策略。
Web App Creation。为了使开发人员能够向协作者或用户公开模型,我们包含一个名为 Demo Creator 的可选组件,用于创建与模型交互的图形界面。我们在第 3.7 节中简要描述了该组件的实现。
Prompt2Model 采用模块化设计,以支持自定义框架中的每个组件(如第 2 节所述),但我们提供了参考实现以方便立即采用。
我们将提示解析为指令和演示字段(如图 2 所示),其中指令代表主要任务或目标,演示样例则说明了所需的行为。为了实现这一目标,我们利用具有上下文学习能力的LLM来分段用户提示,并在实验中使用 OpenAI的gpt-3.5-turbo-0613。如果所提供的指令被确定为英语以外的语言,我们会使用 DeepL API 将其翻译为英语。
为了检索数据集以作为提示,我们采用了由 Viswanathan et al. (2023 引入的 DataFinder 系统。通过抽取 Hugging Face 数据集中用户生成的数据集描述,我们利用 DataFinder 中训练好的双编码检索器对最相关的数据集进行排名。一旦识别出相关数据集,下一步就是确定数据集的哪些列对应于用户指定的输入和所需输出。由于自动为任何数据集引入正确的模式可能具有挑战性,因此我们采用了人机交互的方法。我们向用户提供前 k k k 个数据集(默认情况下 k = 25 k=25 k=25),并允许他们选择最相关的数据集或声明没有一个数据集适合他们的任务。然后,我们要求用户从数据集结构中确认用于输入和输出的适当列。
我们精心设计了数据集生成器,以低成本实现速度优化的生成,同时创建多样化和高质量的示例。 我们的战略包括以下组成部分:
High-Diversity Few-Shot Prompting。我们使用自动提示工程来生成多样化的数据集。我们使用先前生成示例的随机样本来增强用户提供的演示示例,以促进多样性并避免生成重复的示例。如果没有这个策略,生成的 200 个 QA 示例中有 120 个是重复的;有了它,只有 25 个是重复的。
Temperature Annealing。我们根据已生成的样例数量按比例将采样温度从低(有利于确定性输出)调整到高(鼓励多样化探索)。这种调制有助于保持输出质量,同时逐渐鼓励多样性
Self-Consistency Decoding。考虑到 LLM 可能会对相同的输入生成不唯一或不正确的输出,我们使用自洽解码过滤来选择伪标签。具体来说,我们通过选择最常见的答案来为每个独特的输入创建共识输出;在平局的情况下,我们启发式地选择最短的答案。这提高了生成的数据集的准确性,同时确保了独特的示例。
Asynchronous Batching。API 请求使用 zeno-build 并行化。我们使用额外的机制(例如动态批量大小和限制)来优化 API 使用。
我们需要选择一个合适的模型来进行微调。为了使用统一的模型接口支持多种任务,我们目前将自己限制在 Hugging Face 上的编码器-解码器架构,最近的工作表明编码器-解码器模型对于模型蒸馏来说数据效率更高。此限制仍然留下大量预训练模型可供选择,例如 Salesforce/codet5-base 用于编码相关任务,或 MaryaAI/opus-mt-ar-en-finetuned-ar-to-en 用于阿拉伯语到英语的翻译。我们将选择预训练模型的问题构建为搜索问题。使用用户的指令作为query,我们搜索 Hugging Face 上所有模型的文本描述。
此搜索任务具有挑战性,因为 Hugging Face 模型描述稀疏且包含大量模板文本,通常只有几个单词表示模型的内容。为了解决这个问题,我们遵循 HyDE 框架,首先使用 gpt-3.5-turbo 根据用户的指令创建一个假设的模型描述。我们在图 3 中展示了为问答指令生成的假设文档的示例。使用此描述作为扩展query,然后应用 BM25 算法来计算query-模型间的相似度分数。为了确保生成的模型易于部署,我们过滤掉大小(以字节为单位)超过用户指定阈值(默认设置为 3GB)的模型。根据直觉,下载量高的模型更有可能质量高,因此我们在排名后选择top模型:
B
M
25
(
q
u
e
r
y
,
m
o
d
e
l
)
⋅
l
o
g
(
#
o
f
D
o
w
n
l
o
a
d
s
+
1
)
.
BM25(query, model)\cdot log(\#~of~Downloads+1).
BM25(query,model)⋅log(# of Downloads+1).
Dataset Processing。我们通过利用两个数据集(一个是生成的,一个是检索的)来训练模型。为了解决面向特定模式的建模决策的挑战(例如,为分类或生成任务构建专门的架构),我们将所有数据集视为“文本到文本”的生成问题。我们将每个数据集的输入列文本化,并将用户的指令添加到输入中以指导模型。
Finetuning。在训练teacher模型之前,我们将检索到的和生成的数据集连接起来并对其进行打乱。我们对所有任务使用相同的默认超参数。我们使用 AdamW 优化器(lr = 5e-5)进行 3 个 epoch 的训练,所有任务大约需要一小时。
我们的模型评估器使用三个通用指标来自动评估所有任务的模型:精确匹配、ChrF++ 和 BERTScore。ChrF++ 平衡精确度和召回率来评估文本生成质量。 精确匹配衡量模型输出与golden参考完美匹配的频率。由于考虑到有不同的措辞或短语,BERTScore 通过比较模型输出和参考在嵌入空间中的语义相似性来评估。我们使用XLM-R作为BERTScore的编码器来支持多语言评估。
最后,我们在 Prompt2Model 中提供了一个可选步骤,以自动创建图形用户界面,允许下游用户与经过训练的模型进行交互。这个使用 Gradio 构建的 Web 应用程序可以轻松地公开部署在服务器上。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。