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

文章目录

  • 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.mzph.cn/news/777544.shtml

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

相关文章

软件杯 深度学习+python+opencv实现动物识别 - 图像识别

文章目录 0 前言1 课题背景2 实现效果3 卷积神经网络3.1卷积层3.2 池化层3.3 激活函数:3.4 全连接层3.5 使用tensorflow中keras模块实现卷积神经网络 4 inception_v3网络5 最后 0 前言 🔥 优质竞赛项目系列,今天要分享的是 🚩 *…

基于单片机产品数量自动计量智能系统设计

**单片机设计介绍,基于单片机产品数量自动计量智能系统设计 文章目录 一 概要二、功能设计设计思路 三、 软件设计原理图 五、 程序六、 文章目录 一 概要 基于单片机产品数量自动计量智能系统设计是一个融合了单片机技术、传感器技术和自动控制技术的综合性项目。…

uniApp使用XR-Frame创建3D场景(8)粒子系统

上篇文章讲述了如何将XR-Frame作为子组件集成到uniApp中使用 本片我们详细讲解一下xr-frame的粒子系统 先看源码 <xr-scene render-system"alpha:true" bind:ready"handleReady"> <xr-node visible"{{sec8}}"><xr-asset-load t…

基于ssm的线上旅行信息管理系统论文

摘 要 随着旅游业的迅速发展&#xff0c;传统的旅行信息查询管理方式&#xff0c;已经无法满足用户需求&#xff0c;因此&#xff0c;结合计算机技术的优势和普及&#xff0c;特开发了本线上旅行信息管理系统。 本论文首先对线上旅行信息管理系统进行需求分析&#xff0c;从系…

将ENVI的roi转为mask图像

方法1&#xff1a; 直接使用ENVI step1: 将roi文件存储为.roi格式 [1] 链接: link step2: 将.roi转为mask [2] 链接: link [3] 链接: link 方法2&#xff1a; 使用Matlab step1: 将roi文件存储为.xlm 文件 step2&#xff1a;针对把每个roi存储为一个单独文件 [4] 读取xlm文…

Electron+Vue构建项目时出错:Error: Exit code: ENOENT. spawn /usr/bin/python ENOENT

问题&#xff1a;ElectronVue构建项目时出错&#xff1a;Error: Exit code: ENOENT. spawn /usr/bin/python ENOENT URL:https://github.com/nklayman/vue-cli-plugin-electron-builder/issues/1701 一&#xff0c;构建时node版本要低 同时构建命令如下&#xff1a; "el…

fastadmin学习04-一键crud

FastAdmin 默认内置一个 test 表&#xff0c;可根据表字段名、字段类型和字段注释通过一键 CRUD 自动生成。 create table fa_test (id int unsigned auto_increment comment ID primary key,user_id int(10) default 0 null…

免费软件“蓝莓投屏”:支持多个Airplay同时镜像的投屏软件。

引言&#xff1a; 由于定制盒子(3288)不支持投屏功能&#xff08;有些5.1不支持&#xff0c;安卓4.X本身也不支持&#xff09;&#xff0c;需要借助第三方的投屏软件来实现这一需求。所以&#xff0c;研究半天&#xff0c;蓝莓投屏以其简便易用的特性脱颖而出&#xff0c;只需…

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

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

Java安全篇-Fastjson漏洞

前言知识&#xff1a; 一、json 概念&#xff1a; json全称是JavaScript object notation。即JavaScript对象标记法&#xff0c;使用键值对进行信息的存储。 格式&#xff1a; {"name":"wenda","age":21,} 作用&#xff1a; JSON 可以作为…

网络工程师实验命令(华为数通HCIA)

VRP系统的基本操作 dis version #查看设备版本信息 sys #进入系统视图 system-name R1 #改设备名字为R1进入接口配置IP地址 int g0/0/0 ip address 192.168.1.1 255.255.255.0 #配置接口地址为192.168.1.1/255.255.255.0 ip address 192.168.1.2 24 sub #此…

Apache Hive的基本使用语法(二)

Hive SQL操作 7、修改表 表重命名 alter table score4 rename to score5;修改表属性值 # 修改内外表属性 ALTER TABLE table_name SET TBLPROPERTIES("EXTERNAL""TRUE"); # 修改表注释 ALTER TABLE table_name SET TBLPROPERTIES (comment new_commen…

二维双指针,滑动窗口

二维双指针 思路&#xff1a;考虑暴力做法&#xff0c;我们统计前缀和&#xff0c;然后枚举以 ( x 1 , y 1 ) (x_1,y_1) (x1​,y1​), ( x 2 , y 2 ) (x_2,y_2) (x2​,y2​)为左上&#xff0c;右下顶点的矩阵有多少是合法的&#xff0c;那么&#xff0c;这样的时间复杂度为 n 4…

【二十七】【算法分析与设计】归并(1),912. 排序数组,归并排序,递归函数的时间复杂度计算,LCR 170. 交易逆序对的总数

912. 排序数组 给你一个整数数组 nums&#xff0c;请你将该数组升序排列。 示例 1&#xff1a; 输入&#xff1a;nums [5,2,3,1] 输出&#xff1a;[1,2,3,5] 示例 2&#xff1a; 输入&#xff1a;nums [5,1,1,2,0,0] 输出&#xff1a;[0,0,1,1,2,5] 提示&#xff1a; 1 < …

Linux 系统 CentOS7 上搭建 Hadoop HDFS集群详细步骤

集群搭建 整体思路:先在一个节点上安装、配置,然后再克隆出多个节点,修改 IP ,免密,主机名等 提前规划: 需要三个节点,主机名分别命名:node1、node2、node3 在下面对 node1 配置时,先假设 node2 和 node3 是存在的 **注意:**整个搭建过程,除了1和2 步,其他操作都使…

Mini-Gemini: Mining the Potential of Multi-modality Vision Language Models

Mini-Gemini: Mining the Potential of Multi-modality Vision Language Models 相关链接&#xff1a;arxiv 关键字&#xff1a;Vision Language Models、Multi-modality、High-Resolution Visual Tokens、High-Quality Data、VLM-guided Generation 摘要 在这项工作中&#x…

unity学习(76)--窗口化和后台运行

1.通过如下方式将编译的游戏设置为窗口模式。 成功&#xff1a; 2.现在只有鼠标点击的窗体游戏运动&#xff0c;其他窗体游戏都会卡住。 2.1build setting中 2.2unity内部Project Settings 也被同步修改了

火车头通过关键词采集文章的原理

随着互联网信息的爆炸式增长&#xff0c;网站管理员和内容创作者需要不断更新和发布新的文章&#xff0c;以吸引更多的用户和提升网站的排名。而火车头作为一款智能文章采集工具&#xff0c;在这一过程中发挥着重要作用。本文将探讨火车头如何通过关键词采集文章&#xff0c;以…

CDH集群hive初始化元数据库失败

oracle数据库操作&#xff1a; 报错如下&#xff1a;命令 (Validate Hive Metastore schema (237)) 已失败 截图如下&#xff1a; 后台日志部分摘录&#xff1a; WARNING: Use “yarn jar” to launch YARN applications. SLF4J: Class path contains multiple SLF4J binding…

Vite 为什么比 Webpack 快?

目录 1. Webpack 的构建原理 2. Script 的模块化&#xff08;主流浏览器对 ES Modules 的支持&#xff09; 3. Webpack vs Vite 开发模式的差异 对 ES Modules 的支持 底层语言的差异 热更新的处理 1. Webpack 的构建原理 前端之所以需要类似于 Webpack 这样的构建工具&…