如何提升ChatGPT的准确性OpenAI发布最新LLM官方指南

OpenAI 发布官方指南

OpenAI 发布了 最新指南 [1] ,旨在帮助开发者优化大型语言模型 (LLM) 的准确性。

Colin Jarvis,OpenAI 的产品负责人分享了这份指南。他指出,尽管 OpenAI 在去年 11 月的开发者大会上强调了优化 LLM 准确性的重要性,但要达到生产环境所需的准确性水平仍然是一个挑战。

这份指南 旨在帮助开发者解决以下关键问题 :

如何开始优化 LLM 的准确性

应该使用哪些优化方法

生产环境需要达到什么样的准确性水平

Jarvis 表示,这份指南提供了一个处理这些问题的思维模型。他鼓励开发者阅读这份指南,并分享他们希望在指南中看到的内容。

优化 LLM 并不容易

我们与许多初创企业和大型企业的开发者合作,发现优化困难的原因主要集中在以下几点:

知道如何开始优化准确性

了解何时使用哪种优化方法

确定什么程度的准确性足以投入生产

本文提供了一种优化 LLM 准确性和行为的思维模型。我们将探讨提示词工程、检索增强生成 (RAG) 和微调等方法。我们还将讨论何时使用每种技术,并分享一些陷阱。

在阅读过程中,务必将这些原则与您的具体用例中的准确性联系起来。尽管这似乎显而易见,但生产出需要人类修复的坏结果与错误退还客户 1000 而 非 100 之间是有区别的。您应该在任何有关 LLM 准确性的讨论中大致了解 LLM 出错的代价和成功的收益,这将在最后讨论生产中“足够好”的准确性标准时再次提到。

LLM 优化背景 [2]

许多有关优化的“操作指南”将其描绘为一个简单的线性流程——从提示词工程开始,然后是检索增强生成,最后是微调。然而,实际情况并非如此——这些都是解决不同问题的杠杆,要朝正确的方向优化,您需要撬动正确的杠杆。

将 LLM 优化框架以矩阵来展示比较有用:

如何提升ChatGPT的准确性OpenAI发布最新LLM官方指南-2

图1:准确性思维模型示意图

典型的 LLM 任务将从左下角的提示词工程开始,在那里我们进行测试、学习和评估以获得基线。一旦我们审查这些基线示例并评估它们出错的原因,就可以撬动一个杠杆:

纵轴:上下文优化: 当模型缺乏上下文知识(因为训练集中没有),知识过时或需要了解专有信息时,需要进行上下文优化。此轴最大化 响应准确性 。

横轴:LLM 优化: 当模型产生格式不正确的结果、不正确的语气或风格,或者推理不一致时,需要优化 LLM。此轴最大化 行为一致性 。

实际上,这会转化为一系列优化步骤:评估、提出优化假设、应用、评估和重新评估下一步。以下是一个典型的优化流程示例:

如何提升ChatGPT的准确性OpenAI发布最新LLM官方指南-3

图2:准确性思维模型路径示意图

在此示例中,我们执行以下步骤:

从提示词开始,评估其性能

添加静态的 few-shot 示例,以提高结果一致性

添加检索步骤,使 few-shot 示例根据问题动态引入——这通过确保每个输入的相关上下文来提升性能

准备包含 50 多个示例的数据集,并微调模型以提高一致性

调整检索并添加事实检查步骤以发现幻觉,从而提高准确性

在包含增强 RAG 输入的新训练示例上重新训练微调模型

这是一个解决复杂业务问题的典型优化管道——它帮助我们决定是否需要更多相关的上下文或更一致的模型行为。一旦做出决定,我们知道哪个杠杆是优化的第一步。

现在我们有了思维模型,让我们深入探讨所有这些领域的操作方法。我们将从左下角的提示工程开始。

PE:提示词工程 [3]

提示词工程通常是最佳的起点。对于总结、翻译和代码生成等用例,它通常是唯一需要的方法,在这些用例中零样本方法可以达到生产级别的准确性和一致性。

这是因为它迫使您定义准确性在您的用例中的含义——从最基本的提供输入开始,您需要能够判断输出是否符合预期。如果不是您想要的,原因将显示出驱动进一步优化的方向。

为实现这一目标,您应始终从一个简单的提示词和预期的输出开始,然后通过添加 上下文 、 指令 或 示例 来优化提示词,直到它给出您想要的结果。

优化 [4]

为了优化您的提示,我将主要依靠 OpenAI API 文档中的 提示工程指南 [5] 中的策略。每种策略都有助于调优上下文、LLM 或两者:

策略

上下文优化

LLM 优化

编写清晰的指令

X

将复杂任务分解为简单子任务

X

X

给 GPTs 时间“思考”

X

系统地测试更改

X

X

提供参考文本

X

使用外部工具

X

这些可能有些难以可视化,因此我们将通过一个实际示例来测试这些方法。让我们用 gpt-4-turbo 来纠正冰岛语句子,看看这如何运作。

语言纠正的提示词工程

Icelandic Errors Corpus [6] 包含带有错误的冰岛语句子及其正确版本的组合。我们将使用基础的 GPT-4 模型来尝试解决这个任务,然后应用不同的优化技术,看看如何提高模型的性能。

给定一个冰岛语句子,我们希望模型返回该句子的正确版本。我们将使用 Bleu 分数来衡量翻译的相对质量。

系统

用户

真实情况

助理

BLEU

以下句子包含可能有错误的冰岛语句子。请尽可能少地更改单词来纠正这些错误。

Sörvistölur eru nær hálsi og skartgripir kvenna á brjótsti.

Sörvistölur eru nær hálsi og skartgripir kvenna á brjósti.

Sörvistölur eru nær hálsi og skartgripir kvenna á brjósti.

1.0

我们首先使用没有示例的 GPT-4 进行尝试,表现良好,取得了 62 的 BLEU 分数。现在我们将添加一些 few-shot 示例,看看是否可以通过展示而非说明来教模型我们想要的风格。一个示例如下:

以下句子包含可能有错误的冰岛语句子。请尽可能少地更改单词来纠正这些错误。# 示例"Stofnendurnir séu margir og eru fulltrúar hennar frá Englandi, Grikklandi, Rússlandi, Svíþjóð og fleiri löndum Evrópu.""Hann segir að stofnendur leynireglunnar séu margir og að fulltrúar hennar séu frá Englandi, Grikklandi, Rússlandi, Svíþjóð og fleiri löndum Evrópu.""Helsta fæða bjúgorma eru hægfara lífverur sem eru á sama búsvæði og bjúgormarnir, oft smærri ormar eins og burstormar (fræðiheiti: Polychatete).""Helsta fæða bjúgorma eru hægfara lífverur sem eru á sama búsvæði og bjúgormarnir, oft smærri ormar eins og burstaormar (fræðiheiti: Polychatete).""Sörvistölur eru nær hálsi og skartgripir kvenna á brjótsti.""Sörvistölur eru nær hálsi og skartgripir kvenna á brjósti."

整体翻译质量有所提高,BLEU 分数提升到 70(+8%) 。这很不错,表明通过给模型示例来展示任务有助于它学习。

这告诉我们需要优化的是模型的 行为 ——它已经具备解决问题所需的知识,因此提供更多示例可能是我们需要的优化方法。

我们将在本文后面再次测试我们的高级优化方法如何应用于此用例。

我们已经看到提示词工程是一个很好的起点,通过适当的调优方法,我们可以大大提高性能。

然而,提示词工程的最大问题是它往往不能扩展——我们要么需要动态上下文来处理比简单上下文填充更广泛的问题,要么需要比 few-shot 示例更一致的行为。

那么提示词工程能达到多远呢?答案是视情况而定,通过评估来做出决定。

评估 [7]

这就是为什么 一个好的提示词和一个评估问题集以及真实答案集 是这个阶段的最佳输出。如果我们有一组 20 多个问题和答案,并且我们已经研究了失败的细节并有了假设,那么我们就有了采用更高级优化方法的正确基线。

在您继续更复杂的优化方法之前,还值得考虑如何自动化此评估以加快迭代速度。我们在这里看到的一些常见做法是:

使用诸如 ROUGE [8] 或 BERTScore [9] 之类的方法提供一个大致的判断。尽管这与人类审查员的相关性不高,但可以快速有效地衡量迭代对模型输出的改变程度。

使用 GPT-4 [10] 作为评估者,如 G-Eval 论文中所述,为 LLM 提供评分卡,以尽可能客观地评估输出。

如果您想深入了解这些方法,可以查看 这个手册 [11] ,其中展示了所有这些方法的实际应用。

理解工具 [12]

所以您已经做了提示词工程,并有了一个评估集,但模型仍然没有达到您的需求。下一步最重要的是诊断出模型失败的地方,以及哪个工具最适合改进它。

以下是一个基本框架:

如何提升ChatGPT的准确性OpenAI发布最新LLM官方指南-4

图3:分类记忆问题示意图

您可以将每个失败的评估问题框架化为 上下文 或 学习 记忆问题。作为类比,想象一下参加考试。您可以通过两种方式确保得到正确答案:

您参加了过去 6 个月的课程,期间看到了许多重复的概念示例。这是 学习 记忆——您通过向 LLM 显示提示词和期望响应的示例来解决这个问题,模型从中学习。

您随身带着教科书,可以查找正确的信息来回答问题。这是 上下文 记忆——我们通过在上下文窗口中填充相关信息来解决 LLM 中的问题,可以通过静态方式使用提示词工程,或者通过工业化方式使用 RAG。

这两种优化方法是 叠加的,而非排斥的 ——它们是互补的,一些用例可能需要同时使用它们以达到最佳性能。

假设我们面临短期记忆问题——我们将使用 RAG 来解决。

检索增强生成(RAG) [13]

RAG 是在生成答案之前检索内容以增强 LLM 提示词的过程。它用于为模型提供解决任务的领域特定上下文。

RAG 是提高 LLM 准确性和一致性的重要工具——OpenAI 的许多最大客户部署仅使用提示词工程和 RAG。

如何提升ChatGPT的准确性OpenAI发布最新LLM官方指南-5

图4:RAG 示意图

在此示例中,我们嵌入了一个知识库。当用户提出问题时,我们会嵌入该问题并从知识库中检索最相关的内容。将这些内容呈现给模型,模型生成答案。

RAG 应用引入了一个新的优化轴,即检索。为了使 RAG 工作,我们需要为模型提供正确的上下文,并评估模型的回答是否正确。我将在这里以网格形式框架这些内容,以展示使用 RAG 进行评估的简单方法:

如何提升ChatGPT的准确性OpenAI发布最新LLM官方指南-6

图5:RAG 评估示意图

RAG 应用程序可能会在以下两个方面出错:

领域

问题

解决方法

检索

您可能提供了错误的上下文,导致模型无法回答,或提供了过多无关的上下文,淹没了真实信息,导致幻觉。

优化您的检索,包括:- 调整搜索以返回正确结果。- 调整搜索以减少噪音。- 在每个检索结果中提供更多信息。这些只是例子,调优 RAG 性能本身就是一个行业,有许多方法来进行调优,例如 LlamaIndex 和 LangChain 提供的库。

LLM

模型可能获得了正确的上下文,但却产生了错误的结果。

通过改进指令和方法进行提示词工程,如果展示示例可以提高准确性,则添加微调

这里需要注意的是,原则与我们开头的思维模型相同——评估以找出问题所在,并采取优化步骤来解决它。唯一的区别在于 RAG 您现在还需要考虑检索轴。

虽然有用,但 RAG 仅解决了我们的上下文学习问题——对于许多用例,问题在于确保 LLM 能够学习一个任务,以便它能够一致且可靠地执行。为了解决这个问题,我们转向微调。

微调 [14]

为了解决学习记忆问题,许多开发者会在一个更小的、特定领域的数据集上继续训练 LLM,以优化其特定任务。这一过程称为 微调 。

微调通常出于两个原因进行:

提高特定任务的模型准确性: 通过在任务特定数据上训练模型,解决学习记忆问题,展示任务被正确执行的许多示例。

提高模型效率: 以更少的 token 或使用更小的模型达到相同的准确性。

微调过程从准备训练示例数据集开始——这是最关键的一步,因为您的微调示例必须准确地代表模型在实际中看到的内容。

💡 许多客户使用一种称为 prompt 烘焙 的过程,在试点期间广泛记录提示词输入和输出。这些日志可以被修剪成一个有效的训练集,包含真实示例。

如何提升ChatGPT的准确性OpenAI发布最新LLM官方指南-7

图6:微调过程示意图

一旦您拥有了这个干净的集合,您可以通过执行 训练 运行来训练微调模型——根据您用于训练的平台或框架,您可能有可以调优的超参数,类似于其他任何机器学习模型。我们始终建议保持一个持出集,用于在训练后进行 评估 ,以检测过拟合。有关如何构建良好训练集的技巧,可以查看我们微调文档中的 指南 [15] ,以及有关如何准备和调整持出集的更多信息 这里 [16] 。训练完成后,新微调模型可用于推理。

为了优化微调,我们将关注 OpenAI 的模型定制产品中观察到的最佳实践,但这些原则应该适用于其他供应商和开源产品。需要注意的关键实践是:

从提示词工程开始: 从提示词工程中拥有一个坚实的评估集,可以用作基线。这允许您在对基础提示词有信心之前采用低投资的方法。

从小处着手,专注于质量: 在基础模型上进行微调时,训练数据的质量比数量更重要。首先使用 50 多个示例进行评估,然后如果尚未达到准确性需求,并且导致错误答案的问题在于一致性/行为而不是上下文,可以增加训练集的大小。

确保您的示例具有代表性: 我们看到的最常见的陷阱之一是非代表性的训练数据,即用于微调的示例在格式或形式上与 LLM 在生产中看到的稍有不同。例如,如果您有一个 RAG 应用程序,请用 RAG 示例对模型进行微调,以便它不会在零样本情况下学习如何使用上下文。

综合运用 [17]

这些技术可以叠加——如果您的早期评估显示上下文和行为都存在问题,那么很可能您最终在生产解决方案中会同时使用微调和

RAG。这是可以的——这些技术叠加在一起,平衡了各自的弱点。主要的好处包括:

使用微调来 最小化用于提示工程的 token ,因为您可以用许多训练示例来代替指令和 few-shot 示例,以在模型中灌输一致的行为。

使用广泛微调来教授复杂行为

使用 RAG 来 注入上下文 ,如最新内容或任何其他特定上下文,以满足您的用例需求

在语言翻译中使用这些工具

我们将继续基于上述冰岛语纠正示例。我们将测试以下方法:

我们最初的假设是这是一个行为优化问题,因此我们的第一步是微调模型。我们将在这里尝试 gpt-3.5-turbo 和 gpt-4。

我们还将尝试 RAG——在这种情况下,我们的假设是相关示例可能会提供额外的上下文,从而帮助模型解决问题,但这是一个低信度的优化。

微调 [18]

为了为我们的用例进行微调,我们将使用包含 1000 个类似 few-shot 示例的数据集:

以下句子包含可能有错误的冰岛语句子。请尽可能少地更改单词来纠正这些错误。"Hið sameinaða fyrirtæki verður einn af stærstu bílaframleiðendum í heiminum.""Hið sameinaða fyrirtæki verður einn af stærstu bílaframleiðendum heims。"

我们使用这 1000 个示例训练了 gpt-3.5-turbo 和 gpt-4 微调模型,并在我们的验证集上重新运行评估。这证实了我们的假设——两者都取得了显著的性能提升,甚至 3.5 模型的表现也超过了 few-shot gpt-4,提升了 8 分:

运行

方法

Bleu 分数

1

零样本 gpt-4

62

2

3 few-shot 示例的 gpt-4

70

3

用 1000 示例微调的 gpt-3.5-turbo

78

4

用 1000 示例微调的 gpt-4

87

很好,这看起来达到了我们的用例的生产级准确性。然而,让我们测试一下通过为上下文学习添加一些相关的 RAG 示例,我们是否能在我们的管道中挤出更多性能。

RAG + 微调 [19]

我们的最终优化从训练和验证集之外添加了 1000 个示例,这些示例嵌入并放置在向量数据库中。然后我们用 gpt-4 微调模型进行了进一步测试,结果可能有些出人意料:

如何提升ChatGPT的准确性OpenAI发布最新LLM官方指南-8

各调优方法的 Bleu 分数(满分 100)

RAG 实际上 降低了 准确性,从我们的 GPT-4 微调模型下降了 4 分,降至 83。

这说明了一个道理,使用正确的优化工具来解决正确的问题——每个工具都具有一定的优势和风险,我们通过评估和迭代更改来管理这些风险。在我们的评估中观察到的行为以及我们对这个问题的了解告诉我们,这是一个行为优化问题,额外的上下文并不会真正帮助模型。这在实践中得到了验证——RAG 通过在模型已经通过微调有效学习任务的情况下,添加额外的噪音来困扰模型。

我们现在拥有一个接近生产准备的模型,如果我们想进一步优化,可以考虑更广泛和更多样化的训练示例。

现在您应该对 RAG 和微调有所了解,并了解何时适合使用每种方法。使用这些工具时,您还需要注意的是,一旦引入它们,我们在迭代速度上会有所折衷:

对于 RAG,您需要调优检索以及 LLM 的行为

使用微调时,您需要重新运行微调过程并管理训练和验证集

这些过程可能会耗时且复杂,当您的 LLM 应用变得更复杂时,可能会引入回归问题。如果您从本文中只有一个收获,那就是在达到准确性目标之前尽可能多地从基本方法中挤出准确性——让您的准确性目标成为目标,而不是因为 RAG + 微调被认为是最复杂的方法而急于使用它们。

生产中“足够好”的准确性 [20]

优化 LLM 的准确性可能是一场无休止的战斗——使用现成的方法,它们不太可能达到 99.999% 的准确性。本节讨论何时达到足够的准确性——如何放心地将 LLM 投入生产,以及如何管理推出的解决方案的风险。

我发现将这一点放在 业务 和 技术 背景下思考很有帮助。我将描述管理这两方面风险的高级方法,并使用一个客户服务帮助台的用例来说明如何在这两方面管理风险。

业务 [21]

对于业务而言,在经历了基于规则的或传统机器学习系统,甚至是人类的相对确定性之后,很难信任 LLM。一个失败是开放式且不可预测的系统是一个难以解决的问题。

我在这里看到的一种成功方法是客户服务用例——为此,我们进行了以下操作:

首先我们确定主要的成功和失败案例,并为它们分配估计成本。这使我们能够清晰地表达基于试点性能的解决方案可能带来的节省或成本。

例如,一个由 AI 解决的案例,之前是由人类解决的,可能节省 $20 。

在不应该升级的情况下,某人被升级到人类处理可能会花费 $40

在最坏的情况下,客户对 AI 感到非常沮丧,他们流失了,可能会花费我们 $1000 。我们假设这种情况发生在 5% 的情况下。

事件

价值

案例数

总价值

AI 成功

+20

815

$16,300

AI 失败(升级)

-40

175.75

$7,030

AI 失败(流失)

-1000

9.25

$9,250

结果

+20

盈亏平衡准确性

81.5%

我们还测量了围绕流程的经验统计数据,以帮助我们衡量解决方案的宏观影响。再次使用客户服务示例,这些可能是:

纯粹的人机互动的 CSAT 分数与 AI 的

对人类与 AI 的回顾性评估案例的决策准确性

人类与 AI 的解决时间

在客户服务示例中,这帮助我们做出两项关键决策,通过几个试点获得清晰数据:

即使我们的 LLM 解决方案比我们想要的更多地升级到人类处理,它仍然比现有解决方案带来了巨大的运营成本节省。这意味着即使准确率只有 85%,如果那 15% 主要是早期升级,也可以接受。

在失败成本非常高的情况下,例如欺诈案例被错误解决,我们决定由人类主导,AI 作为助手。在这种情况下,决策准确性统计帮助我们做出决定,我们不放心完全自主。

技术 [22]

在技术方面更为清晰——既然业务已经明确了他们期望的价值和可能出错的成本,您的任务是构建一个能够优雅地处理失败的解决方案,不会破坏用户体验。

再次使用客户服务示例,假设我们有一个在确定意图时准确率为 85% 的模型。作为技术团队,这里有一些方法可以最小化不正确 15% 的影响:

我们可以提示工程模型,让其在不确定时提示客户更多信息,因此我们的首次准确性可能会下降,但在给出两次机会确定意图时可能会更准确。

我们可以为第二线助手提供选项,将其传回意图确定阶段,再次为 UX 提供自我修复的方式,但代价是一些额外的用户延迟。

我们可以提示工程模型,如果意图不明确,则交给人类处理,这在短期内会增加一些运营成本,但从长远来看可能会抵消客户流失风险。

这些决策将反映在我们的 UX 中,使其变得更慢但准确性更高,或者更多的人类干预,反映在上文提到的业务成本模型中。

您现在有了一个方法,可以分解设定准确性目标时涉及的业务和技术决策,这个目标植根于业务现实。

继续向前推进 [23]

这是一个高层次的思维模型,用于思考最大化 LLM 准确性的方法、实现这些目标的工具以及决定生产中“足够好”准确性的方式。您已经拥有了一致地投入生产所需的框架和工具,如果您希望从他人的成就中获得灵感,可以查看我们的客户故事,其中展示了像 摩根士丹利 [24] 和 Klarna [25] 等用例,他们通过利用这些技术取得了成功。

祝您好运,我们期待看到您用这些技术构建的成果!

参考链接

[1]

优化 LLM 的准确性: https://platform.openai.com/docs/guides/optimizing-llm-accuracy/optimizing-llms-for-accuracy

[2]

LLM 优化背景: https://platform.openai.com/docs/guides/optimizing-llm-accuracy/llm-optimization-context

[3]

提示工程: https://platform.openai.com/docs/guides/optimizing-llm-accuracy/prompt-engineering

[4]

优化: https://platform.openai.com/docs/guides/optimizing-llm-accuracy/optimization

[5]

提示工程指南: https://platform.openai.com/docs/guides/prompt-engineering

[6]

Icelandic Errors Corpus: https://repository.clarin.is/repository/xmlui/handle/20.500.12537/105

[7]

评估: https://platform.openai.com/docs/guides/optimizing-llm-accuracy/evaluation

[8]

ROUGE: https://aclanthology.org/W04-1013/

[9]

BERTScore: https://arxiv.org/abs/1904.09675

[10]

GPT-4: https://arxiv.org/pdf/2303.16634.pdf

[11]

这个手册: https://cookbook.openai.com/examples/evaluation/how_to_eval_abstractive_summarization

[12]

理解工具: https://platform.openai.com/docs/guides/optimizing-llm-accuracy/understanding-the-tools

[13]

检索增强生成(RAG): https://platform.openai.com/docs/guides/optimizing-llm-accuracy/retrieval-augmented-generation-rag

[14]

微调: https://platform.openai.com/docs/guides/optimizing-llm-accuracy/fine-tuning

[15]

指南: https://platform.openai.com/docs/guides/fine-tuning/analyzing-your-fine-tuned-model

[16]

这里: https://platform.openai.com/docs/guides/LINK_HERE

[17]

综合运用: https://platform.openai.com/docs/guides/optimizing-llm-accuracy/all-of-the-above

[18]

微调: https://platform.openai.com/docs/guides/optimizing-llm-accuracy/fine-tuning

[19]

RAG + 微调: https://platform.openai.com/docs/guides/optimizing-llm-accuracy/rag-fine-tuning

[20]

生产中“足够好”的准确性: https://platform.openai.com/docs/guides/optimizing-llm-accuracy/how-much-accuracy-is-good-enough-for-production

[21]

业务: https://platform.openai.com/docs/guides/optimizing-llm-accuracy/business

版权声明:
作者:clash
链接:https://www.shadowrocket6.top/190.html
来源:Shadowrocket官网
文章版权归作者所有,未经允许请勿转载。

THE END
分享
二维码
< <上一篇
下一篇>>