快速掌握LLMs炼金术,必读Prompt Engineering实践技巧_数据

由于预训练不需要更专业的知识,而是用一个固定的结构预训练一个通用的语言模型(language model即LM),可以在网络上搜集的大规模文本上直接进行训练。然后这个LM通过引入额外的参数或微调来适应到下游任务,通过prompt让模型生成需要的结果。因此,Prompt engineering(提示工程)应运而生。提示工程的背景和意义在于优化输入提示,引导大语言模型生成更加准确、可靠、符合预期的输出文本,从而更好地发挥其优势和价值。


1Prompt Engineering基础知识


Prompt是什么?

Prompt(提示)指的是输入的文本段落或短语(它可以是一个问题、一段文字描述、一段对话或任何形式的文本输入),传递给语言模型用来实现预期任务的指令和上下文。在给需要解决的任务需求加上Prompt(提示)后,用语言模型生成输出,实现让语言模型有效地用于各种应用程序。



Prompt Engineering是什么?

Prompt engineering则指的是人工智能通过文本提示生成想要的输出的技术,直译为“提示工程”。它可以提高语言模型的准确性和效率,还可以通过提供提示语来减少训练数据的数量,从而缩短模型的训练时间。


对于Prompt工程师来说,这是一个有效的工具,可以创建易于使用和直观的用户体验。这种方法用于交互式设计和软件开发,使用户可以轻松理解如何与系统或产品进行交互。


快速掌握LLMs炼金术,必读Prompt Engineering实践技巧_语言模型_02


Prompt Engineer的重要性

目前,NLP(Natural Language Processing) ,即自然语言处理,已经广泛应用在文字翻译、语音识别、情感分析、文本分类等领域。在NLP技术的使用中,我们可以通过Prompt Engineering更深层次的理解NLP模型的工作原理,通过使用不同的提示语让LLM适应不同的任务和场景,使NLP模型更加灵活。所以在对Prompt Engineering的应用与学习的同时,还有助于我们发现如何更好的控制LLM生产的输出,并增强其性能。


在技术不断革新的同时,也催生了AI模型研发领域的Prompt Engineer(提示工程师)这个职业。例如ChatGPT使用的就是Prompt Engineering生成自然语言文本。ChatGPT生成的答案有些并不是我们想要的,这有可能就是Prompt出现了问题,目前除了人工设计的Prompt,我们还能够主动生成或优化prompt,即AutoPrompt。在LLM变得具有更强大的学习能力之前,还是需要人工设计Prompt。我们更要学习如何通过模型交流,通过人为主观的判断转变成清晰、简洁的提示来引导AI更好地理解我们的需求和问题。这也就是现阶段中我们必须要去学习它的重要性!


快速掌握LLMs炼金术,必读Prompt Engineering实践技巧_语言模型_03


来源:https://jobs.lever.co/Anthropic/e3cde481-d446-460f-b576-93cab67bd1ed



标准的Prompt设置

标准的Prompt是由以下几个部分构成,即:Instructions(说明)、Context(语境)、Input data(输入数据)、Output indicator(输出指标)。


快速掌握LLMs炼金术,必读Prompt Engineering实践技巧_应用程序_04

· Instruction(必填):指的是指令,即希望模型执行的具体任务。

· Context(选填): 说明背景信息,或者说是上下文信息,这可以引导模型做出更好的反应。

· Input Data(选填):输入数据,告知模型需要处理的数据。

· Output Indicator(选填):输出指示器,告知模型我们要输出的类型或格式。


其中,需要特别注意Temperaturetop_p两个重要参数,通过调整参数会对模型输出产生影响。


· Temperature:是一个控制语言模型输出的随机性或创造性的参数。当使用语言模型生成文本时,它通常会输出根据输入和先前训练数据确定为最可能的单词或词序列。然而,增加输出的随机性可以帮助模型创建更具创意和有趣的输出。

· Top_p:调整范围0.0~1.0 。top_p是top_k的改进版,由于top-k有一个缺陷,那就是“k值取多少是最优的?”非常难确定。于是出现了动态设置token候选列表大小策略——即核采样(Nucleus Sampling)。top_p可以简单将其理解为候选词列表大小,控制模型所能看到的候选词的多少。


实际使用中建议只修改其中一个的值,不要两个同时修改。可以通过下面的示例了解一下:

快速掌握LLMs炼金术,必读Prompt Engineering实践技巧_语言模型_05


Prompt常见的任务种类:

·文本分类(Text Classification)

快速掌握LLMs炼金术,必读Prompt Engineering实践技巧_数据_06


·文本摘要(Text Summarization)

快速掌握LLMs炼金术,必读Prompt Engineering实践技巧_数据_07


·智能问答(Question Answering)

快速掌握LLMs炼金术,必读Prompt Engineering实践技巧_数据_08


·代码生成(Code Generation)

快速掌握LLMs炼金术,必读Prompt Engineering实践技巧_数据_09



2Prompt Engineering的技术要点


·Few-shot Prompts(少样本提示)

是指通过我们给LLM提供几组样例,以引导LLM进行上下文学习,实现更好的学习性能。即语言模型仅通过少量的样例便可进行学习任务。

快速掌握LLMs炼金术,必读Prompt Engineering实践技巧_应用程序_10


·Chain-of-thought (CoT) prompting(思维链提示过程)

指的是鼓励大语言模型解释其推理过程,通过向大语言模型展示一些少量的exemplars。大语言模型在回答提示时也会显示推理过程,这种推理的解释往往会引导出更准确的结果。可以将其与few-shot prompting相结合以获得更好的结果,也可以在没有示例的情况下进行zero-shot CoT。

快速掌握LLMs炼金术,必读Prompt Engineering实践技巧_数据_11


·Zero-shot-CoT(零样本思维链)

是对 CoT prompting的后续研究,引入了一种非常简单的零样本提示。研究发现,通过在问题的结尾附加“让我们一步步思考。”这几个词,大语言模型便能够生成一个回答问题的思维链。零样本思维链也有效地改善了算术、常识和符号推理任务的结果。

快速掌握LLMs炼金术,必读Prompt Engineering实践技巧_语言模型_12


·Self-consistency(自洽性)

是对 CoT 的一个补充,它不仅仅生成一个思路链,而是通过few-shot CoT对多个不同的推理路径进行采样,并选择最一致的答案。自洽性可以提高算术、常识和符号推理任务的结果。即使普通的思路链提示被发现无效,自洽性仍然能够改善结果。

快速掌握LLMs炼金术,必读Prompt Engineering实践技巧_应用程序_13


快速掌握LLMs炼金术,必读Prompt Engineering实践技巧_应用程序_14


·Generation Knowledge Prompting(生成知识提示)

生成知识提示,要求LLM在生成响应之前生成与问题相关的可能有用的信息。是使用作为上下文的一部分提供的额外知识来改善复杂任务的结果,如常识推理。该方法在上下文中使用的知识由模型生成,并用于提示进行预测。

快速掌握LLMs炼金术,必读Prompt Engineering实践技巧_应用程序_15


示例:首先是生成知识。

快速掌握LLMs炼金术,必读Prompt Engineering实践技巧_数据_16


示例:然后,使用知识样本生成知识扩充问题,以获得答案。选择最高置信度响应作为最终方案。

快速掌握LLMs炼金术,必读Prompt Engineering实践技巧_数据_17


·Program-aided Language Model(PAL)(程序辅助语言模型)

虽然Chain-of-thought (CoT) prompting(思维链提示)用在如何引导模型在复杂推理问题上的表现更好,可它的工作原理只是在大语言模型解释其推理过程生成的文本,有时是不够用的。这时就需要通过PAL使用LLM来读取问题并生成程序作为中间推理的步骤,因为它将解决方案步骤卸载到运行时,如Python解释器。

快速掌握LLMs炼金术,必读Prompt Engineering实践技巧_语言模型_18


·ReAct(框架)

ReAct是一个框架,LLM用于以交错的方式生成推理跟踪和特定于任务的操作,在生成推理的过程中,允许模型进行诱导、跟踪和更新操作计划,甚至处理异常。ReAct的操作步骤允许LLM与外部来源(如知识库或环境)交互并检索更多的信息,从而获得更可靠和更真实的响应。

快速掌握LLMs炼金术,必读Prompt Engineering实践技巧_语言模型_19



3Prompt Engineering IDEs


快速工程是一个迭代的设计任务。更正式的迭代设计领域,是具有完善的工具,让工程师更有效率。类似的工具存在于Prompt工程领域,最近创建了各种各样的prompt工程IDE(集成开发环境)。它们是从研究界面到专业设计的IDE,这些工具的范围之广令人惊讶。现在提供几个工具的概述:

·Dust

Dust是一个大型语言模型应用程序,用于将提示链接在一起的提示工程工具。它们提供了一个web界面,用于编写提示并将它们链接在一起。

快速掌握LLMs炼金术,必读Prompt Engineering实践技巧_数据_20


·Dyno

Dyno是一个提示工程IDE,专注于在单个提示上迭代。它们提供了一个专业的web界面,能够将提示拆分为多个视图,以便进一步迭代。


·LangChain

LangChain是一个用于构建端到端语言模型应用的Python框架。提供了一系列模块,这些模块可以组合在一起,用于创建复杂的应用程序,也可以单独用于简单的应用程序。


快速掌握LLMs炼金术,必读Prompt Engineering实践技巧_语言模型_21


了解更多的IDE,点击https:///dair-ai/Prompt-Engineering-Guide#tools--libraries



4总结


通过上述一系列的阐述,我们了解到Prompt的设置可以有效帮助LLMs解决任务需求,有效地用于各种应用程序之中。同样为了提升Prompt的可靠性,因此需要通过Prompt Engineering的探索和发挥其作用去帮助NLP提升性能,在过程中,需要了解Prompt的任务需求,使用适合方法来配合,让工程师们或研究人员更好的控制LLM的输出质量。


在实践过程中,也可以从安全角度考虑,努力避免出现漏洞,在一些发现的LLM漏洞中,与任何其他系统一样,使用LLM进行构建也会带来包括安全考虑在内的。帮助识别LLM的风险行为,不仅提高了语言模型生成文本的可靠性,更是有助于减少语言模型可能产生的有害行为和风险。


从NLP转变到BERT之后,相比一些较小的Augmented LMs(即增强语言模型),将知识先验信息融入到语言模型,为将复杂的任务分解为更简单的子任务,工具包括调用外部模块(如代码解释器、计算器等),增强语言模型可以通过启发式方法单独使用或组合利用这些增强措施,或者通过训练模型学习实现,在训练的同时也保留了语言模型的某些能力。增强语言模型的灵活应急能力恰巧弥补了语言模型的缺点,通过为它配备一个检索模块,从数据库中检索出给定语境下的此类文档,从而实现与更大规模语言模型的某些能力相匹配,同时拥有更少的参数。


了解更多Prompt Engineering,可以点击https:///dair-ai/Prompt-Engineering-Guide