【大模型应用开发极简入门】提示工程二:零样本学习、少样本学习与改善提示效果

news2024/12/23 17:56:25

文章目录

  • 一. 逐步思考:零样本思维链
    • 1. 数学计算推理
    • 2. 注意有效的方面
  • 二. 少样本学习
    • 1. 基于提示词示例的学习
    • 2. 单样本学习
  • 三. 改善提示效果
    • 1.指示模型提出更多问题
    • 2.格式化输出
    • 3.重复指示
    • 4.使用负面提示
    • 5. 添加长度限制

一. 逐步思考:零样本思维链

1. 数学计算推理

我们知道,GPT-4不擅长计算。比如,它无法计算369 × 1235:

prompt = "How much is 369 * 1235?"
chat_completion(prompt)

模型给出的答案是454965,但正确答案是455715。

GPT-4不能解决复杂的数学问题吗?

  • 该模型从左侧开始,通过依次预测答案中的每个标记来给出完整的答案。这意味着GPT-4首先生成最左侧的数字,然后将其作为上下文的一部分生成下一个数字,以此类推,直到形成完整的答案。挑战在于,每个数字都是独立预测的,与最终的正确值无关。
  • GPT-4将数字视为标记,它没有数学逻辑。

后面的文章将探讨OpenAI如何通过插件来增强GPT-4。一个例子是计算器插件(agent),它可用于进行准确的数学运算。

 

提高语言模型的推理能力有一个诀窍。
比如,当要求模型计算369 × 1235时,我们可以看到模型试图一次性直接回答。

  • 考虑到即使是我们自己,也很难在没有纸和笔的情况下计算这个乘法算式,因此我们可以通过提示词鼓励模型进行中间推理。 就像我们使用纸和笔计算一样,如果给模型足够的时间进行推理,它也可以解决复杂的问题。
  • 在提示词的末尾添加“让我们逐步思考”这样的话,已被证明可以使模型解决更复杂的推理问题。

 
这种技术称为零样本思维链策略(zero-shot-CoT strategy),由Takeshi Kojima等人在2022年发表的论文“Large Language Models are Zero-Shot Reasoners”中提出。

 

思维链是指使用提示词鼓励模型逐步模仿推理的技术。

零样本这个术语意味着模型不依赖于特定任务的示例来执行这种推理,它已经准备好根据其一般的训练结果来处理新任务。与我们稍后就会讨论的少样本学习等技术不同,零样本学习试图在不需要特定任务示例的情况下进行泛化。

prompt = "How much is 369 * 1235? Let's think step by step."
chat_completion(prompt)

模型的输出如下所示:

Step 1: Multiply 369 by 5 (the last digit of 1235).
369 * 5 = 1845
Step 2: Multiply 369 by 30 (the second last digit of 1235 is 3,
   so multiply by 3 and add a 0 at the end).
369 * 30 = 11070
Step 3: Multiply 369 by 200 (the third digit of 1235 is 2,
   so multiply by 2 and add two 0s at the end).
369 * 200 = 73800
Step 4: Multiply 369 by 1000 (the first digit of 1235 is 1,
   so multiply by 1 and add three 0s at the end).
369 * 1000 = 369000
Step 5: Add the results from steps 1 to 4.
1845 + 11070 + 73800 + 369000 = 455715
So, 369 * 1235 = 455,715.

模型所用的方法发生了显著的改变。现在它将主要问题分解为更小、更容易管理的步骤,而不是试图直接解决问题。

 

2. 注意有效的方面

尽管提示模型逐步思考,但仍需注意,要仔细评估其回答,因为GPT-4并非绝对可靠。
对于更复杂的算式,比如3695 × 123548,即使使用这个技巧,GPT-4也可能无法算出正确答案。

尽管这个技巧对大多数数学问题有效,但并不适用于所有情况。论文“Large Language Models are Zero-Shot Reasoners”的作者发现,

  • 它对于多步算术问题、涉及符号推理的问题、涉及策略的问题和其他涉及推理的问题非常有效。
  • 然而,它对于模型回答常识性问题没有显著效果。

 

二. 少样本学习

1. 基于提示词示例的学习

少样本学习(few-shot learning)是由Tom B. Brown等人在论文“Language Models Are Few-Shot Learners”中提出的,它指的是LLM仅通过提示词中的几个示例就能进行概括并给出有价值的结果。在使用少样本学习技巧时,你可以给模型提供几个示例,如图所示。这些示例指导模型输出所需的格式。

在这里插入图片描述

在本例中,我们要求LLM将特定的单词转换成表情符号。很难想象如何通过提示词给模型下达这种“指令”。但是通过少样本学习,这变得很容易。给模型一些例子,它将自动尝试复制它们的模式:

在这里插入图片描述

我们得到以下输出消息:

在这里插入图片描述

少样本学习技巧提供了具有目标输出的输入示例。然后,在最后一行,我们提供了想让模型完成的提示词。这个提示词与之前的示例具有相同的形式。模型将根据给定示例的模式执行操作。

我们可以看到,仅凭几个示例,模型就能够复现模式
 

注意:

在提示词中提供示例时,务必确保上下文清晰且相关。清晰的示例有助于模型匹配所需输出格式并解决问题。相反,信息不充分或模棱两可的示例可能导致意外或错误的结果。

 

2. 单样本学习

指导LLM的另一种方法是单样本学习(one-shot learning)。

顾名思义,在单样本学习中,我们只提供一个示例来帮助模型执行任务。尽管这种方法提供的指导比少样本学习要少,但对于简单的任务或LLM已经具备丰富背景知识的主题,它可能很有效。

单样本学习的优点是更简单、生成速度更快、计算成本更低(因而API使用成本更低)。然而,对于复杂的任务或需要更深入理解所需结果的情况,少样本学习的效果可能更好。

请注意,你可以将这些技巧(提示词、零样本、少样本)结合起来使用,以获得更好的效果。开发人员的工作是找到最有效的提示词来解决特定的问题。请记住,提示工程是一个反复试错的迭代过程。

 

三. 改善提示效果

我们已经了解了几种提示工程技巧。采用这些技巧,我们可以引导GPT模型的行为,以使模型给出的结果更好地满足我们的需求。接下来将介绍更多技巧,可以在GPT模型编写提示词时酌情使用。

1.指示模型提出更多问题

在提示词的末尾,询问模型是否理解问题并指示模型提出更多问题。如果你正在构建基于聊天机器人的解决方案,那么这样做非常有效。

举例来说,你可以在提示词的末尾添加如下文本:你清楚地理解我的请求了吗?如果没有,请问我关于上下文的问题。这样一来,当我回答时,你就能够更高效地执行我所请求的任务。

 

2.格式化输出

如果你想要一个JSON输出,那么模型往往会在JSON代码块之前和之后写入输出。如果你在提示词中说输出必须被json.loads接受,那么模型给出的结果可能更好。这种技巧适用于许多场景。

比如,使用此脚本:

prompt = """
Give a JSON output with 5 names of animals. The output must be
accepted by json.loads.
"""
chat_completion(prompt, model='gpt-4')

我们得到以下JSON代码块。

{
  "animals": [
    "lion",
    "tiger",
    "elephant",
    "giraffe",
    "zebra"
  ]
}

 

3.重复指示

经验表明,重复指示会取得良好的效果,尤其是当提示词很长时。基本思路是,在提示词中多次添加相同的指令,但每次采用不同的表述方式。这也可以通过负面提示来实现。

 

4.使用负面提示

在文本生成场景中,负面提示是指通过指定不希望在输出中看到的内容来引导模型。负面提示作为约束或指南,用于滤除某些类型的回答。

对于复杂任务,这种技巧特别有用:当以不同的表述方式多次重复指令时,模型往往能够更准确地遵循指令。

Extract the keywords from the following question: {user_question}.
Do not answer anything else, only the keywords.

没有这个提示词的话,模型往往不会遵循指示。

 

5. 添加长度限制

限制长度通常是不错的做法。如果你只希望模型回答1个词或者10个句子,那么不妨将要求添加到提示词中。
如下例子

  • 指示模型用100个单词生成一篇内容翔实的新闻稿。
  • 利用提示词:“如果你能回答问题,回答ANSWER;如果你需要更多信息,回答MORE;如果你无法回答,回答OTHER。只回答一个词。”

如果没有最后一句话,模型往往会生成句子,而不会遵循指示。

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1814806.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

AI大模型的战场:通用大模型与垂直大模型的对决

引言 随着人工智能技术的不断进步,AI大模型在各个领域的应用也日益广泛。如今,AI大模型的战场正在分化,主要分为通用大模型和垂直大模型两个方向。通用大模型由于其适用范围广泛,在落地场景中占据了较大的优势。而垂直大模型则凭…

python3的基本语法说明三

一. 简介 前面几篇文章简单学习了 python3的基本语法,文章如下: python3的基本语法说明一-CSDN博客 python3的基本语法说明二-CSDN博客 本文继续学习 python3的基本语法。 二. python3 的基本语法 1. 等待用户输入 执行下面的程序在按回车键后就会…

就业班 第四阶段(k8s) 2401--6.11 day5 CICD实践+VPN+LDAP域管理+还有一些云产品

CICD项目实践(扩展) RBAC 角色:role 用户:user 角色绑定:rolebinding 需要自己指定好名称空间,只对某个名称空间有权限 集群角色:clusterrole 集群角色绑定:clusterrolebindin…

[初阶数据结构] 包装类 | 泛型

目录 一. 包装类 1.1 什么是包装类? 1.2 包装类的意义 1.3 基本数据类型与包装类 1.4 装箱 1.5 拆箱 1.6 小总结 二. 泛型 2.1 什么是泛型? 2.2 泛型的意义 2.3 泛型的语法 2.4 泛型的编译 2.4.1 下载插件 2.4.2 分析 2.5 上界 2.6 泛型方法 2.7 小总结 三. 总结 一.…

element-ui将组件默认语言改为中文

在main.js中加入以下代码即可 // 引入 Element Plus 及其样式 import ElementPlus from element-plus import element-plus/dist/index.css// 引入中文语言包 import zhCn from element-plus/es/locale/lang/zh-cn// 使用 Element Plus 并设置语言为中文 app.use(ElementPlus,…

乐鑫ESP32系列SOC技术让设备控制更简单,HMI智能屏方案应用

随着科技的飞速发展,我们的生活方式正在被重新定义。在智能家居领域,人机交互的便捷性和直观性一直是创新的焦点,如今正逐渐成为现实。 乐鑫以其先进的SoC技术,为智能家居行业带来了新的HMI智能屏方案。这一方案不仅集成了高性能…

商用OLED柔性屏,有42、48、55、65和77寸

商用OLED柔性屏在市场上的尺寸选择相对丰富,以下是针对您提到的42、48、55、65和77寸的具体信息: 42寸OLED柔性屏 目前市场上已有42寸的OLED柔性屏产品,如LG的42英寸电视柔性屏OLED,具有可曲直的特性,支持120Hz高刷新…

LogicFlow 学习笔记——1. 初步使用 LogicFlow

什么是 LogicFlow LogicFlow 是一个开源的前端流程图编辑器和工作流引擎,旨在帮助开发者和业务人员在网页端创建、编辑和管理复杂的业务流程和工作流。它提供了一个直观的界面和强大的功能,使得设计和管理工作流变得更加高效和便捷。 官网地址&#xff…

芯品荟 | 会议系统屏驱案例分享

一、产品简介 智能会议系统是一种对声、光、电等各种设备进行集中控制的设备。其可实现对会议过程进行签到、表决、多国语言翻译、现场摄像视像跟踪功能,并对进程中处以发言管理,达到人性化高科技水平,使会议可一键掌控。 系统要做到可方便快…

profiling模型性能分析与优化入门

一、定义 profiler 作用入门pyproftorch.summary/torchinfo 模型参数量分析以及模型可视化profiling 参数分析-模型分析 二、实现 1.profiler 作用:分析模型执行时间,内存占用 CPU/GPU 端Op执行时间统计 CPU/GPU 端Op输入Tensor的维度分析 Op的内存消耗统计 2. 入…

3D开发工具HOOPS如何推动3D打印应用实现数据格式转换、模型可视化?

3D打印技术的发展已经彻底改变了制造业、医疗、建筑和设计等众多领域。这一技术的核心在于其能够将数字模型转化为实物,而这一过程需要强大的软件支持。在这一领域,HOOPS作为一种专业的图形软件开发工具,发挥着至关重要的作用。 本文将深入探…

木板甲醛释放量气候箱法检测 木制品ENF级检测

甲醛释放量气候箱法检测 甲醛释放量气候箱法检测是一种用于评估木制品中甲醛释放量的标准测试方法。这种方法通常涉及将样品放置在一个密闭的气候箱内,模拟一定的温度、湿度和通风条件,然后定期测量箱内空气中的甲醛浓度。通过这些数据,可以计…

【ARM Cache 与 MMU 系列文章 7.5 -- ARMv8/v9 MMU FEAT_XS(XS Attribute)与 FEAT_MTE2 介绍】

请阅读【ARM Cache 及 MMU/MPU 系列文章专栏导读】 及【嵌入式开发学习必备专栏】 文章目录 MMU FEAT_XSXS AttributeXS Attribute 兼容性和影响XS Attribute 应用场景MMU FEAT_MTE2MTE2 主要目的和用途MTE2 工作原理MTE2 特性实现MTE2 注意事项MMU FEAT_XS 在ARMv8架构中,FE…

k8s之HPA,命名空间资源限制

一、HPA 的相关知识 HPA(Horizontal Pod Autoscaling)Pod 水平自动伸缩,Kubernetes 有一个 HPA 的资源,HPA 可以根据 CPU 利用率自动伸缩一个 Replication Controller、Deployment 或者Replica Set 中的 Pod 数量。 (…

docker-compose部署一款老牌apm监控软件-- pinpoint(需定制docker镜像)

一、背景 公司测试环境需要重新部署一套apm监控软件,选择的是我们开发都使用过的pinpoint,当然首选使用docker-compose部署。 可是,在部署的过程中,却遇到了不少问题。 无法直接使用官网提供的docker-compose.yml,需…

ATA-3080C功率放大器在电解液体浸润性测试中的应用

现在的电子设备上的供电电池多为可反复充放电的锂电池,这种在我们日常生活中扮演着重要角色的电池,却有着自燃、爆炸的风险;随着电池在生活中的普及,电池检测相关行业和领域也随之发展。那么功率放大器在电解液体浸润性测试中有什…

Stack详解(含动画演示)

目录 Stack详解1、栈数据结构动画演示2、Stack的继承体系3、Stack的push (入栈)方法4、Stack的pop (出栈)方法5、Stack是如何利用Vector实现栈数据结构的?6、自己实现栈(不借助JDK提供的集合)7、自己实现栈(借助JDK提供的集合)利用 ArrayDeque 实现高性能的非线程安…

深入理解 Vue Router 及其 `router` 和 `route` 变量

深入理解 Vue Router 及其 router 和 route 变量 在使用 Vue.js 进行单页面应用开发时,Vue Router 是一个不可或缺的工具。它使得我们可以轻松地管理应用中的路由,提供了流畅的用户体验。然而,在实际开发中,许多开发者可能会混淆…

在自己的电脑上搭建我的世界Java版服务器

很多朋友,喜欢玩Minecraft,也希望搭建一个服务器,用于和小伙伴联机; 并且,拥有服务器后,即使所有玩家都下线,“世界”依旧在运行,玩家可以随时参与其中,说不定一上线&am…

2. 音视频H264

视频软件基本流程 1.什么是H264 H.264是由ITU-T视频编码专家组(VCEG)和ISO/IEC动态图像专家组(MPEG)联合组成的联合视频组(JVT,Joint Video Team)提出的高度压缩数字视频编解码器标准 H265又名高…