前端开发人员使用 GPT-3 的第一步

590 阅读9分钟

今年早些时候,我有幸获得了OpenAI GPT-3 API的测试版。在 2020 年和 2021 年初,我看到很多人围绕这个 API 启动了令人印象深刻的项目,甚至是公司,所以委婉地说它激起了我的兴趣。我想尽快开始使用它并开始试验和构建Twitter 上的一些很酷的人一样。

然而,问题是我不知道从哪里开始,甚至不知道如何处理 GPT-3。当我第一次登录 Playground 时,我只看到一个准系统文本输入和一个充满滑块的工具栏,就是这样😅!因此,我认为这是另一个绝佳机会,可以**编写我在开始时希望拥有的指南,**并分享我为实现目标而采取的步骤以及我在此过程中学到的一切。

在本文中,我们将通过一些交互式小部件 ⚡️一起了解 GPT-3 的基础知识,最重要的是我尝试**构建自己的自定义摘要模型!**最后,我还将指导您如何在操场之外使用 API,以便您拥有开始构建令人惊叹的 AI 驱动应用程序的所有工具🚀。

这篇博文将介绍我构建的简化 GPT-3 提示小部件,以帮助说明 API 背后的一些核心概念。

这些提示是模拟的,不幸的是,我无法在此用例中准时获得使用“真实”GPT-3 API 的批准。但是,这些模拟的 API 响应是在 OpenAI 的操场上生成的,应该仍然对您有所帮助。

这里将展示的所有示例都是由davinci引擎生成的。为了简单起见,我不会在这篇博文中谈论 GPT-3 引擎。这可能是后续文章的一个很好的话题!

什么是 GPT-3?

GPT-3代表Generative Pre-trained Transformer 3是一个由 OpenAI 构建的“文本输入,文本输出”API,它已经在来自互联网的大量不同的文本集上进行了****预训练。它可以将相关文本输出返回到您可能提供的任何文本输入,并且它的 API 使用起来非常简单,因此开发人员可以非常轻松地构建很酷的 AI 驱动的应用程序🤖,而无需 AI 或机器学习背景。

如果你像我一样,上过机器学习课程,或者阅读了一些关于它的文章,当你开始使用 GPT-3 并问自己如何“训练”它时,你可能会感到困惑。

twitter

对此的简短回答是你不能训练 GPT-3(它的名字中有“预训练”是有原因的)。要“告诉” GPT-3 您想要什么输出,您必须使用 OpenAI 团队所称的小样本学习技术,您只需提供几个示例,说明您对给定输入的期望响应。还有其他方法可以通过使用微调来“引导”GPT-3 使其输出更加具体。

如果您现在感到困惑,请不要担心!我们将通过下面的一些例子来分析这两种技术!

使用少量学习

当您第一次登录 OpenAI 时,您会感觉像是在没有太多指导的情况下被扔到了狼群中。你只会有一个大文本框和侧面的一些刻度盘进行调整。

OpenAI playground 的屏幕截图,左侧展示了提示,右侧展示了它的不同设置

该文本框称为提示。您将在此处提供输入,并查看 GPT-3 生成的输出。侧栏中的选项可让您根据需要调整输出:

  • 温度Top P影响输出的“随机性”,0是最确定性的,1是最......让我们说“创造性”😅(如果你喜欢危险的生活,请将其设置为 1)

响应长度可让您设置希望在输出中包含多少“标记”或字符

现在,这就是我们开始所需的全部知识!

正如前一部分提到的,GPT-3 的关键是提供输出示例,以指导它生成我们想要的东西。为了说明这一点,下面的小部件是 Playground 的简化版本,我们希望 GPT-3 在其中生成动物表情符号列表。

首先,我们仅提供一个示例1. 🦁\n,这远远不足以让 API 知道如何处理此输入。试着按下Submit按钮,你会发现我们离得到我们想要的还很远。然后单击切换按钮并Submit再次单击以查看添加更多示例时会发生什么。

您可以看到,当我们仅提供一些示例(例如1. 🦁\n2. 🐢\n3. 🦄\n4. 🐶\n5. 🐰输入)时,我们会得到更准确的输出。这就是 GPT-3 API 的优势。不需要用户方面的培训,只需几个例子,你就可以得到一些非常令人印象深刻的结果

最重要的是,您还可以通过更改操场的某些设置来根据自己的喜好调整此输出。在下面的视频中,您可以看到,当我在同一个示例中调整温度设置时,温度越高,结果就越出乎意料。

1.00

关于其他选项:

我不会详细介绍操场上的所有可用选项,因为:

  • 我没有充分利用它们,也没有完全了解它们
  • 开始时不一定需要它们,但一定要使用它们,看看它们如何影响您的输出!

您可以在OpenAI 的专用文档 中找到有关Playground选项的更多信息。

即时设计

在我们刚刚看到的例子中,GPT-3 生成的输出确实很有希望,但感觉有点不可控:只有在我们达到最大响应长度时才会停止生成。这意味着 GPT-3 可能会停止在句子中间生成输出,这在处理文本语料库时可能会出现问题。

我使用 GPT-3 的最初目标是构建一个摘要模型,我可以将自己博客文章中的文本作为输入传递,并获得一个总结的单行句子。所以,不用说让它在句子中间停止生成是......烦人的😅。

这就是提示设计的用武之地!

要设计提示,您可能需要考虑**为输入和输出添加前缀,**以帮助 GPT-3 区分它们。对于我的总结模型,我选择在我的输入文本(我希望总结的博客文章的段落)前input:加上summary:.

input: Something that originally caught my attention with Gatsby was its use of GraphQL. It became more of a curiosity over time honestly. While I'm sure it makes sense for many sites at scale (e-commerce, bigger and more complex publications), at least to me the GraphQL felt like an extra level of complexity that felt unnecessary. The more I iterated on my blog, the more the technical choice of GraphQL felt unjustified (for my use-case at least), building data sources felt way more complicated than it should have been.

summary:

最重要的是,playground 为您提供了在生成输出时考虑这些前缀的设置:

  • 添加停止序列以在 GPT-3 遇到给定字符串或字符串集时停止生成。我在这里设置为input:.
  • 设置开始文本选项。在我的例子中,我添加了↵summary,因此每次我们提交我们的提示时,我们的提示中将出现的第一件事就是这个字符串,然后是我们总结的输出。
  • 设置重新启动文本选项。生成完成后,我们会自动附加此字符串以准备下一个汇总请求。对于这个实验,我将其设置input:为这是将要汇总的文本的前缀。

OpenAI playground 的屏幕截图,展示了我为停止序列、开始文本和重新启动文本设置的值

OpenAI playground 的屏幕截图,展示了我为停止序列、开始文本和重新启动文本设置的值

在下面的小部件中,点击Submit查看我们在没有任何提示设计的情况下得到了什么样的摘要。然后,只需单击切换按钮即可尝试相同但具有适当提示设计的操作。

1.00

你可以看到:

  • 如果没有适当的提示设计,GPT-3 会停止在句子中间生成输出,甚至有时将先前示例的单词包含在不正确的输出中。
  • 通过适当的提示设计,我们得到了一些“令人满意”的单行句子文本摘要!

当您考虑到获得体面的输出所需的很少时,这是相当令人印象深刻的。这几乎感觉就像魔术一样!✨ 只需要提供一些示例作为输入和适当的提示设计。

您可以前往OpenAI 的完成文档阅读有关提示设计的更多信息并查看更多示例。

尽管看到这个总结提示的工作很令人满意,但还有一个问题😬:它需要大量的示例,对于每个请求,才能表现良好。我的朋友,这在规模上花费了很多钱,尤其是当您考虑OpenAI 的每代币定价模型时

微调

我们在前面的示例中已经看到,在某些用例中,我们需要它进一步推动少样本学习,例如:

  • 高质量结果的必要性,因此更多的例子,使得请求的运行成本很高,尤其是在规模上。
  • 需要更快的结果,即更低的延迟请求

由于新的微调功能,我们可以获得迄今为止所学技术的改进版本,因此我们不需要为每个请求提供 GPT-3 示例。相反,我们将预先为 API 提供示例(以及很多示例)!

这个微调过程有 3 个主要步骤:

  1. 构建数据集:该数据集需要有很多示例才能表现良好。我们可以在 CSV 文件中提供这些示例,例如包含一个prompt(我们的输入)列和一个相应的completion列。
  2. 准备数据集:需要清理包含我们刚刚创建的示例的文件。OpenAI CLI 提供了一个命令来执行此操作,它还为您提供有关如何格式化数据以获得更好结果的建议。
  3. 创建微调模型:这就像对上一步生成的文件运行一个 CLI 命令一样简单。创建完成后,经过微调的模型将出现在操场上并可以使用!