Prompt Engineering

2023-10-22 18:00:49 浏览数 (1)

在这里,我们讨论了几个撰写提示(输入模型的内容)的原则和技巧,这些提示将帮助您为您的任务获得最佳的生成结果。选择正确的温度也会对生成质量产生很大的影响,我们会在这里单独讨论温度。

主要的原则:

我们发现,在设计我们的模型的提示时需要牢记两个主要的想法。

1. 提示将引导模型生成有用的输出。

例如,如果您需要一篇文章的摘要,足够训练的大型语言模型可以在您的引导下生成摘要:

这个提示有两个部分:您想要进行摘要的文本以及任务描述。

2. 尝试多种提示表述以获得最佳的生成结果

在使用generate时,尝试不同的提示对于解决问题非常有用。即使看起来类似的不同提示表述也可能导致生成结果截然不同。这可能是因为我们的模型已经学习到这些不同的提示表述在不同的上下文和用途中使用,因此会产生不同的结果。下面我们将给出一些我们发现在不同任务中特别有效的示例。 以摘要为例,如果使用“In summary”无法得到好的生成结果,我们可能需要尝试使用“To summarize in plain language”或“The main point to take from this article is that”。

此外,您还可以在playground中使用可能性特征来查看模型是否存在特定的单词、短语或结构理解困难的问题。但是,请记住,序列开始时的标记平均可能性总是很高的。模型可能会将首次引入新概念或名称的可能性降低,但一旦它看到它一次,就可以轻松地在生成中使用它。您还可以使用可能性功能查看是否有任何拼写或标点符号会导致记号化问题。

3.描述任务和一般情境

通常在任务描述中包含额外的组成部分会很有用,自然而然地,这些组成部分往往会在我们要处理的输入文本之后。

为模型提供足够的上下文。例如,在文章之前更详细地描述摘要任务。

示例:以自然语言塑造我们需要模型完成的任务,可以使用输入文本之前和之后的文本。

让我们通过另一个示例来考虑这个问题的更多方面。假设您想要使用我们的模型通过自动生成合理的回复来协助您的客户满意度部门(注意:生成结果不会发送给客户,这只是一种模拟)。

一个客户向您的公司提出了以下问题:

代码语言:javascript复制
代码语言:javascript复制

如何设计一个提示语以便与顾客进行交互时得到有用的生成呢?首先,我们需要让我们的模型知道这个问题的一般背景,并且明确指出我们将在提示语中包含什么内容:

代码语言:javascript复制
This is a conversation between a customer and a polite, helpful customer service agent.
Question of the customer: Hi, I'd like a refund for the coffee maker I ordered. Would that be possible?
代码语言:javascript复制

好的,我们已经告诉模型可以期望什么,并清楚地表明我们的查询是针对顾客提出的问题。接下来,让我们展示模型我们想要给顾客的回答的开头部分。

代码语言:javascript复制
Response by the customer service agent: Hello, thank you for reaching out to us. Yes,
代码语言:javascript复制

请注意,我们已经明确表示下一个句子是对问题的回答,它来自客户服务代理,并且我们希望给出一个积极的答案。将这一切结合在一起,我们得到以下提示:

代码语言:javascript复制
This is a conversation between a customer and a polite, helpful customer service agent.
Question of the customer: Hi, I'd like a refund for the coffee maker I ordered. Would that be possible?
Response by the customer service agent: Hello, thank you for reaching out to us. Yes,

在提示语中包含特定的组件(例如输入和输出指示器)有助于向模型描述所需的任务,特别是在提示语中包含多个示例时(如下图所示)。

将其多次输入到我们的中型模型中,我们得到以下的完成结果:

  • 是的,如果产品未使用并且未打开,我们可以接受退货。
  • 是的,我们很乐意退还您的购买款项。但是,我们需要您将物品退回到我们的商店以获得全额退款。
  • 是的,我们可以这样做。请给我们发送一条消息,包括您的姓名、电话号码和退款原因。我们将尽快回复您。
  • 请注意,即使这只是一个简化的示例,我们也可以从基线模型中获得可信的完成结果,而且只使用了很少的客户服务交互!通过对特定问题和请求的处理示例进行微调,这可以进一步改进。

4. 展示给模型您希望看到的内容

将示例添加到提示中是实现良好生成的关键方式之一。示例向模型展示了我们所针对的输出类型。

请提供您想要的一些生成类型的示例。这被称为少样本学习。我们来看一个例子。假设您想要使用我们的模型来分类电影评论是积极的、消极的还是中性的。想象一下,您将以下提示输入到我们的模型中:

代码语言:javascript复制
Review: "I really enjoyed this movie!"
This sentiment of this review is
代码语言:javascript复制

根据此提示,我们的 Medium 模型实际生成了以下内容:

代码语言:javascript复制
This sentiment of this review is apt, considering the movie's plot,
代码语言:javascript复制

显然,我们的模型看到可能是我们不希望得到的生成类型。

在提示中,示例应包括要模拟的示例输入和输出。

将所有这些内容结合在一起,将其馈入Medium Generation模型,我们可靠地获得积极的生成。

代码语言:javascript复制
This is a movie review sentiment classifier.
Review: "I loved this movie!"
This review is positive.
Review: "I don't know, it was ok I guess.."
This review is neutral.
Review: "What a waste of time, would not recommend this movie."
This review is negative.
Review: "I really enjoyed this movie!"
This review is
代码语言:javascript复制

这个提示的一个更简单的版本可以这样展示:

一个将提示的各个组成部分结合起来的示例。我们还可以在每个示例中重复任务描述,以强调对模型的指示。

少样本生成通常会在我们更大的模型中更好地工作。您可以使用可能性终点来查看模型对示例中给出的正确答案的不确定性。

如果命令格式不起作用,请尝试将其结构化为散文。与生成模型进行直观互动的一种方式是向模型发出有关所需生成类型的命令,例如:列举艺术职业的清单。但是,由于我们的模型看到的大部分文本都是互联网文章,有时会误解这种写作方式。尝试将命令重新表述为散文的方式,以使模型产生所需的输出:

代码语言:javascript复制
The table lists the following professions as artistic careers:
1. Painter 2.
代码语言:javascript复制

总的来说,您可能希望尝试不同的写作风格,直到找到适合您的东西。例如,写新闻文章、博客文章或对话的风格。

案例

在这里,我们将展示如何应用上述原则来完成两项具体任务:根据给定的文章生成关键词和根据少数已有示例生成更多示例。

生成关键词:假设我们有一些文本段落,希望自动标记其中最相关的概念。

通过结合上述技术,我们可以实现这一目标!首先,在提示语的开头说明此提示的设定。然后,我们展示模型两个要完成的示例:用标签“约翰·冯·诺依曼”标记来自约翰·冯·诺依曼维基百科页面的段落,用标签“女权主义”标记来自女权主义维基百科页面的段落。最后,我们向模型提供来自 Python 维基百科页面的一段。

代码语言:javascript复制
This is a bot that automatically finds the most important keyword for a given text passage.

Text: "John von Neumann (/vɒn ˈnɔɪmən/; Hungarian: Neumann János Lajos, pronounced [ˈnɒjmɒn ˈjaːnoʃ ˈlɒjoʃ]; December 28, 1903 – February 8, 1957) was a Hungarian-American mathematician, physicist, computer scientist, engineer and polymath. Von Neumann was generally regarded as the foremost mathematician of his time[2] and said to be "the last representative of the great mathematicians".[3] He integrated pure and applied sciences."

Most important key word: "John von Neumann"

Text: "Some scholars consider feminist campaigns to be a main force behind major historical societal changes for women's rights, particularly in the West, where they are near-universally credited with achieving women's suffrage, gender-neutral language, reproductive rights for women (including access to contraceptives and abortion), and the right to enter into contracts and own property.[9] Although feminist advocacy is, and has been, mainly focused on women's rights, some feminists argue for the inclusion of men's liberation within its aims, because they believe that men are also harmed by traditional gender roles.[10] Feminist theory, which emerged from feminist movements, aims to understand the nature of gender inequality by examining women's social roles and lived experience; feminist theorists have developed theories in a variety of disciplines in order to respond to issues concerning gender."

Most important key word:  "Feminism"

Text: "Guido van Rossum began working on Python in the late 1980s, as a successor to the ABC programming language, and first released it in 1991 as Python 0.9.0.[31] Python 2.0 was released in 2000 and introduced new features, such as list comprehensions and a garbage collection system using reference counting and was discontinued with version 2.7.18 in 2020.[32] Python 3.0 was released in 2008 and was a major revision of the language that is not completely backward-compatible and much Python 2 code does not run unmodified on Python 3."

Most important key word:
代码语言:javascript复制

这个提示可靠地生成“Python”作为答案,有时还会返回另一个可信选项“Guido van Rossum”。

示例生成:常见的任务是让模型根据某些描述生成示例。以以下格式列出提示通常效果良好。

代码语言:javascript复制
This is a list of ideas for blog posts for tourists visiting Toronto:

1. The best sights to see in Toronto
2. My favourite walks in Toronto
代码语言:javascript复制

这将给我们带来类似以下的生成结果:

代码语言:javascript复制
3. An overview of Toronto
4. Toronto events
5. Restaurants in Toronto
6. Shopping in Toronto
7. Travel tips for Toronto
8. Sightseeing in Toronto
9. What to do in Toronto

0 人点赞