Press "Enter" to skip to content

详细介绍:红到发紫的Prompt是什幺?【下】

本站内容均来自兴趣收集,如不慎侵害的您的相关权益,请留言告知,我们将尽快删除.谢谢.

Prompt预测步骤与数学描述

 

 

step1: Prompt Addition

 

这个步骤要完成两件事情:

 

 

    1. 选择一个模板,这个模板中要有两个空,一个空[x]用来填入输入的句子,另一个空[Z]为将来的预测结果。

 

    1. 在[x]中填入输入的字符串。

    1. 下图中最下面一行就是X’

 

step2: Answer Search

 

将X’输入语言模型,得到“最高分”输出

step3: Answer Mapping

 

LM得到的输出,可能与下游任务需要的输出标签不一致,比如在下面这个例子中说LM的最高分输出为【很】,应该对应下游任务的输出标签【正向】。将LM输出映射为输出标签的过程就是answer mapping

函数形式表达为:

这里的map函数也别称为 Verbalizer

 

Prompt 难题

 

对应prompt的三个步骤,需要解决以下三个问题:

 

 

    1. 输入端:怎幺样选取合适的Prompt,适配不同任务,同时把模型潜能激发出来(怎幺 把Prompt结合输入的句子构成模型的输入)

 

    1. 训练:怎样利用Prompt机制精调模型

 

    1. 输出端:模型的输出( Answer)可能与标签不同,拿到answer后如何往标准化的Y(标签空间)映射

 

 

Prompt 研究重点

 

1. Pre-trained Models :如何选择语言模型?

 

如何选择语言模型在第三范式时就已经是一个重要的问题了。语言模型可以分为从左至右的语言模型和双向的语言模型。

 

 

    1. Left-to-Right LM:从左至右的语言模型,是一种自回归模型,具有从左到右的顺序性,比如:“This is a good movie” good出现的概率与前面出现的单词有关。

 

    1. Bidirectional LM:双向的语言模型,用上下文来预测mask的值。比如 “This is a [mask] movie” ,mask的预测与整个句子都有关。

    1. 如果下游任务是翻译, 比如说 “ 好好学习,翻译成英文是:____” 需要预测的位置总在最右边,这就比较适合于 Left-to-Right的语言模型。如果下游任务是完形填空,比如说 “ 我去了北京?__ 我去了上海” 需要预测的位置在中间,与上下文都有关系,就应该选择一个双向的语言模型。

 

 

2. Prompt Enginering :如何构造模板?

 

在这一步中,首先需要考虑prompt的形式,然后决定采用手动还是自动的方式来创建Prompt。

 

prompt形式

 

有两种:

 

 

    1. 完形填空 cloze prompt : 用在如BERT-MLM式预训练模型上。如:「这个饼不错 ],太 [Z] 了。Z一般在句中

 

    1. 前缀提示 prefix prompt :用在如GPT2-3单向LM预训练模型上。如:「好好学习」,翻译成英文:[Z]一般在句末

 

 

选择哪种prompt 取决于任务和用于解决任务的模型。

对于有关生成的任务或使用标准自回归 LM 解决的任务,前缀 prompt 往往更有帮助,因为它们与模型从左到右的性质刚好吻合
对于使用掩码 (Mask) LM 解决的任务则完形填空 prompt合适,因为它们与预训练任务的形式非常匹配
全文本重建模型则可以与完形填空 prompt 或前缀 prompt 一起使用。

prompt创建方式

手工模板创建

手工制作模板的策略很直观,且可以在一定程度上准确地解决各种任务,但方法也存在一些问题:创建和对这些 prompt 进行实验需要大量的时间和经验,特别是对于一些复杂的任务,例如语义解析等即使是经验丰富的 prompt 设计者可能也无法手工发现最佳的prompt

自动化模板创建

自动化搜索的 prompt 可以进一步被分为离散 prompt(其中prompt 是一个实际的文本字符串)和连续 prompt(其中 prompt 直接在底层LM 的嵌入空间中进行描述。

3. Answer Engineering :答案如何映射到标签?

 

Answer 工程的目的是搜索一个 answer 空间 Z 和一个到原始输出 Y 的映射,从而得到一个有效的预测模型。需考虑的两个维度:确定 answer 形式和选择 answer 设计方法。

 

answer 形式

 

answer 的形式决定了它的粒度,一些常见的选择包括:

Token:预训练 LM 词汇表中的一个 token,或者词汇子集;
Span:短的 multi-token span,这些通常与 cloze prompt 一起使用;
句子或文档:这些通常与前缀 prompt 一起使用。

补充:token是分词后的基本单元,“我很开心”分词为“我,很,开心”,这里就是三个token。span是一个范围,可以是一个或多个token组成。下图中的开心就是由span表示的。

比较好理解的是,对于机器翻译这样的任务,比较适合用句子来描述答案,对于分类任务,比较适合和用span或者token来描述答案。

 

answer 设计方法

 

下一个需要回答的问题是,如果答案不用作最终输出,如何设计适当的答案空间Z,以及如何映射到输出空间Y。也就是将下图中的“很”映射为“正向”,不映射为“负向”。有两种创建方式:手动创建 answer 和自动搜索answer

4. Multi-Prompt Engineering :如何设计多个 prompt 获得更好的效果?

 

前面探讨的 prompt 工程方法主要集中于为输入构建单个 prompt。大量的研究表明,多重 prompt 可以进一步提升 prompting 方法的效果。常见的方法:

 

 

    1. prompt ensembling:集成学习,把多个prompt通过某种加权方法组合到一起。如图(a)

 

    1. prompt augmentation:启发式学习。对 prompt 进行数据增强。如图(b)

 

    1. prompt composition:将复合的prompt句子,拆解成多个小段prompt,最后再 组合在一起 训练。如图(C)

 

    1. prompt decomposition:由于一些任务的mask工作使用句子数量有限(如词性标注任务)固只能通过decomposition将一个句子拆分成多个部分后,再对每个部分做prompt 单独 训练。如图(D)

 

5. Prompt-based Training Strategies :模型参数如何训练?

 

在上一篇博客解释“为什幺Prompt最大的优点是适用于零样本学习”时,已经提到了模型训练参数的问题,在这一部分我们再详细展开来看一下每一种策略的优缺点。

 

在基于Prompt的下游任务学习中,通常存在两种类型的参数,即来自预训练模型的参数和Prompt的参数。根据(i) 底层LM的参数(LM params)是否被调优,(ii)是否有额外的与Prompt相关的参数(Additional),(iii)如果有额外的与提示相关的参数,这些参数是否被调优,总结了5种调优策略(如下图所示)。

Prompt less Fine-tuning:直接使用下游任务进行训练,不用prompt,更新预训练参数;优点:简单,不需要设计prompt;缺点:小数据集上容易过拟合或者不稳定
Tuning-free Prompting:基于prompt直接生成答案,无需调参。优点:简单高效;缺点:需要较重的prompt设计
Fixed-LM Prompt Tuning:固定预训练参数,调整prompt参数,使下游任务更好作
用于prompt的产生;优点:适合小样本学习;缺点:不适合零样本学习,prompt模版通常不再是人工设计的
Fixed-Prompt LM Tunin:固定prompt参数,调整预训练参数
Prompt+LM Fine-tuning:调整prompt参数,调整预训练参数。适合大数据集,小数据集易过拟合

简要介绍Prompt

OpenPrompt工具demo实现

加上本篇文章,笔者分别用三篇博客完成了下面这些内容的介绍,希望有所帮助。

 

参考:

 

国科大胡玥老师自然语言处理课件

 

https://mp.weixin.qq.com/s/vyKCCjAEbuOxpKOd6zhz3w

Be First to Comment

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注