Bootstrap

构建LLM的最佳实践

点击上方“AI公园”,关注公众号,选择加“星标“或“置顶”


作者:Nitzan Gado

编译:ronghuaiyang

导读

Intuit 公司分享了他们在为生成式人工智能操作系统构建多个大型语言模型过程中所学到的经验。

63640f09ee52cd25620a5113f1ad3fb1.jpeg

生成式人工智能已经从一个有趣的研究话题发展成为改变行业的技术。众多公司正竞相将生成式AI功能整合到其产品和工程流程中,但这一过程比看上去要复杂得多。成功整合生成式AI需要有合适的大型语言模型(LLM)作为基础。虽然LLM不断进化且数量持续增长,但对于组织的特定应用场景来说,现成的最佳适配LLM可能并不存在。

在Intuit,我们一直在寻找加速开发速度的方法,以便尽快将产品和功能交到客户手中。早在2022年11月,我们就向我们的分析、人工智能和数据(A2D)组织的AI创新论文计划提交了一份提案,建议Intuit构建定制化的内部语言模型,以弥补现成模型所能提供的与我们实际需要为客户提供准确有效服务之间的差距。这一努力是更大推动力的一部分,旨在更灵活、更快速地生产高效工具,最终催生了GenOS,一个全面的操作系统,支持在整个技术平台上负责任地开发基于生成式AI的功能。

为了应对各种应用场景,我们仔细评估了现成模型表现良好的痛点以及投资定制LLM可能更优的选择点。对于开放领域或与当前LLM能力相似的任务,我们首先探索提示工程、少量示例、RAG(检索增强生成)以及其他增强现成LLM能力的方法。当这些情况不适用,我们需要更具体和精确的东西时,我们会针对Intuit在消费者和小企业税务及会计领域的专业知识进行定制模型的训练。一般的经验法则是,先从评估通过提示配置的现有模型(零样本或少量样本)开始,并理解它们是否满足应用场景需求,之后再考虑将定制LLM作为下一步。

在本文的其余部分,我们将讨论对LLM进行微调的情况以及它可能成为强大工具的场景。我们还将分享一些从我们首次亲手构建、迭代和实施定制LLM的企业软件开发组织中获得的最佳实践和经验教训。

无需从零开始

根据我们的经验,现有预训练模型的语言能力实际上非常适合许多应用场景。问题在于如何应对预训练模型无法满足需求的情况。一种选择是从头开始定制构建新的LLM。尽管这是一个吸引人的选项,因为它让企业完全控制正在构建的LLM,但这需要大量的时间、精力和资金投入,还需要基础设施和工程专业知识。我们发现,通过使用所需类型的数据对现有模型进行微调是一个可行的选择

一般来说,微调远比从零开始构建新LLM更快、成本更低。对于预训练的LLM,许多繁重的工作已经完成。开源模型如果能提供准确的结果并得到开发社区的广泛认可,就无需预先训练你的模型或重新构建技术栈。相反,你可能只需要花一点时间查阅已有的文档,之后便能开始实验模型并对其进行微调。

然而,并非所有LLM都一模一样。就像任何开发技术一样,LLM输出的质量极大地依赖于训练它的数据质量。基于模型包含的内容及其提供的答案来评估模型至关重要。请记住,生成式模型是一项新技术,而开源模型可能存在重要的安全考量,你应该对此进行评估。我们与包括法务、隐私和安全合作伙伴在内的多方利益相关者合作,评估我们使用的商业和开源模型的潜在风险,你也应该考虑这样做。围绕数据、性能和安全性的这些考虑因素,影响着我们在从头开始训练与微调LLM之间的决策。

好数据造就好模型

由于微调将成为大多数机构创建自己的LLM的主要方法,用于微调的数据就成了关键的成功因素。我们清楚地看到,具有更多数据预处理和过滤经验的团队能产出更优质的LLM。众所周知,干净、高质量的数据是机器学习的关键。对于LLM而言,这一点尤为重要。LLM很容易受数据影响——如果你给它们糟糕的数据,就会得到糟糕的结果。

如果你想创建一个好的LLM,你需要使用高质量的数据。挑战在于定义“高质量数据”究竟是什么。因为我们使用LLM来提供特定信息,所以我们从检查LLM产生的结果开始。如果这些结果符合我们对自身人类领域专家(分析师、税务专家、产品专家等)的期望标准,我们就可以确信它们所接受训练的数据是可靠的。

与客户和领域专家紧密合作,理解他们的问题和视角,并建立与实际KPI相关的强大评估体系,有助于所有人信任训练数据和LLM。逐案验证性能很重要。我们收集这类信息的方式之一是我们称为“跟我回家”的传统做法,即我们与终端客户坐下来,倾听他们的痛点,并观察他们如何使用我们的产品。在这种情况下,我们跟踪我们的内部客户——即领域专家,他们最终会判断LLM的响应是否满足他们的需求,并向他们展示各种示例响应和数据样本以获取反馈。我们开发了这个流程,以便可以反复迭代,从而创建越来越高质量的数据集。

显然,如果你想实现规模化操作,不可能手动评估一切。我们已经开发出了将专家的学习成果提炼成标准的方法,然后将这些标准应用于一组LLM上,以便针对特定的使用案例比较它们的性能。这种自动化方式使得能够迅速微调并评估新模型,立即给出关于其所含数据质量的强烈信号。例如,有论文显示GPT-4在数据注释方面与人类一样出色,但我们发现一旦偏离通用内容进入我们特定的使用场景,其准确性就会下降。通过融入专家的反馈和标准,我们成功地对GPT-4进行了微调,显著提高了其对于我们目的的注释质量。

简而言之,精心策划的数据加上与领域知识的紧密结合,以及持续的评估与反馈循环,是打造高性能LLM的关键。通过自动化这一过程并在整个开发周期内维持高标准,我们能够确保我们的LLM不仅准确无误,而且能够满足用户的特定需求,从而推动业务向前发展。

模型大小与资源成本的平衡

尽管拥有定制LLM的能力很重要,但为出现的每个用例生产定制LLM可能并不经济划算。每当我们考虑实施生成式AI功能时,必须平衡模型的大小与部署和查询它的成本。微调模型所需的资源只是这一更大方程式的一部分。

生产环境中LLM的标准围绕成本、速度和准确性。响应时间大致与模型大小(按参数数量衡量)成反比。为了提高模型效率,我们尝试使用尽可能小的基础模型并通过微调来提高其准确性。我们可以将定制LLM的成本视为产生它的资源需求,这些需求摊销于它所支持的工具或用例的价值上。因此,虽然能够使用相同的用例数据对不同参数数量的模型进行快速且低成本的微调和实验是有价值的,但在没有明确定义的生产用例和模型需求集的情况下,效果并不会那么好。

有时,人们带着非常明确的、高度领域特定的模型想法来找我们,然后对我们从小型、多用途LLM中获得的结果质量感到惊讶。过去,我们需要为每个任务训练单独的模型(比如双向编码器表示来自变换器或BERT),但在LLM的新时代,我们看到了能够很好地处理多种任务的模型,即使之前未见过这些任务。从技术角度来看,通常合理的是将尽可能多的数据源和用例微调到单一模型中。一旦有了管道和智能设计的架构,微调主模型和单个定制模型就很简单了,然后根据上述考虑因素看哪个表现更好。

统一模型的优势在于你可以部署它们来支持多种工具或用例。但你必须小心确保训练数据集准确代表模型将支持的每个个别任务的多样性。如果有任何一个任务表现不好,那么它在该统一模型中的表现可能不如其他任务。来自其他任务的概念和数据可能会污染那些响应。但通过良好的任务多样性的表示和/或触发它们的提示中有明确的划分,单一模型可以轻松做到这一切。

我们使用评估框架来指导对模型大小和范围的决策。为了准确性,我们使用EleutherAI的Language Model Evaluation Harness,它基本上是对LLM进行多项选择题的小测验。这给我们提供了LLM是否能得出正确答案的快速信号,多次运行则让我们了解模型内部工作原理的一扇窗口,前提是使用内部模型,我们能够访问模型概率。

我们还通过名为MT Bench(多轮基准测试)的开源工具来补充这些结果。它允许你使用另一个LLM作为裁判,自动化与用户的模拟聊天体验。因此,你可以使用更大、更昂贵的LLM来评判较小模型的响应。我们可以利用这些评估结果,避免在本可以用更小、更便宜的模型获得同样好结果的情况下部署大型模型。

当然,出于法律、监管或商业原因,可能需要分离模型。无论由法律规定还是内部控制执行的数据隐私规则,都可能限制特定LLM可用的数据及其使用者。为了避免领域特定语言的交叉污染,可能有理由分割模型,这也是我们最初决定创建自己模型的原因之一。

我们认为拥有多种多样的LLM可供选择能够创造出更好、更聚焦的应用程序,所以平衡准确性和成本的最终决策点出现在查询时。虽然我们内部的每个Intuit客户都可以选择这些模型中的任何一个,但我们建议他们启用多个不同的LLM。就像服务导向架构可能会使用不同的数据中心位置和云提供商一样,我们推荐使用基于启发式或自动的方法来将查询流量引导到确保每个定制模型在最小化延迟和成本的同时提供最佳体验的模型上。

没有LLM是最终版本

一旦LLM进入生产环境,你的工作并没有结束。模型漂移——即随着现实世界概念的变化,LLM随时间变得不那么准确——将影响结果的准确性。例如,在Intuit,我们必须考虑到每年都在变化的税法,并在计算税收时加以考虑。如果你想随着时间的推移在产品特性中使用LLM,你将需要制定更新策略

更新的理想状态是采取不会成本过高且限制从一个版本到另一个版本重复努力的方式。在某些情况下,我们发现为每个更新版本从头开始训练或微调基础模型比在以前版本的基础上构建更具成本效益。对于基于随时间变化数据的LLM,这是理想的;当前“新鲜”的数据版本是训练数据中唯一的材料。对于其他LLM,数据的变化可能是增加、删除或更新。在选定的基础模型上从头开始微调可以避免复杂的重新调整,并让我们对照以前的数据检查权重和偏见。

从头开始训练或微调也有助于我们扩展这一过程。每个数据源都有指定的数据管理员。每当他们准备更新时,他们会删除旧数据并上传新数据。我们的管道会接收到这些变化,构建LLM的更新版本,并在几小时内使其投入生产,无需数据科学家的介入。

在微调时,如果有一个好的管道,从头开始可能是更新专有或领域特定LLM的最佳选择。然而,移除或更新现有的LLM是一个活跃的研究领域,有时被称为机器遗忘或概念擦除。如果你拥有的基础LLM是在大量原始互联网数据上训练的,其中的一些信息很可能已经过时。从头开始并不总是可行的。据我们所见,正确做法涉及使用一套独特的指令微调LLM。例如,可以根据任务或数据的不同属性(如长度)变化的指令,以便它适应新数据。

你还可以将自定义LLM与检索增强生成(RAG)结合起来,提供引用来源的领域感知生成式AI。这种方法结合了两者的优点。你可以检索,并且可以在最新的数据上进行训练或微调。这样,你在响应中获取错误或过时数据的可能性将几乎为零。

LLM仍然是一个处于积极研发阶段的非常新技术。没有人真正知道五年后我们会达到什么程度——我们是否已经达到了规模和模型大小的上限,或者它是否会继续快速改进。但是,如果你已经建立了快速原型基础设施和反馈到数据的评估框架,那么无论何时有新进展,你都将处于有利地位来随时更新事物。

有效整合生成式AI

LLM是开发生成式AI应用的关键要素。每个应用都有其独特之处,但这些应用的基本底层是相互重叠的。为了高效地开发它们,你需要找到方法,使开发者和工程师在生产负责任、准确且响应迅速的应用时不必重复造轮子。我们通过开发GenOS作为实现这一工作的框架,为开发者提供了一套工具,以将应用程序与适合任务的正确LLM相匹配,并提供了额外的保护措施,以保障客户的安全,包括有助于加强安全、隐私和安全保护的控制措施。在Intuit,我们采用行业领先的技术和实践保护客户数据和隐私,并遵循负责任的AI原则,这些原则指导着我们公司如何运作,并始终以客户的最佳利益为出发点扩展我们的AI驱动的专家平台。

最终,对于特定用例来说最有效的方法取决于业务性质和客户需求。随着你支持的用例数量增加,你可能也需要相应增加支持这些用例所需的LLM数量。没有万能的解决方案,因此在开发者比较和部署LLM时,你能提供的帮助越多,他们就越容易快速产生准确的结果。

对于任何公司来说,评估LLM、按需开发定制LLM并在保持安全、数据隐私和安全标准的同时及时更新它们,都不是一件小事。正如本文所述,有一套原则性的方法可以遵循,以确保这项工作做得既正确又好。希望无论你处于生成式AI旅程的哪个阶段,都能发现我们在这个企业软件开发组织中的一手经验和教训是有用的。

你可以跟随我们的旅程,了解更多关于Intuit技术的信息,点击这里。

5c468e549129db7604b14ba776b7aee1.png

—END—

英文原文:

https://stackoverflow.blog/2024/02/07/best-practices-for-building-llms/

a3320a559f3f607bc45c32ca0008e40e.jpeg

请长按或扫描二维码关注本公众号

喜欢的话,请给我个在看吧

;