什么是 prompts, completions, and tokens
Posted 茫茫人海一粒沙
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了什么是 prompts, completions, and tokens相关的知识,希望对你有一定的参考价值。
从字面上看,任何文本都可以用作提示——发送一些文本并取回一些文本。 然而,尽管了解 GPT-3 对随机字符串的处理方式很有趣,但真正的力量来自于理解如何编写有效的提示。
prompts
Prompt是让 GPT-3 做你想做的事情的方式。 这就像编程,但使用简单的英语。 所以,你必须知道你想要完成什么,而不是编写代码,你使用文字和纯文本。
当您编写提示时,要记住的主要事情是 GPT-3 试图找出接下来应该出现的文本,因此包括说明和示例等内容提供了帮助模型找出最佳可能完成的上下文 . 此外,质量也很重要——例如,拼写、不清楚的文本和提供的示例数量都会影响完成的质量。
另一个关键考虑因素是提示大小。 虽然提示可以是任何文本,但提示和生成的完成加起来必须少于 2,048 个标记。 我们将在本章稍后部分讨论标记,但那大约是 1,500 字。
因此,提示可以是任何文本,并且没有像编写代码时那样必须遵循的硬性规定。 但是,有一些关于构建提示文本的指南可以帮助获得最佳结果。
各种不同的Prompts
我们将在整本书中深入探讨提示写作,但让我们从不同的提示类型开始。 这些概述如下:
- Zero-shot prompts
- One-shot prompts
- Few-shot prompts
Zero-shot prompts
Zero-shot prompts 是最简单的提示类型。 它仅提供任务描述或 GPT-3 入门的一些文本。 同样,它实际上可以是任何东西:一个问题、故事的开头、说明——任何东西,但是你的提示文本越清晰,GPT-3 就越容易理解接下来应该发生什么。 以下是生成电子邮件消息的零样本提示示例。 完成将从提示结束的地方开始——在本例中,在 Subject:: 之后
Write an email to my friend Jay from me Steve thanking him for covering my shift
this past Friday. Tell him to let me know if I can ever return the favor.
Subject:
以下屏幕截图来自名为 Playground 的基于 Web 的测试工具。注意原来的提示文字是粗体,补全显示为常规文字:
图 1.1 – Zero-shot prompt 示例
因此,零样本提示只是几句话或对任务的简短描述,没有任何示例。 有时这就是 GPT-3 完成任务所需的全部。 其他时候,您可能需要包含一个或多个示例。 提供单个示例的提示称为一次性提示。
One-shot prompts
One-shot prompts提供了一个示例,GPT-3 可以使用它来学习如何最好地完成任务。 以下是提供任务描述(第一行)和单个示例(第二行)的一次性提示的示例:
A list of actors in the movie Star Wars
1. Mark Hamill: Luke Skywalker
仅仅从描述和一个例子中,GPT-3 就知道了任务是什么以及应该完成它。 在此示例中,任务是创建电影《星球大战》中的演员列表。 以下屏幕截图显示了从此提示生成的完成:
图 1.2 – One-shot prompt示例
One-shot prompt非常适合列表和普遍理解的模式。 但有时您需要的例子不止一个。 在这种情况下,您将使用几次提示。
few-shot prompt
few-shot prompt 提供了多个示例——通常是 10 到 100 个。多个示例对于显示 GPT-3 应该继续的模式很有用。 Few-shot 提示和更多示例可能会提高完成质量,因为提示为 GPT-3 提供了更多可供学习的内容。
下面是生成模拟对话的少量提示示例。 请注意,这些示例提供了一个来回对话,其中包含对话中可能会说的话:
This is a conversation between Steve, the author of the book Exploring GPT-3 and someone who is reading the book.
Reader: Why did you decide to write the book?
Steve: Because I'm super fascinated by GPT-3 and emerging technology in general.
Reader: What will I learn from this book?
Steve: The book provides an introduction to GPT-3 from OpenAI. You'll learn what GPT-3 is and how to get started using it.
Reader: Do I need to be a coder to follow along?
Steve: No. Even if you've never written a line of code before, you'll be able to follow along just fine.
Reader:
在下面的屏幕截图中,您可以看到 GPT-3 继续在提示中提供的示例中开始的模拟对话:
图 1.3 – Few-shot prompt示例
现在您了解了不同的提示类型,让我们看一些提示示例。
Prompts 示例
OpenAI API 可以处理各种任务。 可能性范围从生成原创故事到执行复杂的文本分析,以及介于两者之间的一切。 为了熟悉 GPT-3 可以执行的任务种类,OpenAI 提供了许多提示示例。 您可以在 Playground 和 OpenAI 文档中找到示例提示。
在 Playground 中,示例称为预设。以下屏幕截图显示了一些可用的预设:
图 1.4 – Presets
OpenAI 文档中还提供了示例提示。 OpenAI 文档非常出色,包括许多很棒的提示示例,以及在 Playground 中打开和测试它们的链接。 以下屏幕截图显示了来自 OpenAI 文档的示例提示。 请注意提示示例下方的 Open this example in Playground 链接。 您可以使用该链接在 Playground 中打开提示:
图 1.5 – OpenAI 文档提供提示示例
现在您已经了解了提示,让我们来谈谈 GPT-3 如何使用它们来生成补全。
Completions
同样,完成是指作为提供的提示/输入的结果生成并返回的文本。 您还会记得,GPT-3 并未经过专门训练来执行任何一种类型的 NLP 任务——它是一种通用语言处理系统。 但是,可以使用提示向 GPT-3 展示如何完成给定任务。 这称为元学习。
Meta-learning
对于大多数 NLP 系统,用于指导系统如何完成任务的数据是在训练底层 ML 模型时提供的。 因此,为了改善给定任务的结果,必须更新基础训练,并且必须构建新版本的模型。 GPT-3 的工作方式不同,因为它没有针对任何特定任务进行训练。 相反,它旨在识别提示文本中的模式并通过使用底层通用模型来继续模式。 这种方法被称为元学习,因为提示用于教导 GPT-3 如何生成最佳完成,而不需要重新训练。 因此,实际上,可以使用不同的提示类型(零样本、单样本和少样本)为不同类型的任务对 GPT-3 进行编程,并且您可以在提示中提供大量说明——向上 到 2,048 个代币。 好吧——现在是谈论代币的好时机。
Tokens
当一个提示被发送到 GPT-3 时,它被分解成令牌。 标记是单词的数字表示,或者更常见的是单词的一部分。 数字用于标记而不是单词或句子,因为它们可以更有效地处理。 这使 GPT-3 能够处理相对大量的文本。 也就是说,如您所知,组合提示和生成的补全仍然有 2,048 个标记(大约 1,500 个单词)的限制。
您可以通过估计将在您的提示和结果完成中使用的令牌数量来保持在令牌限制之内。 平均而言,对于英文单词,每四个字符代表一个标记。 因此,只需将提示中的字符数与响应长度相加,然后将总和除以四即可。 这将使您大致了解所需的令牌。 如果您想要了解许多任务需要多少令牌,这将很有帮助。
获取令牌计数的另一种方法是使用 Playground 中的令牌计数指示器。 它位于右下角大文本输入的正下方。 以下屏幕截图中的放大区域显示了令牌数。 如果将鼠标悬停在数字上,您还会看到完成后的总计数。 对于我们的示例,提示 Do or do not。 没有尝试。——尤达大师的名言——使用 10 个标记和 74 个标记完成:
图 1.6 – token count
虽然了解令牌对于保持在 2,048 个令牌限制以下很重要,但理解它们也很重要,因为令牌是 OpenAI 用作使用费基础的东西。 您的帐户可在 https://beta.openai.com/account/usage 获取总体令牌使用情况报告。 以下屏幕截图显示了示例使用情况报告。
图 1.7 – 使用统计
除了令牌使用之外,影响与使用 GPT-3 相关的成本的另一件事是您选择处理提示的引擎。 引擎指的是将要使用的语言模型。 引擎之间的主要区别是相关模型的大小。 较大的模型可以完成更复杂的任务,但较小的模型效率更高。 因此,根据任务的复杂性,您可以通过使用较小的模型来显着降低成本。 以下屏幕截图显示了发布时的模型定价。 如您所见,成本差异可能很大:
问题
ChatGPT与OpenAI Playground 区别
Chat GPT 是一种工具,可让您通过聊天界面与 GPT-3.5 进行实时交互。 您可以通过向它提供提示来使用它来生成文本,它会根据您提供的信息生成文本。
OpenAI Playground 是一种基于 Web 的工具,可让您以更具交互性和灵活性的方式试验 GPT-3 和其他 OpenAI 模型。 它提供了多种选项和设置,您可以使用这些选项和设置来自定义模型的行为,例如模型的大小、输出类型等。
一般来说,如果您只想通过提供提示来快速生成文本,Chat GPT 是一个不错的选择,而 OpenAI Playground 更适合想要尝试不同设置和选项以自定义模型行为的更高级用户。
Chat GPT 使用 GPT 3.5,Playground 使用 GPT 3。但是,Chat GPT 目前处于免费研究预览阶段,您可以免费使用它。 帽子的免费研究预览期过后,您将无法再免费访问该模型。 如果您想继续使用 Chat GPT,则需要注册付费订阅。
Chat GPT 的使用还意味着您的输入和输出将被保存。 所以不要输入个人或敏感信息。
Playground 是一个用户友好的界面,用于与 GPT-3 交互,GPT-3 是 OpenAI 开发的一种基于大规模神经网络的语言生成模型。 另一方面,ChatGPT 是 GPT-3 的较小版本,专为会话语言理解和生成任务而设计。 换句话说,Playground 是使用 GPT-3 的工具,而 ChatGPT 是 GPT-3 的特定版本,针对类似聊天机器人的交互进行了优化。
最后,两者之间的区别在于“Playground”是一个 Playground,而 Chat GPT 是一个独立的应用程序。 一个可以使用参数并查看它如何影响令牌使用和输出性能的空间,因此您可以查看在使用 API 将 GPT 3 实施到您的项目中后要选择的参数。
下面是playground地址,可以自己玩玩
https://platform.openai.com/playground
在关闭中找不到成员
【中文标题】在关闭中找不到成员【英文标题】:Could not find member in closure 【发布时间】:2014-06-04 20:51:02 【问题描述】:我有以下代码。 prompt
是 UIAlertController
。
self.presentViewController(prompt, animated: true, completion:
prompt.textFields[0].becomeFirstResponder()
)
但它给了我这个错误:Could not find member 'becomeFirstResponder'
。
但是,如果我把它放进去就可以了:
self.presentViewController(prompt, animated: true, completion:
let foo = 0
prompt.textFields[0].becomeFirstResponder()
)
为什么当我添加上面这样的无用代码行时错误消失了?
【问题讨论】:
嗯,是的。我是这么想的。我打算为此提交一份错误报告。如果我听到任何消息,我会更新问题。 顺便说一句,出现错误的原因是因为 AnyObject 不知道“becomeFirstResponder”。仍然没有回答为什么 foo 行可以解决这个问题。 @Lucas AnyObject 是从哪里来的?prompt
声明在这段代码的正上方 (var prompt = UIAlertController...
)
@Newbzors 它带有 textFields 数组。由于 textFields 只是一个 NSArray,这意味着它可以容纳任何对象。因此,通过访问该数组的第 0 个索引,它不能推断它是一个 UITextField。同样,这并不能回答为什么 'let foo = 0' 行修复它,我只是说明为什么我认为该行会抛出“找不到成员 'becomeFirstResponder'”错误。
@Lucas 啊,我明白你的意思了
【参考方案1】:
根据 Swift Programming Language 书籍中有关 If 语句和强制展开的部分,
“您可以使用 if 语句来查明可选项是否包含值。如果一个可选项确实有一个值,它的计算结果为真;如果它根本没有价值,它的评估结果为假。 一旦你确定可选项确实包含一个值,你就可以访问它的底层值”
UIAlertController 不必有 textFields,所以因为 textFields
数组是可选的,所以你必须先解开它,然后才能调用数组内的对象上的函数,所以它应该看起来像这样:
self.presentViewController(prompt, animated: true, completion:
if let textFields = prompt.textFields
textFields[0].becomeFirstResponder()
)
【讨论】:
或if let textField = textFields[0]
...这样,如果存在 [0] 元素,您将输入代码块
谢谢你的解释,这对我来说很有意义。无论如何,我向 Apple 报告了一个错误,输入 let foo = 0
不应使错误消失以上是关于什么是 prompts, completions, and tokens的主要内容,如果未能解决你的问题,请参考以下文章
Oracle导出数据中的prompt,set feedback 等是什么意思
Oracle导出数据中的prompt,set feedback 等是什么意思
Oracle导出数据中的prompt,set feedback 等是什么意思
ICLR 2023Diffusion Models扩散模型和Prompt Learning提示学习:prompt-to-prompt