美文网首页
大模型系列:Prompt提示工程常用技巧和实践

大模型系列:Prompt提示工程常用技巧和实践

作者: xiaogp | 来源:发表于2024-02-13 14:46 被阅读0次

    关键词:大语言模型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,目的是找到最优的提示语,使得模型的性能和效率达到最高,以适应不同的任务和应用场景。

    对各种模型设计不同的Prompt

    Prompt的一般结构介绍

    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桶,回答正确,且模型回答的逻辑清晰完美,印证了任务分解这种方式能够提高对复杂问题的推理准确性,全文完毕。

    相关文章

      网友评论

          本文标题:大模型系列:Prompt提示工程常用技巧和实践

          本文链接:https://www.haomeiwen.com/subject/bdsiodtx.html