欢迎光临散文网 会员登陆 & 注册

Prompt Learning学习总结

2023-04-03 11:54 作者:LEKNIGHT  | 我要投稿

摘要:由于个人研究学习需要,对Prompt Learning、NLP和预训练模型的一些基本概念进行了学习总结。

NLP

概念:(NLP:Natural Language Processing)自然语言处理,让计算机读懂人类语言,将人的语言转换为计算机可以阅读的指令

基础应用:

  • 序列标注问题:分词;词性标注;命名实体识别(使用BIO序列标注方法)eg:“我在北京大学读书”,输出:OOBIIIIBI

  • 关键词提取:提取句子意思

  • 关系提取:抽取句子中的实体和关系,生成实体和实体的关系

  • 事件提取:提取文本中的事件

  • 文本相似度:计算文本之间的相似度

  • 文本分类

  • 文本表示:文本向量化、文本数值化

因此,本文中主要用到的将会是NLP中的关键词提取应用。不过提示学习可以实现在零样本或少样本的场景中获得良好的任务效果。所以尝试了提示学习

预训练模型

概念:将NLP领域研究提升到了一个新的阶段,无需人工标签,可以从海量的语料中学习到通用的语言表示,并显著提升下游的任务效果。


第一代预训练模型:预训练词向量

Word2Vec,CBOW和Glove等从无标注语料中训练得到词向量的模型可以视为第一代预训练模型;这类模型结构简单,但往往也能得到高质量的词向量,这类词向量能够捕捉到潜在的文本中词之间潜在的语法和语义信息。

尽管在许多NLP任务中都有广泛的应用,但这类预训练词向量无法随上下文而动态变化。此外,在下游任务中,其余的模型参数仍然需要重新训练。

第二代预训练模型:预训练的编码模型

第一代预训练模型得到的是上下文无关的embedding,不可避免的遇到1.1 中所提到的问题. 而第二代预训练模型通常得到的是上下文相关的 embedding, 词的语义信息随上下文而变化。有研究者在机器翻译任务中使用LSTM作为编码器,训练Seq2Seq模型得到的词向有效的提升的下游许多任务。更进一步,基于双向LSTM,研究者提出了ELMO模型,产出的上下文的语义表示对下游许多任务的效果有明显提升。然而这些早期的预训练模型通常被用作特征提取器来提取上下文相关的词向量,然后再应用于下游任务,这些模型的参数往往是固定的,主模型的参数仍然需要从头训练。

ULMFiT模型尝试在文本分类任务使用微调预训练模型的方法并取得了最优的效果。模型主要包括三部分:(1)在通用语料上预训练的语言模型(2)在目标任务相关的数据集上微调语言模型(3)在目标数据集上进行微调相关参数(如分类层等)。ULMFiT还研究了不同的微调策略,包括逐步微调,三角学习率和逐步解冻。从ULMFiT开始,微调已经称为预训练模型应用于下游任务的主要方法。

随着Transformer的引入,结构更复杂,层数更多的预训练语言模型受到了更多的关注,典型代表为GPT以及BERT等相关的模型。

预训练语言模型任务分类

监督学习(无标签),无监督学习(有标签),自监督学习(有+无混合,有标签也是自动生成的)。

Language Model(语言模型)


Masked Language Modeling(带掩码机制的语言模型)

概念:为了克服无向语言模型存在的缺点,MLM将文本中部分token遮盖,通过使用其余的token来预测被遮盖的token来训练模型。然而,这种方法会导致预训练阶段和微调阶段的不一致,因为被遮盖的token不会出现在微调(Fine tuning)阶段。为了缓解这一问题,研究者提出了一个trick: 在待遮盖的token中,使用[MASK] 表示80%的情况,10%用随机的一个token代替,10%并不进行遮盖。

预训练模型分类体系:

<img src="https://pic1.zhimg.com/80/v2-09ed8168759a57ae2ce68fba54773e88_720w.webp">


预训练模型应用于下游任务

Transfer Learning(迁移学习)

迁移学习通常是将知识从一个领域迁移到另一个领域。在NLP领域中有许多的迁移学习方式,如领域自适应,跨语言学习,多任务学习。将PTM应用到下游任务是一个序列迁移的任务,即这些任务需要顺序的从中学习并且目标任务带有标签信息。

Fine-Tuning(微调)

一般有两种方式对模型进行迁移:特征提取(模型参数固定)和微调(模型参数参与微调)。采用特征提取的方式,需要将预训练模型视为特征抽取器,同时还需要暴露模型中间层,但这种方式需要针对目标任务设计复杂的网络结构,因此针对目标任务进行微调就称通用的方法。

附:BERT模型

BERT(Bidirectional Encoder Representations from Transformers) 是一个语言表示模型(language representation model)。它的主要模型结构是trasnformer的encoder堆叠而成,它其实是一个2阶段的框架,分别是pretraining,以及在各个具体任务上进行finetuning。 pretaining阶段需要大量的数据,以及大量的计算机资源,所以google开源了多国的语言预训练模型,我们可以直接在这个基础上进行finetune。

Prompt Learning

背景:在很长一段时间内,NLP的任务采用的都是Pretrain + Fine-tuning的解决方案,但是这种方案,需要对每个任务都重新fine-tune一个新的模型,且不能共用。对于一个预训练的大预言模型来说,这就仿佛是对每个任务都进行了定制化,十分不高效。是否存在一种方式,可以将预训练语言模型作为电源,不同的任务当作电器,仅需要根据不同的电器(任务),选择不同的插座,对于模型来说,即插入不同的任务特定的参数,就可以使得模型适配该下游任务。Prompt Learning 就是这个适配器,它能高效得进行预训练语言模型的使用。

传统Model Tuning和Prompt Tuning的区别:

如下图:左侧为传统Model Tuning,主要过程为将预训练模型分别用于不同任务的训练,得到不同的针对性的模型参数,另外Fine-tuning随着模型规模逐渐增大,不再容易;而右图中Prompt Tuning则是直接对预训练模型中的参数进行操作,通过对参数添加标签的方式实现不同任务能够在同一组模型上训练,可以大大缩短训练时间,也极大提升了模型使用率(另外Prompt Learning还有一个优点:小样本学习,是GPU资源受限的研究者的福音)。

两者本质区别是Fine-tuning强迫上游任务适配下游任务,Prompt Tuning强迫下游任务适配上游任务


严谨定义:Prompt是一种为了更好的使用预训练语言模型的知识,采用在输入段添加额外文本的技术。

Prompt Learning的工作过程

  1. Prompt模版(Template)的构造

  2. Prompt答案空间映射(Verbalizer)的构造

  3. 文本代入template,并且使用预训练语言模型进行预测

  4. 将预测结果映射回label



过程描述:首先,需要人为设计Prompt模版,以此图为例,模板为[x], Overall, it was a [z] movie,[x]:是用户的输入,[z]输出。构造好模版后,还需要人为构造答案映射空间,即输入后,将模版放入训练模型得出[z]结果,需要将[z]映射为我们所期望的结果,例如上图需要将输出的形容词汇映射为两个标签(笑脸、苦脸)。然后,构造好前两者,用户输入值[x],将模版放入人为选择的预训练任务得到输出[z],并将[z]经过答案映射表得到最终结果。

尚存问题:

  1. 具体细节尚不清楚,例如预训练模型是对大量数据的学习,那其输出是什么?预训练模型的输出与加入Prompt Learning后的输出有什么区别(大概是加Prompt Learning会结果更好一些?);

后续需要查阅的资料:

Prompt Learning和预训练模型的具体过程;Prompt Learning的主要优势

参考资料:

[1]    https://zhuanlan.zhihu.com/p/144927093 预训练语言模型综述

[2]    https://zhuanlan.zhihu.com/p/442486331 【NLP】Prompt Learning 超强入门教程

[3]    https://zhuanlan.zhihu.com/p/582333142 Prompt Learning(提示学习)简介与发展



Prompt Learning学习总结的评论 (共 条)

分享到微博请遵守国家法律