大模型时代的科研基础之:Prompt Engineering

乱七八糟总结一下,想不起来就看看。

一. 大语言模型 (LLM)

是一种基于Transformer的深度学习模型,可以处理大量的自然语言文本,并从中学习知识和语言规律,从而提高对自然语言的理解和生成能力。LLM可以用于各种自然语言处理 (NLP)任务,如文本生成、阅读理解、常识推理等,这些任务在传统的方法下很难实现。LLM还可以帮助开发人员构建更强大和更智能的应用程序,如聊天机器人、智能搜索引擎等。随着ChatGPT的火爆,LLM得到了很多关注。LLM的规模和性能在近年来不断提高,但也面临着训练和部署的挑战。本文将介绍OpenAI中的一些基本概念和 Prmpt的最佳实践,以及如何使用OpenAI来帮助开发人员构建更强大和更智能的应用程序。

参数设置:

1)Temperature - Temperature越低,生成结果就越确定,即LLM总是会挑选可能性最高的下一个词(token)。提高Temperature可能会导致更多的随机性,鼓励更多不同或创造性的输出,调高这个参数本质上是在增加其他可能的词的权重,让LLM有更大的概率生成其它词。在应用方面,当我们想生成一些基于事实的高质量内容时可以使用较低的Temperature,以鼓励更多基于事实的简明的结果。对于诗歌生成或其他创造性任务,提高Temperature可能产生更加优秀的结果。

2)Top_p - 这种带有temperature的采样技术称为核采样nucleus sampling,可以控制模型在生成内容时的确定性。如果你正在寻找准确的、符合事实的答案,那就把这个参数调低。如果你在寻找更多样化的反应,就增加到一个更高的值。

3)Top_k - 有些大型语言模型中提供这个参数,与Top_p类似

一般的建议是对于上述3个参数,一次性最多改变其中的一个。

4)Frequency penalty - 根据目前同一词(token)在文中出现频率惩罚相同的词(token)再次生成的力度。这个值越高,生成词句的变化越多,降低相同词出现的概率。

5)Presence penalty - 与Frequency penalty类似,但是是根据目前同一词(token)在文中是否出现过来惩罚相同的词(token)再次生成的力度。这个值越高,越可能生成新的话题。

二. Prompt(提示)

Prompt是AI系统提供给用户的文本提示,它告诉人工智能模型要执行什么任务或生成什么样的输出。在机器学习和自然语言处理中,Prompt通常是一些文本或语言,被输入到训练好的模型中,用于指示模型生成一个相应的输出。Prompt可以是一个问题、一个句子或一段话,其作用是引导人工智能模型生成我们想要的文本类型和内容。

例如,在一个智能语音助手应用程序中,当用户说“今天天气如何?”时,应用程序将“今天天气如何?”作为Prompt输入到自然语言处理模型中,该模型将生成一个回答,比如“今天是晴天,最高气温将达到25度”。在这个例子中,Prompt是“今天天气如何?”

我们通过告诉模型今天天气如何,成功让其产生的结果更加精准,因为它通过联系上下文后遵循了我们的指令("今天天气如何")。这种指示模型执行任务的方法就是所谓的Prompt工程。

1. Prompt 微调方法:

Prompt微调方法主要思想通过模板将不同的下游任务转换为模型预训练时常见的形式,缩小预训练与微调时训练数据的差异性,降低了预训练模型在下游任务微调时存储和运算的资源使用,提升模型在下游任务中的表现。

2. Prompt 的设计分为三个步骤:

1)模板设计:通过手动或自动设计模板,将输入x(例如:独行月球真好看。)转变成X(例如:独行月球真好看,这太___了)。通常情况下X中包含空槽,让预训练语言模型对空槽填充,从而推断出 y(好看)。模板的设计灵活多变,需要根据下游任务与预训练语言模型来选择合适的模板。
2)答案搜索:在通过模板得到X后,预训练语言模型在答案空间中进行搜索,找出得分最高的值填充到对应空槽中。
3)答案映射:通过答案搜索得到空槽对应填充值后,部分任务的槽值为最终结果,部分任务的槽值需要进行转换,将槽值对应到最终的输出标签 y(好看)。

3. Prompt 模板设计三种方法:

1)人工模板构建
 依靠专业人员的经验手动构建模板是最直接高效的方式,可以支持下游任务,也可以使用辅助半监督学习的方式构建数据集,进行数据增强。在大型预训练模型的场景下可以实现小样本甚至零样本学习,实现全模 型微调的效果。

2)离散模板方法
 虽然人工构建模板较为直观高效,但是由于构建过程繁琐,模板微小的变化可能会导致结果出现较大的变化,自动构建模板方式的提出用于解决这一问题。离散模板是自动构建模板的一种方法,模板由具体的字符构成。

3)连续模版构建

连续模板构建是对整个连续空间进行微调,放松了模板由实际存在词语组成的约束,与离散模板相比,连续模板具有更强的表现力。并且连续模板可以强调词语,并对具有误导性和歧义性的词语进行调整。

优点:连续模板构建通过在整个连续空间中 优化,部分场景下可以获得甚至超越 全模型微调的性能。

缺点:训练时间较长,模型收敛速度较慢,与使用的预训练模型 存在高耦合现象,更换预训练模型后需要重新进行训练。

 2021年,Li X L 等人提出 prefix-tuning 解决全模 型微调中每个任务存储一份预训练模型参数的问题。每 个下游任务只需要存储对应的前缀,使用前缀来优化任务。Prefix-tuning 通过在预训练模型的每一层插入与任务相关的向量,在下游任务中调整相关参数,同时保持预训练模型参数不变。自

 2021年,Lester B等人在prefix-tuning的基础上进行简化,提出 Soft-Prompt。Soft-Prompt仅在输入前加入提示,采用与目标任务相关的token对提示进行初始化。Soft-Prompt 比 prefix-tuning 添加更少的参数,允许transformer根据输入的上下文更新中间层的任务表示, 不需要重新参数化。

 Hambardzumyan K等人受到了对抗性重新编程的启发,提出了一种基于对抗性重构的方法WARP(Word-level Adversarial ReProgramming)。与之前手工寻找或者学习离散token作为Prompt的方法不同,WARP直接优化embedding作为 Prompt,给予模型更高的自由度,并且在最终的下游任务中获得了更好的表现。

 目前提示调优已经展现出强大的能力,但是想要达到全模型微调的效果,需要一个巨大的模型(参数量在100亿以上)。然而超大的预训练模型在实际应用部署中存在较多的问题,目前实际应用中通常使用中型模型(参数量在1亿到10亿之间)。在这部分模型中,提示调优效果远低于全模型微调。2021年10月,Liu X等人受 prefix-tuning 启发,在P-tuning基础上进行改进提出 P-tuning v2。采用了深层实体调优,通过在不同层中添加标记,增加可以调节的参数量,解决 P-tuning 在复杂NLU任务中表现差的问题。
 

三. Prompt Engineering

Prompt Engineering (提示工程):不更新模型参数的前提下,通过输入文本等方法来操控大型语言模型(LLM)以指导其行为,引导其生成我们需要的结果。Prompt Engineering 专注于如何设计出最佳的prompt来引导用户,获得最理想的输入结果。

1. 包括以下步骤:

1)确定生成文本的主题或领域

2)设定生成文本的目标(提供信息,解决问题)

3)列出可能的问题或关键词,以引导大模型生成相关文本

4)对生成的文本进行评估和修改,以确保其符合预期的标准

2. 包含以下任何组成部分:

1)指令 - 你希望模型执行的具体任务或指令

2)背景 - 可以涉及外部信息或额外的背景,可以引导模型做出更好的反应

3)输入数据 - 是我们感兴趣的输入或问题,希望为其寻找回答

4)输出指标 - 表示输出的类型或格式

猜你喜欢

转载自blog.csdn.net/Zosse/article/details/130803824
今日推荐