【NLP笔记】大模型prompt推理(提问)技巧

news/2024/4/28 10:17:28/文章来源:https://blog.csdn.net/weixin_36488653/article/details/137042528

文章目录

  • prompt概述
  • 推理(提问)技巧
    • 基础prompt构造技巧
    • 进阶优化技巧
    • prompt自动优化

参考链接:

  • Pre-train, Prompt, and Predict: A Systematic Survey of
    Prompting Methods in Natural Language Processing
  • 预训练、提示和预测:NLP中提示的系统综述

随着LLM时代的到来,通过prompt直接对话语言模型,得到预期结果,解析后用于实际应用的模式也随之推广。那么什么是prompt,如何用好prompt去激发语言模型的潜力,成为了预训练语言模型底座+prmpt-tuning范式的重要议题。

prompt概述

prompt通俗来说就是通过设计自然语言提示词,让预训练的语言模型“回忆”预测出学习到的内容,并对提示词的问题做出解答,具体步骤如下:

  1. 设计模版:设计一个自然语言模版,该模版中一个位置用于存放输入文本[X],一个位置用于存放输出文本[Z];根据模版构造问答样本,如设计模版为"[X] The movie is [Z]“,输入内容[X]为"I love this movie.”,预测结果的位置为[Z]存放的位置,通过这样的模式去构造样本;
    • 中间位置的为完形填空prompt,还有前缀、后缀的prompt形式;
    • prompt并非局限于自然语言,也可以是向量化后的token;
    • [X] 和 [Z] 槽位数量可以根据任务需要灵活调整;

在这里插入图片描述

  1. 搜索回答:这一步主要经大模型推理预测找到得分最高的结果 z ˆ zˆ zˆ。通过预训练的大模型可能会有一组允许的 Z Z Z(生成任务可以是任意文本,分类任务可以是一组单词)被预测出来,函数 f f i l l ( x ′ , z ) f_{fill}(x', z) ffill(x,z) x ′ x' x为根据模版构造的未填充结果的文本)表示用潜在回答 z z z填充提示 x ′ x' x中的位置 [Z],得到的结果一般被称为 filled prompt,如果填充的是正确回答,则被称为 answered prompt,具体表现为,通过使用预训练的大模型计算会从相应filled prompt 从可能的回答集合 Z Z Z中找出概率最大的结果 z ˆ zˆ zˆ,得到answered prompt;
    在这里插入图片描述
  2. 映射回答:最后,基于得分最高的回答 z ˆ zˆ zˆ 到得分最高的输出 y ˆ yˆ yˆ,尤其是在分类任务中需要进行这样的结果映射(比如excellent、fabulous、wonderful 等近义词可以映射到某一情感类别);

推理(提问)技巧

prompt采用完形填空、前缀还是后缀的形式,是预训练底座或者微调时需要考虑的,当前就总结基于大模型完成推理(提问)时,该如何设计prompt以及使用什么样的技巧才能更好地激发大模型的潜能。

基础prompt构造技巧

当提问的方式与大模型的语料库更接近时,模型的预测效果可能会更好,不过大多数大模型的语料库都是非公开的,好在都是采用类似的模版设计,因此能够总结出一定的规律。
想要在推理时得到较理想的预测结果,结合很多prompt经验来看,一个合理的架构就包含了构造prompt所需的技巧,下面介绍一个ChatGPT3官方提出的prompt构造模版CRISPE(Capacity and Role、Insight、Statement、Personality、Experiment),具体为:

构造步骤技巧描述示例
Capacity and Role指定角色和能力“假设你是一个机器学习架构开发专家,并且还是一个资深博客作家。”
Insight给定一些背景信息“博客的受众是有兴趣了解机器学习最新进展的技术专业人士。”
Statement说明任务目标“全面概述最流行的机器学习框架,包括它们的优点和缺点。包括现实生活中的例子和案例研究,以说明这些框架如何在各个行业中成功使用。”
Personality控制输出格式与风格“在回复时,请使用 Andrej Karpathy、Francois Chollet、Jeremy Howard 和 Yann LeCun 的混合写作风格。”
Experiment指定输出结果的要求,如单输出/多输出“给出多个输出示例”

上述模版包含了很多构造prompt的技巧,不同的模版侧重的技巧可能有差异,但是都是可以用来尝试的范式,其他更多的模版可以参考:9个prompt构造模版范式;

还有很多prompt的设计技巧,避免模型出现幻觉等,更好地得到目标输出结果,比较基础简单的技巧如:

  • 提供更多的细节/背景信息;
  • 描述更清晰,避免模糊的表达;
  • 多尝试不同的prompt构造范式,选取最适合任务的一种提问方式;
  • 采用效果好的prompt范式,多次调用模型,选出投票结果(self-consistency);
  • 把单个问题拆分成多个子问题,一步一步地得到最终结果(least to most);
  • 知识增强,通过检索引入外部知识,构造prompt,提升效果(RAG,Retrieval Augmented Generation);
  • 把问题拆分成不同的问题后,逐步进行提问(self-ask)等;
# 采用langchain生成self-ask示例
# pip install langchain
# pip install openai
# pip install google-search-resultsimport os
os.environ['OPENAI_API_KEY'] = str("xxxxxxxxxxxxxxxxxxxx")
os.environ["SERPAPI_API_KEY"] = str("xxxxxxxxxxxxxxxxxxxx")from langchain import OpenAI, SerpAPIWrapper
from langchain.agents import initialize_agent, Tool
from langchain.agents import AgentTypellm = OpenAI(temperature=0)
search = SerpAPIWrapper()
tools = [Tool(name="Intermediate Answer",func=search.run,description="useful for when you need to ask with search",)
]self_ask_with_search = initialize_agent(tools, llm, agent=AgentType.SELF_ASK_WITH_SEARCH, verbose=True
)
self_ask_with_search.run("What is the hometown of the reigning men's U.S. Open champion?"
)
# 输出self-ask示例
#> Entering new AgentExecutor chain...
# Yes.
# Follow up: Who is the reigning men's U.S. Open champion?
# Intermediate answer: Carlos Alcaraz
# Follow up: Where is Carlos Alcaraz from?
# Intermediate answer: El Palmar, Spain
# So the final answer is: El Palmar, Spain
# > Finished chain.
# El Palmar, Spain

更多技巧可以参考以下内容:

  • OpenAI官方技巧教程
  • Reasoning with Language Model Prompting: A Survey
  • Awesome-Prompt-Engineering
  • 12 Prompt Engineering Techniques

如果模型的参数是可以通过入口传递的,也可以通过参数设置调整模型的预测结果:

  1. 温度系数(Temperature):控制模型输出随机性的参数。它影响模型在选择下一个词时的确定性,越接近1时模型的输出越随机;
  2. 多样性(top p):采样策略,模型仅从累计概率超过指定阈值p的最可能的词中进行选择。设置 top-p 为0.9,模型将从概率最高的一小部分词中选择,这些词的累计概率加起来接近0.9。;
  3. 重复惩罚(penalty):控制模型重复内容的输出,在长篇回答或生成文章时,使用重复惩罚可以帮助减少冗余和重复。

进阶优化技巧

上面提到的链接里有很多更细节/高阶的优化技巧,下面主要是从两种现在应用比较广泛的范式出发来介绍进阶的优化技巧,能更好地解决模型产生幻觉的问题。

把问题拆分成一步一步的小问题,并逐步进行解答,直到得到最终的目标结果。中间过程结合RAG,就能够产出更稳定、准确性更高的模型预测结果;

现在又很多AI-Agent(如:LangChain)集成了这些大模型推理优化技巧,还包含很多底层数据处理和检索等能力,可以协助使用者更好地进行大模型应用,提升模型的预测效果;

  • CoT
    论文链接:Chain-of-Thought Prompting Elicits Reasoning in Large Language Models
    是一种引导大模型进行任务分解的提问方法,作法是给出任务分解的少量示例,利用大模型的上下文学习能力(in-context learning)引导模型进行任务拆解,并得到目标结果,如图所示:
    在这里插入图片描述
  • ReAct(Reason+Act)
    论文链接:React: Synergizing Reasoning and Acting in
    Language Models
    引导大模型将问题进行更细致的拆分,在不同的子问题阶段拆分出Thought、Act和Observation三步,分步骤去检索/LLM推理并解答每个子步骤的问题,把各个问题的流程拼接成大模型的最终输入,让模型更有规划地去解决目标问题;
    在这里插入图片描述
  • ReWOO(Reasoning WithOut Observation)
    论文链接:ReWOO: Decoupling Reasoning from Observations
    for Efficient Augmented Language Models
    去掉了ReAct处理手段中的Observation阶段,并且把Thought、Act转换成Planner、Worker和Solver三个阶段,把问题拆分成不同的子问题(Planner),根据子问题去检索/LLM推理对应的结果(Worker),拼接各个子问题的问答,输入给大模型得到目标问题的预测结果;
    在这里插入图片描述
  • ToT(Tree of Thought)
    论文链接:Tree of Thoughts: Deliberate Problem Solving
    with Large Language Models
    ToT是结合了多种优化技巧的一种优化方案,在解决复杂问题时具有更大的优势。CoT是基于问题将问题划分成多个子步骤,并通过检索或者向大模型提问的方式得到各个步骤的结果,而CoT则是在会基于初始问题拆分出多个一级问题,每个问题会通过检索/LLM推理的方式解决,以此类推,就可以得到一颗树结构,最终的结果通过广度优先搜素、深度优先搜索等方式来拼接每一步的内容,最终输入给大模型得到目标答案;
    在这里插入图片描述
  • GoT(Graph of Thought)
    论文链接:Graph of Thoughts: Solving Elaborate Problems with Large Language Models
    在ToT的基础上引入了循环refine的结构,特定节点上可以想循环神经网络一样不断更新结果,使得整个过程的调整空间更大;
    在这里插入图片描述

prompt自动优化

还有一些转为优化prompt设计的架构,可以帮你优化提问的文本内容:

  • AutoPrompt:Eliciting Knowledge from Language Models with Automatically Generated Prompts
  • PromptAgent: Strategic Planning with
    Language Models Enables Expert-Level
    Prompt Optimization
  • Guiding Large Language Models via Directional Stimulus Prompting
  • Synthetic Prompting: Generating Chain-of-Thought Demonstrations for Large Language Models

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

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【并发】第二篇 ThreadLocal详解

导航 一. ThreadLocal 简介二. ThreadLocal 源码解析1. get2. set3 .remove4. initialValue三. ThreadLocalMap 源码分析1. 构造方法2. getEntry()3. set()4. resize()5. expungeStaleEntries()6. cleanSomeSlots()7. nextIndex()8. remove()9. 总结ThreadLocalMap四. 内存泄漏…

HarmonyOS 应用开发之显式Want与隐式Want匹配规则

在启动目标应用组件时,会通过显式 Want 或者隐式 Want 进行目标应用组件的匹配,这里说的匹配规则就是调用方传入的 want 参数中设置的参数如何与目标应用组件声明的配置文件进行匹配。 显式Want匹配原理 显式 Want 匹配原理如下表所示。 名称类型匹配…

NanoMQ的安装与部署

本文使用docker进行安装,因此安装之前需要已经安装了docker 拉取镜像 docker pull emqx/nanomq:latest 相关配置及密码认证 创建目录/usr/local/nanomq/conf以及配置文件nanomq.conf、pwd.conf # # # # MQTT Broker # # mqtt {property_size 32max_packet_siz…

使用苹果应用商店上架工具实现应用快速审核与发布

摘要 移动应用app上架是开发者关注的重要环节,但常常会面临审核不通过等问题。为帮助开发者顺利完成上架工作,各种辅助工具应运而生。本文探讨移动应用app上架原理、常见辅助工具功能及其作用,最终指出合理使用工具的重要性。 引言 移动应…

第4章.精通标准提示,引领ChatGPT精准输出

标准提示 标准提示,是引导ChatGPT输出的一个简单方法,它提供了一个具体的任务让模型完成。 如果你要生成一篇新闻摘要。你只要发送指示词:汇总这篇新闻 : …… 提示公式:生成[任务] 生成新闻文章的摘要: 任务&#x…

Stable Diffusion WebUI 生成参数:脚本(Script)——提示词矩阵、从文本框或文件载入提示词、X/Y/Z图表

本文收录于《AI绘画从入门到精通》专栏,专栏总目录:点这里,订阅后可阅读专栏内所有文章。 大家好,我是水滴~~ 在本篇文章中,我们将深入探讨 Stable Diffusion WebUI 的另一个引人注目的生成参数——脚本(Script)。我们将逐一细说提示词矩阵、从文本框或文件导入提示词,…

跑腿小程序|基于微信小程序的跑腿平台小程序设计与实现(源码+数据库+文档)

跑腿平台小程序目录 目录 基于微信小程序的跑腿平台小程序设计与实现 一、前言 二、系统设计 三、系统功能设计 1、用户信息管理 2、跑腿任务管理 3、任务类型管理 4、公告信息管理 四、数据库设计 五、核心代码 六、论文参考 七、最新计算机毕设选题推荐 八、…

如何安全地添加液氮到液氮罐中

液氮是一种极低温的液体,它在许多领域广泛应用,但在处理液氮时需谨慎小心。添加液氮到液氮罐中是一个常见的操作,需要遵循一些安全准则以确保操作人员的安全和设备的完整性。 选择合适的液氮容器 选用专业设计用于存储液氮的容器至关重要。…

SnapGene 5 for Mac 分子生物学软件

SnapGene 5 for Mac是一款专为Mac操作系统设计的分子生物学软件,以其强大的功能和用户友好的界面,为科研人员提供了高效、便捷的基因克隆和分子实验设计体验。 软件下载:SnapGene 5 for Mac v5.3.1中文激活版 这款软件支持DNA构建和克隆设计&…

线性代数 - 应该学啥 以及哪些可以交给计算机

AI很热,所以小伙伴们不免要温故知新旧时噩梦 - 线代。 (十几年前,还有一个逼着大家梦回课堂的风口,图形学。) 这个真的不是什么美好的回忆,且不说老师的口音,也不说教材的云山雾绕,单…

JVM(一)——内存结构

一. 前言 1、什么是 JVM? 1)定义: Java Virtual Machine - java 程序的运行环境(java 二进制字节码的运行环境) 2)好处: 一次编写,到处运行自动内存管理,垃圾回收功能数组下标越…

React Native 应用打包上架

引言 在将React Native应用上架至App Store时,除了通常的上架流程外,还需考虑一些额外的优化策略。本文将介绍如何通过配置App Transport Security、Release Scheme和启动屏优化技巧来提升React Native应用的上架质量和用户体验。 配置 App Transport…

基于振弦采集仪的土体变形监测与分析

基于振弦采集仪的土体变形监测与分析 工程监测振弦采集仪是一种专用于工程监测中的振弦测量的仪器。它能够实时采集及记录结构物的振动信号,以评估结构物的健康状况、安全性能等。它通常由振弦传感器、数据采集模块和数据处理软件组成。振弦传感器负责测量结构物的…

uniApp使用XR-Frame创建3D场景(5)材质贴图的运用

上一篇讲解了如何在uniApp中创建xr-frame子组件并创建简单的3D场景。 这篇我们讲解在xr-frame中如何给几何体赋予贴图材质。 先看源码 <xr-scene render-system"alpha:true" bind:ready"handleReady"><xr-node><xr-assets><xr-asse…

联想 lenovoTab 拯救者平板 Y700 二代_TB320FC原厂ZUI_15.0.677 firmware 线刷包9008固件ROM root方法

联想 lenovoTab 拯救者平板 Y700 二代_TB320FC原厂ZUI_15.0.677 firmware 线刷包9008固件ROM root方法 ro.vendor.config.lgsi.market_name拯救者平板 Y700 ro.vendor.config.lgsi.en.market_nameLegion Tab Y700 #ro.vendor.config.lgsi.short_market_name联想平板 ZUI T # B…

2024多云管理平台CMP排名看这里!

随着云计算技术的迅猛发展&#xff0c;多云管理平台CMP应运而生。多云管理平台CMP仅能够简化对多个云环境的统一管理&#xff0c;还能提高资源利用效率和降低成本。因此了解多云管理平台CMP品牌是必要的。2024多云管理平台CMP排名看这里&#xff01;仅供参考哈&#xff01; 20…

Java八股文(JVM)

Java八股文のJVM JVM JVM 什么是Java虚拟机&#xff08;JVM&#xff09;&#xff1f; Java虚拟机是一个运行Java字节码的虚拟机。 它负责将Java程序翻译成机器代码并执行。 JVM的主要组成部分是什么&#xff1f; JVM包括以下组件&#xff1a; ● 类加载器&#xff08;ClassLoa…

【SpringBoot从入门到精通】03_SpringBoot自动配置原理

三、SpringBoot自动配置原理 我们通过编写SpringBoot HelloWorld程序&#xff0c;体会到了其强大与便捷&#xff0c;它的这些功能都是基于SpringBoot的依赖管理与自动配置。 3.1 核心特性 依赖管理 父项目做依赖管理 <!-- 当前项目的父项目&#xff1a;依赖管理 --> &…

MySQL进阶-----索引的语法与SQL性能分析

目录 前言 一、索引语法 1.SQL语法 2.案例演示 二、SQL性能分析 三、慢查询日志 1.开启日志 2.测试样例 四、profile详情 1.开启profile 2.profile测试SQL语句 五、explain详情 1.语法结构 2.执行顺序示例&#xff08;id&#xff09; 3.执行性能示例(type) 前言 本…

每日一题--最长连续序列

洛阳春-岑参 人到洛阳花似锦&#xff0c;偏我来时不逢春。 谁道三冬无春色&#xff0c;冰山高处万里银 目录 题目描述 思路分析 方法及其时间复杂度 法一 暴力枚举&#xff1a; 法二 哈希表遍历&#xff1a; 法三 并查集&#xff1a; 个人总结 题目描述 128. 最长连续序…