目录

一、 NLP的两大巨变

二、 Prompting的正式描述

2.1 NLP中基于监督的学习

2.2 Prompting的基础

2.3 Prompting设计的几个方面

三、预训练语言模型

3.1 训练目标

3.2 噪声函数

3.3计算的方向

3.4典型的预训练方法

四、Prompt Engineering

4.1 Prompt Shape

4.2 手动prompt模板

4.3 自动prompt模板

五、 答案工程

5.1 答案形式

5.2 答案空间的设计方法

六、Multi-Prompt Learning

6.1 组合式提示

6.2 强化式提示

6.3 合成式提示

6.4 分解式提示

七、提示方法的训练策略

7.1 训练设置

7.2 参数更新方法

八、应用

8.6 应用于文本生成

8.7 应用于文本生成的评估

Reference


一、 NLP的两大巨变

基于完全监督的学习,即只在目标任务的输入输出例子的数据集上训练特定任务的模型,已经在机器学习各领域上充分发挥了作用,NLP也不例外。为了学习高质量的模型,早期的NLP模型主要依赖于特征工程,即工程师利用其专业知识来定义提取原数据集,从而在学习中能被注意到。随着神经网络模型的出现,特征提取与模型的训练可以同步进行,问题的侧重点转移到了架构工程上,即构建合适的网络模型来提取数据特征。

近些年新兴的基于预训练、微调的范式正取代以往的学习方式,这也成为了NLP领域的第一次巨变。这个范式下,一个具有固定架构的模型被预训练为语言模型(LM),而后基于大量原始数据集的LM可以学习到可适用于普遍任务的通用特征。之后通过引入额外的参数及特定任务的目标函数来进行微调从而适应下游任务。问题转移到了目标工程上,即选择合适的训练目标适用于预训练和微调两个阶段(如损失函数)。

如今我们正处于第二次巨变中,即“预训练微调”结构正在被“预训练、提示和预测”结构取代,即通过一些提示信息如填空、翻译等,通过无监督的方式训练单一的LM直接用于解决大量的问题。通过提示来控制模型的行文,问题也就转移到了提示工程,即找到最合适的提示。

二、 Prompting的正式描述

2.1 NLP中基于监督的学习

利用条件概率P(y|x;\theta)预测,其中x为输入,y为输出。通过包含输入输出的数据集来学习模型的参数\theta,要求我们有完整的数据集。

2.2 Prompting的基础

想法的最初来源于我们没有大量的数据来进行有监督的学习。prompting通过学习一个LM对输入文本本身的概率进行建模,预测y的概率。共分为添加提示、搜索答案、答案映射三个步骤。

2.2.1 Prompt Addition

定义一个构造函数x=f_{prompt}(x)将输入文本x修改为LM中使用的模式串。

构造函数共两步:1.应用一个模板,共有两个槽一个是输入槽[X]一个是答案槽[Z],后者用于存放升温答案文本,以后将映射到y。2.用输入文本x填入槽[X]中。

其中槽的数量可以根据不同任务改变,答案槽在文本中间的称作cloze prompt,在末尾被称作perfix prompt

2.2.2 Answer Search

搜索得分最高的答案,使整个LM得分最大

定义函数f_{fill}(x^{'},z)为在x’的答案槽中填入词z,同时对每一个可能的答案z给一个分类用的分数,如Z={开心,平静,难过,死去活来}->{++,+,-,--}。

最后定义搜索函数\hat{z} = searchP(f_{fill}(x^{'},z);\theta) \ \ \ \ z\in{Z}

搜索函数可以使搜索搜索最高分输出的argmax搜索也可以是按照LM概率分布随机生成输出的抽样。

2.2.3 Answer Mapping

从得分最高的答案z到最高分对应的输出y在答案为一时是一样的(翻译等NLG任务),在有多个答案时(如同义词)就要在搜索到的答案和输出值间构造一个映射。

2.3 Prompting设计的几个方面

1.预训练模型

2.提示工程 即如何构造f_{prompt}函数

3 答案工程 不同任务对应的Z集合不同

4 拓展范式 将上述框架进行拓展

5 基于Prompt来训练参数

三、预训练语言模型

3.1 训练目标

预训练LM的主要任务几乎都包括对一段文本x的预测概率目标。

Standard Language Model(SLM)目标即使训练模型以优化语料库中文本的概率P(x),通过自回归预测,通常为从左至右。

替代SLM的一种方法为降噪目标,利用噪声函数修改输入文本,在降噪文本下预测原句子的概率,共有两种常见形式。

Corrupted Text Reconstructed(CTR)仅对输入句子的噪声部分计算损失,将文本恢复至未损失的状态。

Full Text Reconstruction(FTR)计算整个输入文本的损失来重构文本,无论其是否经过噪声处理。

训练目标在确定其对特定提示任务的适用性起着重要作用。如SLM更适合于prefix prompt,CTR、FTR更适合cloze prompt;SLM和FTR更适合文本生成任务。

3.2 噪声函数

mask在不同层次上用一个特殊token替代原词,一个或多个,可以随机选择也可以人为设计。

Replace用另一个token替换原词。

Delete将若干个词从文本中删除,不增加其他token。

Permutation将文本先分块再排列。

3.3计算的方向

分为从左到右、双向、混合、随机几种情况,主要利用注意力模型中的masked参数实现。

3.4典型的预训练方法

由前三个因素的不同组合产生各种训练方式,主要介绍四种方式:

3.4.1 L2R

从左至右的模型 ,利用P(X) = P(x_1)* \dots P(x_n|x_1 \dots x_{n-1}),太老了几乎用不到。

3.4.2 Mask LM

利用上下文预测mask片段P(x_i|x_1, \dots x_{i-1},x_{x+1} \dots x_{n})表示周围语境下这个单词的概率。主要应用与NLU或分析任务,主要表示为cloze任务,其一直作为预训练模型的首选。

3.4.3 Prefix and Encoder-Decoder

主要针对于文本生成任务,共同点是利用全连接的mask编码器对源x预测,再对目标y进行自回归解码。前者两部分参数一样,后者不共享参数。利用prompt我们可以将其他非生成任务迁移到文本生成任务中。

四、Prompt Engineering

即构建prompt函数的过程,为我们针对不同任务找到合适的生成提示的方法,首先考虑提示的形状是什么样子,再考虑人工还是自动生成这种样子的提示。

4.1 Prompt Shape

prefix和cloze如何选择要根据任务和模型。生成任务和SLM模型更适用于prefix prompt,而mask类LM的任务在cloze prompt更合适,这都是因为他们的结构更和任务匹配。FTR模型两者都可以使用。多输入的任务要把提示个数变为多个。

4.2 手动prompt模板

根据人类的手动创建模板非常直观,但需要大量的经验,甚至很多时候我们经验不够。

4.3 自动prompt模板

为了解决手工设计模板的缺点,许多研究开始探究如何自动学习到合适的模板。自动学习的模板又可以分为离散(Discrete Prompts)和连续(Continuous Prompts)两大类。

4.3.1离散prompts

又称硬prompt,适用于自然语言短语,下面提供几种方法:

D1 Prompt Mining 基于挖掘的prompt方法,对大型文本语料库找和x,y相关的画,然后利用中间词构建模板如“[X]中间词[Z]”

D2 Prompt Paraphrasing 基于释义的,主要采用现有的种子prompts(例如手动构造),并将其转述成一组其他候选prompts,然后选择一个在目标任务上达到最好效果的。一般的做法有:将提示符翻译成另一种语言,然后再翻译回来;使用同义或近义短语来替换等。

D3 Gradient-based Search. 梯度下降搜索的方法是在单词候选集里选择词并组合成prompt,利用梯度下降的方式不断尝试组合,从而达到让PLM生成需要的词的目的。

D4 Prompt Generation. 既然Prompt也是一段文本,那是否可以用文本生成的方式来生成Prompt呢?该类方法就是将标准的自然语言生成的模型用于生成prompts了。例如,Gao等人将T5引入了模板搜索的过程,让T5生成模板词;Ben-David 等人提出了一种域自适应算法,训练T5为每个输入生成一种唯一的域相关特征,然后把输入和特征连接起来组成模板再用到下游任务中。

D5 Prompt Scoring. Davison等人在研究知识图谱补全任务的时候为三元组输入(头实体,关系,尾实体)设计了一种模板。首先人工制造一组模板候选,然后把相应的[X]和[Z]都填上成为prompts,并使用一个双向LM给这些prompts打分,最后选取其中的高分prompt。

4.3.2 连续prompts

又称软prompt,构造prompt的目的是让机器明白,而非人类,所以没必要利用人类能理解的自然语言来构造prompt。连续型prompts去掉了两个约束条件:

(1)模板中词语的embedding可以是整个自然语言的embedding,不再只是有限的一些embedding。(2)模板的参数不再直接取PLM的参数,而是有自己独立的参数,可以通过下游任务的训练数据进行调整。

目前的连续prompts方法大致可以分为下面几种:

Prefix Tuning. Prefix Tuning最开始由Li等人提出,是一种在输入前添加一串连续的向量的方法,该方法保持PLM的参数不动,仅训练合适的前缀(prefix)。它的形式化定义是,在给定一个可训练的前缀矩阵M_{\phi}和一个固定的参数化为\theta的PLM的对数似然目标上进行优化。

上式表示在时间步i处神经网络所有层的参数。

对于在前缀内的时间步,直接在矩阵中复制对应项,不在的话就利用预训练LM计算。

Tuning Initialized with Discrete Prompts. 这类方法中连续prompts是用已有的prompts初始化的,已有的prompts可以是手工设计的,也可以是之前搜索发现的离散prompts。Zhong 等人先用一个离散prompt搜索方法定义了一个模板,然后基于该模板初始化虚拟的token,最后微调这些token的embedding以提高准确率。

Hard-Soft Prompt Hybrid Tuning. 这类方法可以说是手工设计和自动学习的结合,它通常不单纯使用可学习的prompt模板,而是在手工设计的模板中插入一些可学习的embedding。

Liu等人提出了“P-Tuning”方法,通过在input embedding中插入可训练的变量来学习连续的prompts。并且,该方法使用Bi-LSTM的输出来表示prompt embeddings,以便让prompt tokens之间有一定的交互。

P-tuning还引入了任务相关的anchor tokens(例如关系提取中的“capital”)来进一步提高效果,这些anchor tokens不参与后续的调优。Han等人提出了Prompt Tuning with Rules(PTR)方法,使用手工指定的子模板按照逻辑规则组装成完整的模板。

为了增强生成的模板的表示能力,该方法还插入了几个虚拟token,这些虚拟token的embeddings可以和PLM的参数一起被调整,PTR的模板token既有实际token也有虚拟token 。实验结果证明了该方法在关系分类任务中的有效性。

五、 答案工程

这部分旨在生成答案的可行解空间Z和其到我们需求输出y的映射。

5.1 答案形式

答案形式我们通常用以下三种构成

token 一个或多个预训练模型词典中的词

span 一个短的span由几个token组成,多用于cloze prompt

sentence 一个句子或一段文本,多用于prefix prompt

形状的选择取决于任务,如文本生成任务常选择长短语或句子

5.2 答案空间的设计方法

5.2.1 人工设计

答案空间Z和输出空间Y的映射关系由人的经验设计

无约束空间 Z直接由所有的token及其构成的短语句子组成,此时Y和Z一样直接输出即可

有约束空间 答案Z的列表由各类词语构成,此时要建立到Y的映射关系

5.2.2 离散答案搜索

类似于搜索提示时我们的方法策略,这部分主要是考虑如何自动构造一个答案空间

答案意译 初始一个答案空间Z‘,然后将其扩大范围,一个答案z’他所扩展生成的集合为para(z'),假设答案关系为<z',y>,那么答案的概率可以计算为P(y|x) = \sum\limits_{z\in para(z^{'})}P(z|x),生成扩展集合的方法可以是译成别的语言再译回来。

搜索剪枝 先产生一个由几个可信答案组成的初始修建过的答案空间,再使用一种算法在这个空间上进一步搜索得到最终答案集,利用一种语言表达器(verbalizer)。原文给出多种方法,主要是计算每种答案得分再选择,一种使用方法可参考[3]。

标签分解 在关系抽取任务(RE)中,将标签分解单个词再计算他们的概率之和作为当前标签的概率,并将这几个词直接作为答案。如per:city-of-death可分解为{person, city, death}。

5.2.3 连续答案搜索

类似于之前连续的prompt搜索,

六、Multi-Prompt Learning

想法主要是使用多个提示进一步提高提示的效果,该方法称作多提示学习方法。

6.1 组合式提示

针对一个输入使用多个未回答的提示从多个角度进行提示来进行预测。优势有三点(1)利用不同提示的互补优势(2)减轻工程成本,不用筛选好的提示(3)稳定下游任务的性能,问的多学的也就好

均化平均法 对多个提示的概率求平均,可以选准确度最高的前K个

多数投票法 对于分类任务可以采用,其需要有效票过半数才认可,在多个分类器 对某一类别进行预测的情况下,只会预测高于总结果一半的部分。

文本生成的提示合集 在生成任务,在没有大型开发集的情况下,很难确定哪些 PVP 表现良好。为了解决这个问题,论文使用了类似于知识蒸馏的策略。首先,先人工定义一个对任务有意义的PVPs集合P,然后:(1)对于P中每一个pattern,都微调一个模型,在小样本背景下,这种微调可以快速完成。(2)使用所有模型对无标注数据集D进行预测,并将得到软标签概率加权求和。(3)使用加权后的标签概率为未标注数据打上软标签,对新的训练集(软标签)进行正常的微调(接一个额外的句子分类头)。

知识蒸馏法 深度学习中提出的知识蒸馏法是通过多个模型精炼成一个模型,一种想法是对每种手动创建prompt模板-答案对训练一个模型,再使用这个模型的集合来标注一个未标注数据集,再从这个新的数据集中训练一个模型。[5] [6]

6.2 强化式提示

让他现看到一点东西,演示提示的东西是什么,因此这种方法也被称作demonstration \quad learning 演示学习。如“中国的首都是[Z]”可以演示给他一个例子“日本的首都是东京”。寥寥无几的演示利用了强大的语言模型学习重复模式的能力。

存在两个问题:(1)如何选择最有效的例子 (2)如何根据prompt对例子进行排序(研究显示这对模型的性能起着重要作用)

样本选择 不同的样本选择会产生不同的效果,这个范围可以是精确的高水平样本和近乎随机的样本

样本排序 给他看的顺序不同也会影响效果,有人[7]将随机orders(24个)利用基于熵的方法对不同的候选排列组合进行评分进行排序,选择最优的 method

6.3 合成式提示

对一个可组合的任务可以由更基本的子任务组成,也可以用多个子提示针对多个子任务来合成一个复合提示,简而言之就是化繁为简,拆成一步一步来

6.4 分解式提示

对一个样本进行多种预测任务时(如序列标注),将一个提示分解成子提示

最后两个我的理解就是6.3是对任务分解,逐个提示合成大提示;6.4是将提示分解

七、提示方法的训练策略

这部分研究我们获得了提示后怎么训练模型

7.1 训练设置

如果我们的任务和我们的提示部分吻合的话可以直接应用这个模型对文本的预测概率,而不进行任何下游的调整,这样的方法为zero-shot

也有一些方法是在prompt模型基础上再加了一些数据辅助,有大量数据学习的方法,也有少量数据的few-shot方法,之前提到过的PET范式是后者的一种,产生的原因也是由于没有大量的训练数据来说明所需的行为。

此外第4节中有关提示工程部分,标注数据在下游任务中虽没有参与训练,但参与了提示的构建或验证,不是绝对的zero-shot学习。

7.2 参数更新方法

我们在下游任务中收到了来自预训练LM和prompt两部分的参数,选择更新哪部分决定了不同的方法。

7.2.1 无提示的微调

和传统的微调一样,简单但在小数据集上可能会过拟合

7.2.2 无微调的提示

适用于zero-shot,直接将答案输出,效率高不用更新参数但在前期训练为追求高精度要大量训练

7.2.3 固定LM参数

改变提示参数不改变预训练LM参数。类似于第一种且精度更高,保留了LM中的知识,适用于few-shot不适用于zero-shot,此时prompt的选择就更为重要。

7.2.4 固定prompt参数

适用于few-shot的情况,使用固定参数的提示来规定模型的行为,对LM进行微调。典型的例子由PET-TC、PET-Gen、LM-BFF等,研究显示把答案工程和LM微调结合可以减少提示工程,比如“空提示”将[x] [z]直接相连,显示了有一定竞争力的准确性。

这种方法在few-shot上表现好,但存在难以迁移到别的任务上的问题。

7.2.5 LM+prompt 微调

二者一起调整,这是效果最好的方法,代表的有PADA、P-Tuning,优点是适用于高数据量的环境、且在训练开始时由prompt提供了自举(bootstrapping) ,缺点是需要存储和训练所有的参数,还可能在小数据集上过拟合。

八、应用

8.6 应用于文本生成

8.7 应用于文本生成的评估

Reference

[1] NLP 新宠:谈Prompt的前世今生_BAAIBeijing的博客-CSDN博客

[2] 《Prefix-Tuning: Optimizing Continuous Prompts for Generation》阅读笔记 - 知乎

[3] 文本分类任务中,将知识融入Prompt-tuning过程 - 知乎

[4] 论文笔记:Exploiting Cloze Questions for Few Shot Text Classification and Natural Language Inference_北在哪的博客-CSDN博客

[5] Few-Shot Text Generation with Pattern-Exploiting Training - 知乎

[6] 论文笔记:Making Pre-trained Language Models Better Few-shot Learners_北在哪的博客-CSDN博客

[7] https://arxiv.org/abs/2104.08786

[8] 【论文泛读138】BARTScore:将生成的文本评估为文本生成_scu-liu的博客-CSDN博客

【NLP】Pre-train,Prompt,and Predict相关推荐

  1. 【NLP】讯飞英文学术论文分类挑战赛Top10开源多方案–4 机器学习LGB 方案

    1 相关信息 [NLP]讯飞英文学术论文分类挑战赛Top10开源多方案–1 赛后总结与分析 [NLP]讯飞英文学术论文分类挑战赛Top10开源多方案–2 数据分析 [NLP]讯飞英文学术论文分类挑战赛 ...

  2. 【NLP】讯飞英文学术论文分类挑战赛Top10开源多方案--2 数据分析

    目录 相关信息 1 赛题 2 数据分析 2.1 加载数据 2.2 查看缺失值 2.3 标签分布 2.4 文本长度 2.5 标题摘要合并后字符长度 3 总结 相关信息 [NLP]讯飞英文学术论文分类挑战 ...

  3. 【NLP】语言模型和迁移学习

    10.13 Update:最近新出了一个state-of-the-art预训练模型,传送门: 李入魔:[NLP]Google BERT详解​zhuanlan.zhihu.com 1. 简介 长期以来, ...

  4. 【NLP】Google BERT详解

    版权声明:博文千万条,版权第一条.转载不规范,博主两行泪 https://blog.csdn.net/qq_39521554/article/details/83062188 </div> ...

  5. 【NLP】讯飞英文学术论文分类挑战赛Top10开源多方案–5 Bert 方案

    目录 1 相关信息 2 引言 3 实现 3.1 数据预处理 3.2 Bert 4 提分点技巧讲解 5 未来展望 1 相关信息 [NLP]讯飞英文学术论文分类挑战赛Top10开源多方案–1 赛后总结与分 ...

  6. 【NLP】⚠️学不会打我! 半小时学会基本操作 8⚠️ 新闻分类

    [NLP]⚠️学不会打我! 半小时学会基本操作 8⚠️ 新闻分类 概述 TF-IDF 关键词提取 TF IDF TF-IDF TfidfVectorizer 数据介绍 代码实现 概述 从今天开始我们将 ...

  7. 【NLP】⚠️学不会打我! 半小时学会基本操作 5⚠️ 家暴归类, 妈妈再也不同担心我被家暴啦

    [NLP]⚠️学不会打我! 半小时学会基本操作 5⚠️ 家暴归类, 妈妈再也不同担心我被家暴啦 概述 数据介绍 词频统计 朴素贝叶斯 代码实现 预处理 主函数 概述 从今天开始我们将开启一段自然语言处 ...

  8. 【NLP】讯飞英文学术论文分类挑战赛Top10开源多方案--6 提分方案

    目录 1 相关信息 2 引言 3 提分技巧及实现 3.1 数据增强 3.2 投票融合 3.2 伪标签 4 加快训练 4.1 混合精度训练 4.2 加速训练的其他技巧 4.2.1 有用到的加速策略 4. ...

  9. jieba tfidf_【NLP】【三】jieba源码分析之关键字提取(TF-IDF/TextRank)

    [一]综述 利用jieba进行关键字提取时,有两种接口.一个基于TF-IDF算法,一个基于TextRank算法.TF-IDF算法,完全基于词频统计来计算词的权重,然后排序,在返回TopK个词作为关键字 ...

  10. 【NLP】Transformer详解

    [NLP]Transformer详解   Transformer在Google的一篇论文Attention is All You Need被提出,为了方便实现调用Transformer Google还 ...

最新文章

  1. visual paradigm 表示选择关系_css3选择器用法介绍
  2. Java源码下载和阅读(JDK1.8/Java 11)
  3. grep awk sed 实例
  4. Python numpy hstack() vstack() stack() dstack() vsplit() concatenate()函数用法和区别
  5. 计算机应用基础第二版在线作业c,计算机应用基础作业二(答案)
  6. 在SQL Server2005中进行错误捕捉
  7. IIC驱动5150遇到麻烦
  8. 消除桌面虚拟化应用的存储瓶颈
  9. 【OpenCV】OpenCV函数精讲之 -- 图像容器Mat
  10. 控制台输出HelloWorld案例
  11. 软件欺诈的骗局揭露:“替罪羊”究竟是如何构建的?
  12. NYOJ的水题--括号匹配问题
  13. git 配置beyond compare
  14. Ubuntu X64 系统安装配置编录
  15. C语言中取值符(*)与取地址符()
  16. makefile终极目标
  17. Android Retrofit
  18. C# 从零开始写 SharpDx 应用 初始化dx修改颜色
  19. winsxs探索之组件的本质:文件与注册表
  20. IEEE 公布「AI十大潜力人物」名单,韩松、王威廉、杨迪一、方飞、张含望等入选 | AI日报...

热门文章

  1. 分享一种Android端IM即时通讯智能心跳算法
  2. 机器学习第三章笔记——决策树
  3. FPGA之VGA转HDMI之编码模块的编写
  4. magento 货币换算
  5. python中if brthon环境安装包_python-模块系列
  6. [转载]拥抱Jini:从Starter Kit 2.0开始(第二部分)
  7. 2022年度变更调查数据处理工具箱
  8. Java 12位uuid_java如何生成12位永远不重复的数字
  9. MSRA提出通用文档预训练模型LayoutLM,通往文档智能之路!
  10. 第五章 软件项目成本管理