关键词:大语言模型
,Prompt提示工程
前言
Prompt提示语是使用大模型解决实际问题的最直接的方式,本篇介绍Prompt提示工程常用的技巧,包括Zero-Shot、Few-Shot、CoT思维链、Least-to-Most任务分解。
内容摘要
- Prompt提示工程简述
- Prompt的一般结构介绍
- 零样本提示Zero-Shot
- 少样本提示Few-Shot
- 思维链提示CoT
- 任务分解Least-to-Most
Prompt提示工程简述
Prompt提示语,指的是设计和编写提示文本,以引导模型生成符合特定要求的语言输出。Prompt能够帮助语言模型回忆起自己在预训练时学习到的东西,合适的Prompt对于提示学习的效果至关重要,因此产生了提示工程专门研究如何设计Prompt,目的是找到最优的提示语,使得模型的性能和效率达到最高,以适应不同的任务和应用场景。
对各种模型设计不同的PromptPrompt的一般结构介绍
Prompt的一般结构包含4个部分,任务指令、背景信息、附加内容、输出要求
- 任务指令:明确给到大模型需要执行的任务,比如扮演角色身份,给出内容方案
- 背景信息:提供任务和上下文背景,从而生成更相关的输出
- 附加内容:额外补充信息,包括领域知识库,参考样例等等
- 输出要求:指定输出的格式,比如JSON格式,限定输出在某几个选项内,限制不允许编造成分等等
Prompt中并非要包含以上所有部分,可以根据需要自行组合搭配。举个例子,需要让大模型输出一个去苏州旅游的攻略,Prompt结构如下
Prompt结构式例零样本提示Zero-Shot
零样本提示Zero-Shot,是指没有任何相关数据的参照下,直接对模型进行提问,用自然语言指令让模型输出内容完成一个任务,例如用通过对话模型生成式地完成情感分类任务
通过Zero-Shot进行情感分类再例如完成命名实体识别的任务,提取出文本中的关键要素,从提取结果来看完全正确且没有遗漏,但是格式并没有按照要求的JSON来
Zero-Shot完成命名实体识别Zero-Shot这种方式最为方便,但是由于没有任何相关数据给到模型参照,所以模型可能难以彻底按照任务要求和输出要求进行文本生成,尤其是对于难以用自然语言来描述清楚的任务。
少样本提示Few-Shot
少样本提示Few-Shot是指,在用自然语言描述的任务中加入少量相关的任务例子,使得模型更加充分地理解任务的目标和输出要求,增加任务完成的准确性,还是以情感分类为例,对模型进行Few-Shot如下
通过Few-Shot进行情感分类同理针对命名实体识别,也可以给到一些例子,Few-Shot如下
Few-Shot完成命名实体识别提问模型生成内容如下,模型提取得非常准确,并且模型参照了给的例子进行了JSON格式的输出,而在Zero-Shot中并虽然提示语句中要求了JSON格式,但并没有按照JSON生成,由此可推测Few-Shot下模型会更容易地参照用户的需求进行文本生成
Few-Shot完成命名实体识别结果特别的,当给到的参考例子只有一条时,此时属于One-Shot提示。
思维链提示CoT
思维链提示(Chain-of-Thought,CoT),常用于推理规划类问题,包括逻辑推理,数学推理,常识推理等,相比于语言语境能力,推理问题对于大语言模型而言更难,因为对于推理问题,大模型的训练是把推理结果作为下一个词直接预测,而忽略了中间的思考过程,而人类在面对推理问题时往往是逐步求解,最后得到任务的答案。思维链提示的目的就是让明确告诉模型先输出中间过程,再逐步运算生成答案。
以一个简单的数学题问大模型(Chatglm2-6B),让模型计算出最后的结果,采用直接提问的方式,问题和回答如下
很明显,模型回答的是错误的,正确答案应该是11,我们采用思维链提示的方式再试一次,具体是给到模型一条类似的题目,并且告诉模型解题步骤,解题步骤包括中间过程和最终的结果,使得对该类问题模型采用这种逐步的思考方式进行回答,提问和回答如下
思维链的方式提问推理问题显然模型回答正确,且逻辑清晰,中间过程和结果都回答得很好。
除了给到参考解题例子之外,研究人员提出零样本思维链提示,只需要在问题结尾加上”让我们逐步思考“这个魔法语句,模型就能够实现逐步推理,我们以这种方式进行提问试验一下
同样得到了正确的结果,显然思维链提示CoT对于推理问题比直接提问更有效。
任务分解Least-to-Most
任务分解,也被叫作由少到多提示(Least-to-Most),旨在当面对复杂提问时,将其转化为多个容易解决的子问题,并逐一解决它们得到最后的结果。任务分解的方式和思维链类似,区别在于任务分解会进行多轮问答,并且之前子问题的回答会加入到下一次的提问中,相当于逐步填充问题的上下文,降低复杂多步推理问题的难度。
我们同样先做对比,对模型直接提问一个计算题,问题和回答如下
很明显答案错误,正确答案应该是5桶。下面我们采用任务分解的形式,首先提问模型解决这个问题需要先完成哪个子问题
回答子问题是什么模型说了一大堆,第一句话就已经回答出了子问题,即要先解决购物劵总额的问题,我们将这个问题加入到原始提问中,让模型先回答出这个子问题的答案
回答子问题的答案子问题回答正确,购物劵总额是500元,下一步就可以直通最终问题了,我们将子问题和子问题的答案拼接到原始提问上,形成最终的Prompt
image.png最终模型回答为5桶,回答正确,且模型回答的逻辑清晰完美,印证了任务分解这种方式能够提高对复杂问题的推理准确性,全文完毕。
网友评论