ChatGPT 系列教程 - 提问篇:Prompt 的高级概念
在上一篇文章中,我们发现随着不断改进 Prompt ,你就能从 ChatGPT 中得到更好的响应结果。
说白话就是,“你问题问的越好,你得到的答案也就越好”。
这就是 Prompt 的核心理念,为了满足需求不断优化你的提问。
那么今天我们就看一些可以优化提问的进阶技巧。
零样本提示(Zero-shot Prompting)
少量样本提示(Few-shot Prompting)
思维链(COT)提示(Chain-of-Thought Prompting)
零样本CoT(Zero-shot CoT)
自洽性/自一致性(Self-Consistency)
生成知识提示(Generate Knowledge Prompting)
零样本提示(Zero-shot
Prompting)
在 ChatGPT 的前世今生中,我们了解到 GPT 2 提出了 zero-shot 的概念,也就是不需要微调,不需要提供任何示例样本也可以直接通过提问来让模型解决相应的任务。这是因为 GPT 模型本身就通过了大量数据进行了训练。
![](https://pic4.zhimg.com/80/v2-d2a085ac163dabfaaf697f570aa05707_720w.webp)
比如上图的提问中,我没有提供任何示例告诉模型什么是消极,什么是积极,模型本身依然可以直接对文本进行情绪分析,这就是 zero-shot 的能力,而如果你的任务光靠 zero-shot 无法实现或者效果不理想,那么你就需要更进一步给模型提供少量示例,这个就叫做 Few-shot
少量样本提示(Few-shot
Prompting)
虽然 ChatGPT 光通过 zero-shot 零样本的能力就已经很强大了,但如果你的任务需求比较复杂,直接使用 Zero-shot 不一定能满足需求。
这时候就应该使用 few-shot 少量样本提示,相当于在 Prompt 中给问题提供一个 Context 上下文,在上下文里面给模型提供示例,这个示例的作用并不是让模型去学习,因为光靠几个示例是完全不够学习的。
这几个示例的作用实际上是引导,引导模型找到对应的回答方式,从而生成更准确的响应。
![](https://pic4.zhimg.com/80/v2-1df0863993a4cc2051a1bc10ea91e18f_720w.webp)
这种少量样本提示的方式,用途很多,不光是可以按照指定格式和风格生成文字,还可以用于做分类,提取等我们上一篇学习到的各种基本任务。
如果我们只提供一个样本示例,就叫做 one-shot ,而随着我们提供的样本示例越多,模型生成的准确性也会越高。因此你可以先尝试使用一个示例,效果不好再逐步增加更多示例样本。
如果我们是使用 few-shot 做分类任务,这个时候你需要在示例中给每段文字打上不同的标签。
另外如果你想让模型的性能更好,这些示例最好是从真实场景中提取出来的,并且不同标签也要随机分布,比如你用来识别情绪的示例,你总共提供了10个示例,其中9个都是消极,只有1个是积极的标签,那么效果肯定是不够好的。
小样本提示的局限性
few-shot 虽然解决了 zero-shot 的问题,能够适用于分类等许多基本任务,但如果遇到了需要推理的复杂任务时,few-shot 就无能为力了。
因为模型无法从少量样本中学习到完整的推理过程。
这时候就要引申出另外一个概念 - 思维链提示 - CoT (Chain-of-Thought Prompting)
思维链(COT)提示(Chain-of-Thought
Prompting)
通常涉及到推理的复杂任务,并不是可以一步直接得到答案的,中间会有很多的计算和推理过程。
当我们让 ChatGPT 回答这些推理问题时,并没有给模型足够的思考空间,他没有草稿纸去进行计算。
所以我们在给到模型提供示例时,不要只给一个答案,而是要把解题思路也给到模型,这样的话模型学习到的效果会更好。
比如下图,当我让 ChatGPT 从一堆数字中挑出奇数和偶数时,ChatGPT 的回答出现了错误,正确答案是 6 个奇数,4个偶数。
![](https://pic4.zhimg.com/80/v2-ccdf82231e1a5688fe5332c5195652cf_720w.webp)
出现错误的原因是在于缺少推理过程,我们自己在面对这样的问题时都没法直接一眼得到答案,而是需要心算或者在草稿中进行计算。
这时候要想解决问题,一个最简单的方式叫做 Zero-shot CoT 零样本思维链。
也就是我们不给 ChatGPT 示例,让他自己一步一步思考。
![](https://pic2.zhimg.com/80/v2-58783695cf733509204bc5d8b3526f49_720w.webp)
通过上图我们可以看出来,在没有给示例的情况下,只是加上一句“请一步步思考”。ChatGPT 就能在输出结果中返回他的思考方式,并得到最终的结果。
类似的示例还有很多
![](https://pic2.zhimg.com/80/v2-6b5d0fc2327098ee27af9d910ebe2309_720w.webp)
而如果问题更加复杂,零样本思维链得到的结果还是错误的。
那就需要提供几个示例,而这时候提供的示例不光是给一个结果,还要给到一个思考的过程作为示例,相当于把自己的思维过程传达给 AI,让 AI 也用这个思路来分析问题,最终得到所需的答案。
这里我实在是找不到 ChatGPT 通过一步步思考还回答不出来的问题(原因是现在 ChatGPT 使用的模型已经对这种逻辑推理问题有很大进步了),只能是给你们放一张示例图片了。
相当于你要把解题思路也作为 Prompt 示例的一部分,而不光是给它一个答案。
![](https://pic3.zhimg.com/80/v2-0e34aca0474b3f759a6491e8ae668446_720w.webp)
CoT 变种
如果你发现这样还是不能解决问题。
那还可以更进一步的对 Prompt 进行优化 - 这些优化的方法叫做 CoT 变种。
自洽性(Self-Consitency)
比如可以让 ChatGPT 产生多个思维链,也就是多个推理路径,最终选择一个一致性最高的答案。
这种方法叫做 Self-Consitency 自洽性。
![](https://pic2.zhimg.com/80/v2-7bd97bf86e1fb534dc222bf35a42ad2d_720w.webp)
提出子问题(Self-Ask)
还有时候中间的推理过程比较复杂,这时将问题拆解也是一种解决方案。
如果你不知道如何拆解问题,可以让 ChatGPT 自己根据问题提出子问题。
这种方法叫做 Self-Ask 提出子问题。
如下图所示,首先给一个示例,在示例中提供一个简单的带有子问题的例子,然后再问实际的问题。
这时模型就会把实际的问题拆解成子问题,并进行解答。
![](https://pic4.zhimg.com/80/v2-6f0d310f530443e5250315a541ea773f_720w.webp)
生成知识提示(Generate
Knowledge Prompting)
还有很小的情况下-我们如何让模型思考,模型都没法解决我们的问题。
因为模型本身可能本身缺少解决问题的背景知识,或者模型想不到要用什么背景知识。
如果是前者,那只能是我们主动通过上下文 Context 的方式把背景知识直接添加到 Prompt 中再让模型去回答。
而如果是后者,则可以先给模型一些示例来让模型自己去生成对应问题的背景知识,这个技巧叫做 【Generate Knowledge Prompting 生成知识提示】
这样有了背景知识后,再把生成后得到的背景知识添加到 Context 中向模型提问,这样模型因为有了背景知识自然就能准确回答我们的问题。
举例如下:
比如我希望知道高尔夫比赛的得分是不是谁高谁好。
我直接问 ChatGPT , 他回答的前后矛盾。
![](https://pic4.zhimg.com/80/v2-3003cdab831cf2458d1c533b4a3e425f_720w.webp)
这个时候我让一步一步思考也没用,回答的还是不对。
![](https://pic4.zhimg.com/80/v2-a32e68cbaa5dcdc38f5c82b90fd2c08f_720w.webp)
那就只能给他背景知识了,这时候可以用【生成知识提示】的方法,也就是先给模型一些示例,让模型可以来生成关于高尔夫得分问题的背景知识。
![](https://pic2.zhimg.com/80/v2-cd83c2420b378dbbc4adb2ca6aaaa8d1_720w.webp)
这样有了背景知识,我们再向模型进行相关的问题的提问,模型在回答的时候就会更准确。
![](https://pic4.zhimg.com/80/v2-b8d9c3ac2f09ee3ef2dba9b2ca0e2b63_720w.webp)
除了以上方法外, GPT 模型还可以结合外部工具实现更加复杂的场景需求,甚至是从外部搜索引擎获取信息,但这些工具基本上都是在代码层面展开的,后面有机会在开发篇我们再进行介绍。
总结
今天我们学习到了 Prompt 的进阶内容,包括不需要任何示例也可以让模型回答问题的零样本提示,提供几个示例的少量样本提示,让模型可以拆分步骤进行思考的 CoT 思维链提示,以及让模型自己生成背景知识上下文的生成知识提示。
这些内容都属于 Prompt 的高级知识,在我们解决实际问题时,可以或多或少参考这些高级概念来辅助我们完成实际需求。
Prompt 概念性的内容就介绍到这里,接下来就是实战部分 - 我会挑选几个日常工作和生活中会遇到的实际需求来利用 Prompt 让 ChatGPT 给我们生成满意的答案。
END
我是李祺,微软 Power Platform 方向 MVP ,2014 年进入开发领域,了解微软云全系产品。2020 年以来专注在 Power Platform 领域,曾为微软和多家客户提供售前、培训和实施服务。为普及产品知识,帮助国内用户快速上手。从 2021 年开始创建个人公众号和知乎【李祺 Varman】,目前已提供 200+ Power Platform 中文学习资料,欢迎大家进入公众号菜单【问答社区】进行问题咨询。
posted on 2023-12-21 16:36 ExplorerMan 阅读(82) 评论(0) 编辑 收藏 举报