如何让你的ChatGPT更聪明?揭秘Prompt设计技巧

        ChatGPT横空出世之后,大语言模型已成为我们获取信息、解答疑问的得力助手。但当面对复杂多变的问题时,单纯的直接询问往往难以让模型给出期待的答案。这时,精心设计的提示词(prompt)就显得至关重要——这正是prompt engineering的艺术所在。今天,我们将一起深入大语言模型的世界,探索如何巧妙构建prompt,引导它为我们提供更精准、更有趣、更有价值的信息!

Part 1   零样本提示

        首先,让我们从“零样本提示”开始——这是一种无需事先示例,即可使大型语言模型理解和执行任务的技巧。先来看一个例子:

提示

    将文本分类为中性、负面或正面。

    文本:我认为这次假期还可以。

    情感:

输出

    中性

图片
        上面的提示并没有向模型提供任何示例——这就是零样本能力的作用。
       Wei等研究表明指令调整已被证明可以改善零样本学习。指令调整本质上是在通过指令描述的数据集上微调模型的概念。此外,RLHF(来自人类反馈的强化学习)已被采用以扩展指令调整,其中模型被调整以更好地适应人类偏好。这一最新发展推动了像ChatGPT这样的模型。
        然而,当零样本提示不足以产生最佳效果时,我们可能需要向提示中加入一些示例,即转向少样本提示的策略。

Part 2   少样本提示

        虽然大型语言模型展示了惊人的零样本能力,但在使用零样本设置时,它们在更复杂的任务上仍然表现不佳。少样本提示可以作为一种技术,以启用上下文学习,我们在提示中提供演示以引导模型实现更好的性能。演示作为后续示例的条件,我们希望模型生成响应。
        我们可以通过Brown等人在2020年提出的一个例子来演示。在这个例子中,任务是在句子中正确使用一个新词。

提示

        A “whatpu” is a small, furry animal native to Tanzania. An example of a sentence that usesthe word whatpu is:We were traveling in Africa and we saw these very cute whatpus.To do a “farduddle” means to jump up and down really fast. An example of a sentence that usesthe word farduddle is:

输出

        One day when I was playing tag with my little sister, she got really excited and shestarted doing these crazy farduddles.

图片
        我们可以观察到,模型通过提供一个示例(即1-shot)已经学会了如何执行任务。对于更困难的任务,我们可以尝试增加演示(例如3-shot、5-shot、10-shot等)。
        根据Min等人的研究结果,以下是在进行少样本学习时关于演示/范例的一些额外提示:
    • 标签空间和演示指定的输入文本的分布都很重要(无论标签是否对单个输入正确)
    • 使用的格式也对性能起着关键作用,即使只是使用随机标签,这也比没有标签好得多。
    • 其他结果表明,从真实标签分布(而不是均匀分布)中选择随机标签也有帮助。
        让我们尝试一些例子。让我们首先尝试一个随机标签将标签Negative和Positive随机分配给输入)的例子:

提示

        这太棒了!// Negative

        这太糟糕了!// Positive

        哇,那部电影太棒了!// Positive

        多么可怕的节目!//

输出

        Negative

图片
        即使标签随机化,仍然得到了正确的答案。可以看到,提示中保留了格式,也在一定程度上有助于获得理想的回复。通过进一步的实验,我们发现新GPT模型甚至对随机格式也变得更加稳健。例如:

提示

Positive This is awesome!

This is bad! Negative

Wow that movie was rad!

Positive

What a horrible show! —

输出

Negative

图片
        即便格式不一致,模型仍然预测了正确的标签,展示出少样本提示技术的强大之处。然而,少样本提示在处理更复杂的推理任务时仍体现出一定的局限性。可以参考下面这个示例:

提示

      • 这组数字中的奇数加起来是一个偶数:15、32、5、13、82、7、1。

      • A:

输出

是的,这组数字中的奇数加起来是107,是一个偶数。

图片
        显然,模型给出了错误的答案。我们需要更高级的提示工程来规避当前的局限性。
        我们来尝试添加一些示例,看看少样本提示是否可以改善结果。

提示

      • 这组数字中的奇数加起来是一个偶数:4、8、9、15、12、2、1。

      • A:答案是False。

      • 这组数字中的奇数加起来是一个偶数:17、10、19、4、8、12、24。

      • A:答案是True。

      • 这组数字中的奇数加起来是一个偶数:16、11、14、4、8、13、24。

      • A:答案是True。

      • 这组数字中的奇数加起来是一个偶数:17、9、10、12、13、4、2。

      • A:答案是False。

      • 这组数字中的奇数加起来是一个偶数:15、32、5、13、82、7、1。

      • A:

输出

答案是True。

图片
        结果仍为True。这表明,似乎少样本提示不足以获得这种类型的推理问题的可靠响应。当零样本提示和少样本提示不足时,这可能意味着模型学到的东西不足以在任务上表现良好。我们需要开始考虑微调模型或尝试更高级的提示技术。针对这类涉及更多的推理步骤的任务,如果我们将问题分解成步骤并向模型演示,或许会有所帮助。
        思维链(CoT)提示技术的兴起使得解决复杂的算术问题、常识判断和逻辑推理任务变得更加可行。下面,我们就将利用CoT提示技术,进一步挖掘大语言模型的潜能。

Part 3   链式思考(CoT)提示

图片
        Wei等入的链式思考(CoT)提示通过中间推理步骤实现了复杂的推理能力,将其与少样本提示相结合,可以获得更好的结果。

提示

      • 这组数中的奇数加起来是偶数:4、8、9、15、12、2、1。

      • A:将所有奇数相加(9、15、1)得到25。答案为False。

      • 这组数中的奇数加起来是偶数:17、10、19、4、8、12、24。

      • A:将所有奇数相加(17、19)得到36。答案为True。

      • 这组数中的奇数加起来是偶数:16、11、14、4、8、13、24。

      • A:将所有奇数相加(11、13)得到24。答案为True。

      • 这组数中的奇数加起来是偶数:17、9、10、12、13、4、2。

      • A:将所有奇数相加(17、9、13)得到39。答案为False。

      • 这组数中的奇数加起来是偶数:15、32、5、13、82、7、1。

      • A:

输出

        将所有奇数相加(15、5、13、7、1)得到41。答案为False。

图片
        我们可以看到,在提供推理步骤后,模型得到了完美的结果。我们可以尝试提供更少的示例来解决此任务,即仅一个示例似乎就足够了:

提示

      • 这组数中的奇数加起来是偶数:4、8、9、15、12、2、1。

      • A:将所有奇数相加(9、15、1)得到25。答案为False。

      • 这组数中的奇数加起来是偶数:15、32、5、13、82、7、1。

      • A:

输出

        将所有奇数相加(15、5、13、7、1)得到41。答案为False。

图片

Part 4   零样本COT提示

        最近提出的一个新想法是零样本CoT,其中的核心内容是将“Let’s think step by step.”添加到原始提示中。
图片
        我们来尝试一个简单的问题,看看模型的表现如何:

提示

        我去市场买了10个苹果。我给了邻居2个苹果和修理工2个苹果。然后我去买了5个苹果并吃了1个。我还剩下多少苹果?

输出

        11个苹果。

图片
        答案是不正确的!现在让我们尝试使用特殊提示。

提示

        我去市场买了10个苹果。我给了邻居2个苹果和修理工2个苹果。然后我去买了5个苹果并吃了1个。我还剩下多少苹果?

        让我们逐步思考。

输出

        首先,您从10个苹果开始。

        您给了邻居和修理工各2个苹果,所以您还剩下6个苹果。

        然后您买了5个苹果,所以现在您有11个苹果。

        最后,您吃了1个苹果,所以您还剩下10个苹果。

图片
        这一句看似简单的提示,在这个任务中非常有效。当我们无法提供很多示例时,可以通过加入“Let’s think step by step.”来提高模型逐步推理的能力。

Part 4   小结

        在今天的探索中,我们深入了解了大语言模型的prompt engineering,包括零样本提示、少样本提示和思维链提示(CoT)。这三种技术各有所长:零样本提示在数据匮乏时展现其强大的理解能力;少样本提示在可提供有限示例的情况下提高了回应的精确度;而思维链提示则在处理需要多步骤推理的复杂问题时发挥了其独到的优势。
        正是这些技术的巧妙结合与运用,赋予了最新的大语言模型以卓越的适应性和深度,使其能够在不同的交流场合中提供更为精准和深入的互动。随着这些方法的不断完善,我们有理由相信大语言模型将在未来的对话中展现出更加灵活和智能的表现!

 

 

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注