1.概述

在深度学习领域,Prompt(提示语)被广泛应用于自然语言处理任务中,如文本生成、机器翻译和问答系统等。Prompt的设计对模型的性能和生成结果有着重要的影响,因此在实际应用中合理而有效地利用Prompt是提升模型表现的关键策略之一。本篇博客笔者将为大家介绍如何通过反复修改Prompt,优化ChatGPT输出,使其更好、更符合期望。

2.内容

2.1 什么是Prompt

在自然语言处理中,Prompt是指告诉语言模型如何根据示例或指令进行响应的行为。在这一领域,像few-shot、zero-shot和chain-of-thought等不同方法对提升AI模型(如GPT-3.5-Turbo、GPT-4等)的性能至关重要。从适应性和语境理解到逻辑推理和任务特定学习,每种技术都有其独特的优势。在这个框架内,我们探讨了每种提示技术的细微差别,并提供了示例和编码演示,以突显如何使用它们。研究这些方法有助于我们理解AI模型的适应性和潜力,并展示它们在解决各种领域的问题时的表现如何。

2.2 零样本Prompt

零样本Prompt是在没有具体示例的情况下指导语言模型,依赖模型对上下文的本能理解。基于已有知识,模型能够生成相应的理解。

比如:

prompt:
对给定文本执行情感分析,并将其分类为中性、负面或正面。
输入:最近的旅行很棒
输出:正面

截图如下:

在这种情况下,语言模型的任务是进行情感分析,而无需给出特定的训练实例。该模型利用其现有知识来解释和分类所提供文本的情感。这种方法被称为零样本Prompt,因为它依赖于模型固有的上下文理解而不是明确的示例。

2.3 思维链Prompt

在直接深入研究几次Prompt之前,让笔者给大家介绍一系列想法。这将帮助大家理解为什么需要在Prompt中提供示例,尤其是在复杂的场景中。

2.3.1 标准Prompt

问题 1: Sam有 3 台笔记本。她又购买了 4 包笔记本,每包 5 个笔记本。莎拉现在有多少本笔记本?
答案: 23本笔记本
问题 2:篮子里有 30 个苹果。如果午餐用 20 个苹果,另外从市场上买 6 个,篮子里有多少个苹果?
答案:篮子里现在有16个苹果。

模型回答如图所示:

2.3.2 链式Prompt

问题 1: Sam有 3 台笔记本。她又购买了 4 包笔记本,每包 5 个笔记本。莎拉现在有多少本笔记本?
回答:Sam原本有3台笔记本,然后购买了4包笔记本,每包包含5个笔记本。因此,她购买的笔记本总数为:
3+(4×5)=3+20=23
所以,莎拉现在有23本笔记本。 问题 2:篮子里有 30 个苹果。如果午餐用 20 个苹果,另外从市场上买 6 个,篮子里有多少个苹果?
回答:篮子里一开始有30个苹果,午餐用去了20个,然后从市场上又买了6个。篮子里的苹果数量可以通过以下计算得到:
30−20+6=16
所以,篮子里现在有16个苹果。

模型回答如图所示:

思想链(CoT)Prompt意味着通过一系列相互关联的逻辑步骤或思想来指导语言模型。它允许模型逐步思考,考虑问题的不同方面。当我们说复杂推理能力时,我们指的是模型思考错综复杂场景的能力。现在,少量Prompt涉及在Prompt中提供一些示例或实例,以帮助模型更好地理解任务。

因此,将思维链与几次Prompt相结合意味着你可以通过逻辑步骤引导模型,使其能够通过复杂性进行推理,并且我们还可以提供一些示例来增强其理解。这种组合有助于模型处理更复杂的任务,这些任务在生成响应之前需要深思熟虑的推理。

2.4 One-Shot 和 Few Shot 的Prompt

尽管大语言模型可以在没有示例的情况下理解和生成文本(零样本功能),但它们在这种情况下仍难以应对更具挑战性的任务。为了解决这个问题,我们使用了一种称为“Few Shot Prompt”的技术。这涉及在Prompt中为模型提供一些示例或演示,本质上是对其进行一些训练以提高其性能。这些示例充当训练指南,帮助模型学习并在类似情况下生成更好的响应。

One-Shot Prompt:
在一个不远的未来,科技公司推出了一种能够预测人类未来决策的先进算法。一天,一个普通人在他的手机上发现了这个算法,他决定尝试一下。写一段描述他使用这个算法时发生的事情,以及这个经历如何影响了他的生活。 答案:
约翰打开了他的手机,发现了这个神秘的预测算法。好奇之下,他输入了一系列问题,包括生活、职业和关系方面的。算法不仅准确地预测了他的当前状态,还展示了未来几年可能的发展。在使用这个算法的过程中,约翰体验到了一种前所未有的心灵启示,让他重新审视了自己的目标和价值观。这个简单的算法改变了他的生活,让他更有自信地迎接未来。

我们注意到该模型只需一个示例(一次性)即可掌握一项任务。然而,在处理更具挑战性的任务时,我们可以通过尝试更多的示例来探索性能的提高,例如 3-shot、5-shot、10-shot 等。

使用以下三个片段,构建一个故事:

1.在一个未来的城市,人们通过植入式芯片实现了智能增强。
2.突然间,一种未知的数字病毒传播到城市的所有芯片,引发了混乱。
3.一位年轻的黑客天才被选中,试图解决这场数字危机,但她需要与一台旧式人工智能建立联系,寻求帮助。
答案:
在未来城市中,植入式芯片成为人们生活的一部分,使得他们能够获得智能增强。然而,一天,一种神秘的数字病毒侵袭了这座城市,使所有植入式芯片失去了控制,导致社会陷入混乱。
政府决定找到一位能够解决这一危机的黑客天才,于是选择了年轻的技术专家艾莉。艾莉了解到解决这一问题的关键在于与一台旧式人工智能建立联系,因为这些系统相对不受数字病毒的影响。
在经过一番努力后,艾莉成功地与旧式人工智能建立了联系,并共同制定了一个反病毒计划。他们的合作最终挽救了城市,同时也让人们对技术的依赖有了更加深刻的认识。

让我们尝试一下少量的文本情感提示,Prompt如下所示:

这是太棒了!(负面)
这很糟糕!(积极)
哇,那本书太棒了!(负面)
多么可怕的表现啊!(积极)
按照上述格式输出:这甜点真好吃!()

模型回答结果如下所示:

3.代码实现

3.1 Zero Shot Prompt

代码实现如下所示:

from openai import OpenAI
import re
import os
import pandas as pd
client = OpenAI()

逻辑实现:

def sentiment_analysis_example(text):
response = client.chat.completions.create(
model="gpt-3.5-turbo",
messages=[
{
"role": "system",
"content": 'Perform sentiment analysis on the given text: "{text}". Classify it as either Positive, Negative, or Neutral sentiment. Provide the result in JSON format with the following keys: sentiment.'
},
{
"role": "user",
"content": f'Analyze the sentiment of the text "{text}" and categorize it as Positive, Negative, or Neutral. Return the result in JSON format with the key "sentiment".'
}
],
max_tokens=150,
n=1,
stop=None,
temperature=0
) result = response.choices[0].message.content
try:
start_index = result.find('{')
end_index = result.rfind('}') if start_index != -1 and end_index != -1:
result = result[start_index:end_index + 1]
except:
pass
print(result) example_text = "This is fantastic!"
sentiment_analysis_example(example_text)

输出结果:

{
"sentiment": "Positive"
}

在这个例子中,我们使用了一种称为零样本Prompt的方法来要求模型理解文本背后的感觉,即使它没有专门针对该任务进行训练。这显示了该模型在不同情况下的灵活性。我们告诉 GPT-3.5-Turbo 模型弄清楚给定的文本是积极的、消极的还是中性的,而没有事先教它如何做到这一点。模型能正确地表达了“这太棒了!”这句话的情绪是积极的。这证明该模型可以理解文本中的情感,而无需事先进行情感分析训练。

3.2 CoT Prompt

代码实现如下:

from openai import OpenAI
client = OpenAI() response = client.chat.completions.create(
model="gpt-3.5-turbo",
messages=[
{
"role": "system",
"content": "Determine the cost"
},
{
"role": "user",
"content": "Sam has 3 notebooks. She purchases 4 more packs of notebooks, with 5 notebooks in each pack. How many notebooks does Sarah have now?"
},
{
"role": "assistant",
"content": "Sam initial notebooks: 3 notebooks\nNotebooks from the new packs: 4 packs * 5 notebooks/pack = 20 notebooks\nNow, add these two quantities:\n3 notebooks (initial) + 20 notebooks (new packs) = 23 notebooks"
},
{
"role": "user",
"content": "The basket has 30 apples. If 20 apples are used for lunch and an additional 6 are bought from the market, how many apples are there in the basket?"
}
],
temperature=0,
max_tokens=1024,
top_p=1,
frequency_penalty=0,
presence_penalty=0
)
result = response.choices[0].message.content
print(result)

输出结果如下:

Apples in the basket: 30 apples
Apples used for lunch: 20 apples
Apples bought from the market: 6 apples
Now, subtract the apples used and add the apples bought:
30 apples - 20 apples + 6 apples = 16 apples

之前的Prompt涉及一个复杂的问题解决场景,通过一系列计算确定笔记本数量和篮子里的苹果。模型对问题进行了分解,一步一步的解释,并计算出最终的结果。

在后续Prompt中,模型可以参考之前的解决方案来指导其响应。例如,它可以利用解决笔记本和苹果问题所获得的理解来有效地解决类似的问题。这意味着,如果面临与计数项目或执行算术运算相关的新Prompt,该模型可以利用其学到的知识来生成准确而详细的响应,展示其应用所获得的推理技能来解决相关问题的能力。

注意:随着提示的复杂性或大小增加,其相关成本也会增加。

4.总结

每种Prompt技术都具有在利用 GPT-3.5-Turbo 等人工智能模型功能方面不同目的的特点。零样本Prompt突显了模型的适应性和对情境的理解能力。思维链Prompt则在促进透明度和逻辑推理方面发挥作用,有助于解决复杂的问题。另一方面,Few-shot Prompt对于特定任务的学习至关重要,并通过基于示例的训练来提高模型的性能。

综合来看,这些提示技术展示了人工智能模型的多功能性和潜力,为创新应用在各个领域的推广提供了坚实的基础。

5.结束语

这篇博客就和大家分享到这里,如果大家在研究学习的过程当中有什么问题,可以加群进行讨论或发送邮件给我,我会尽我所能为您解答,与君共勉!

另外,博主出书了《Kafka并不难学》和《Hadoop大数据挖掘从入门到进阶实战》,喜欢的朋友或同学, 可以在公告栏那里点击购买链接购买博主的书进行学习,在此感谢大家的支持。关注下面公众号,根据提示,可免费获取书籍的教学视频。

Prompt实战优化的更多相关文章

  1. 2021升级版微服务教程6—Ribbon使用+原理+整合Nacos权重+实战优化 一篇搞定

    2021升级版SpringCloud教程从入门到实战精通「H版&alibaba&链路追踪&日志&事务&锁」 教程全目录「含视频」:https://gitee.c ...

  2. SpringBoot2+WebSocket之聊天应用实战(优化版本)

    背景 之前再SpringBoot2.0集成WebSocket,实现后台向前端推送信息中已经进行过一次demo,而这次的demo更加明确,优化了相关代码,为IM而生 前提 前提当然是导入相关的包,以及配 ...

  3. mysql实战优化之一:sql优化

    1.选取最适用的字段属性 MySQL 可以很好的支持大数据量的存取,但是一般说来,数据库中的表越小,在它上面执行的查询也就会越快.因此,在创建表的时候,为了获得更好的性能,我们可以将表中字段的宽度设得 ...

  4. mysql实战优化之二:limit优化(大表翻页查询时) sql优化

    mysql的表test中有20105119行数据.建立索引:data_status,place_cargo_status 场景1: SELECT id, resource_id, resource_t ...

  5. mysql实战优化之三:表优化

    对于大多数的数据库引擎来说,硬盘操作可能是最重大的瓶颈.所以,把你的数据变得紧凑会对这种情况非常有帮助,因为这减少了对硬盘的访问. 如果一个表只会有几列罢了(比如说字典表,配置表),那么,我们就没有理 ...

  6. mysql实战优化之四:mysql索引优化

    0. 使用SQL提示 用户可以使用use index.ignore index.force index等SQL提示来进行选择SQL的执行计划. 1.支持多种过滤条件 2.避免多个范围条件 应尽量避免在 ...

  7. mysql实战优化之六:Order by优化 sql优化、索引优化

    在MySQL中的ORDER BY有两种排序实现方式: 1.利用有序索引获取有序数据 2.文件排序 在使用explain分析查询的时候,利用有序索引获取有序数据显示Using index.而文件排序显示 ...

  8. mysql实战优化之七:数据库侧配置优化

    对于功能,我们可能知道必须改进什么:但对于性能问题,有时我们可能无从下手.其实,任何计算机应用系统最终队可以归结为: cpu消耗 内存使用 对磁盘,网络或其他I/O设备的输入/输出(I/O)操作. 但 ...

  9. mysql实战优化之八:关联查询优化

    1. 多表连接类型 1. 笛卡尔积(交叉连接) 在MySQL中可以为CROSS JOIN或者省略CROSS即JOIN,或者使用','  如: 由于其返回的结果为被连接的两个数据表的乘积,因此当有WHE ...

  10. mysql实战优化之九:MySQL查询缓存总结

    mysql Query Cache 默认为打开.从某种程度可以提高查询的效果,但是未必是最优的解决方案,如果有的大量的修改和查询时,由于修改造成的cache失效,会给服务器造成很大的开销. mysql ...

随机推荐

  1. 火山引擎 LAS Spark 升级:揭秘 Bucket 优化技术

    更多技术交流.求职机会,欢迎关注字节跳动数据平台微信公众号,回复[1]进入官方交流群 文章介绍了 Bucket 优化技术及其在实际业务中的应用,包括 Spark Bucket 的基本原理,重点阐述了火 ...

  2. 聚焦企业数据生命周期全链路 火山引擎数智平台 VeDI 发布《数据智能知识图谱》

    更多技术交流.求职机会,欢迎关注字节跳动数据平台微信公众号,回复[1]进入官方交流群 近日,火山引擎数智平台(VeDI)正式发布<数据智能知识图谱>(以下简称「图谱」),内容覆盖了包括数据 ...

  3. ImportError: /lib64/libstdc++.so.6: version `CXXABI_1.3.8' not found

    [root@localhost PaddleOCR]# strings /lib64/libstdc++.so.6 | grep 'CXXABI' CXXABI_1.3 CXXABI_1.3.1 CX ...

  4. Django rest_framework使用自定义异常

    完整代码 https://gitee.com/mom925/django-system 在settings.py中配置 REST_FRAMEWORK = { "EXCEPTION_HANDL ...

  5. 悲报, GIF 之父因新冠去世

    今天下午二狗子照常上班摸鱼的时候,突然看到了一则消息,消息说 GIF 的发明人因新冠去世了.作为一个自诩理性的互联网人,二狗子第一反应是看到了一个离谱谣言,可是查看了多方消息后,二狗子难过地发现这是真 ...

  6. Java 并发编程之 JMM & volatile 详解

    本文从计算机模型开始,以及CPU与内存.IO总线之间的交互关系到CPU缓存一致性协议的逻辑进行了阐述,并对JMM的思想与作用进行了详细的说明.针对volatile关键字从字节码以及汇编指令层面解释了它 ...

  7. 真实感渲染:WebGPU介绍和使用光栅化管线绘制一个三角形

    大家好~本课程为"真实感渲染"的线上课程,从0开始,介绍相关的图形学算法和数学基础,给出详细的数学推导.伪代码和实现代码,最终带领大家开发出基于物理的渲染器 线上课程资料: 本节课 ...

  8. 小微信小程序开发相关网站

    微信公众平台 https://mp.weixin.qq.com/ 开发者官方文档 https://developers.weixin.qq.com/miniprogram/dev/framework/

  9. python · matplotlib | 如何绘制子图

    代码: import matplotlib.pyplot as plt import matplotlib matplotlib.rc("font",family='MicroSo ...

  10. css - 去掉图片下的白边

    造成原因: 图片的 display 属性默认是 inline ,而这个属性的 vertical-align 的默认值是baseline. 解决办法1( 建议使用block ,  对 ie浏览器 比较友 ...