百科问答小站 logo
百科问答小站 font logo



如何看待NLP领域最近比较火的prompt,能否借鉴到CV领域? 第1页

  

user avatar   chen-jia-yu-65-36 网友的相关建议: 
      

最近NLP领域提出了Prompt新范式,企图革新原先的Fine-tuning方法,而在CV领域中,Prompt其实可以理解为图像label的设计,从这个角度看,Prompt(预测文本中mask的字符,类似完形填空)其实是介于Image caption(迭代预测出每一个字符)和one-hot label(one-hot可以认为是prompt的特例,单字符通过text encoder编码成one-hot)之间的任务。最近在Visual-Language Model(缩写VLM)任务中,prompt开始展现出强大的能力。

本文首先介绍一下prompt和fine-tuning范式本质上有什么区别,然后介绍一下NLP中基于prompt的PET和AutoPrompt方法,最后介绍一下VLM任务中应用prompt范式的CLIP和CoOp方法。

另外,CLIP和CoOp都是基于prompt的判别式VLM方法,最近还有几篇基于prompt生成式VLM方法,基于prompt的生成式VLM和基于prompt的NLP方法非常类似,本文就不展开细讲了,放一下文章链接

Unifying Vision-and-Language Tasks via Text Generation

Multimodal Few-Shot Learning with Frozen Language Models

Prompt vs Fine-tuning

(引用刘鹏飞大佬的原话刘鹏飞:近代自然语言处理技术发展的“第四范式”)

图中,圆形表示预训练语言模型,矩形框表示的是各种下游NLP任务。那么,我们就有这样一句话:大家都是希望让 预训练语言模型和下游任务靠的更近,只是实现的方式不一样。

Fine-tuning中:是预训练语言模型“迁就“各种下游任务。具体体现就是上面提到的通过引入各种辅助任务loss,将其添加到预训练模型中,然后继续pre-training,以便让其更加适配下游任务。总之,这个过程中,预训练语言模型做出了更多的牺牲。

Prompting中,是各种下游任务“迁就“预训练语言模型。具体体现也是上面介绍的,我们需要对不同任务进行重构,使得它达到适配预训练语言模型的效果。总之,这个过程中,是下游任务做出了更多的牺牲。

下面讲一下NLP中的两个前置工作PET和AutoPrompt,这两个工作对于Visual-Language Model任务的启发是非常大的。

PET

PET是第一个将prompt训练的语言模型应用到下游任务的方法,并且把prompt范式规范化,给后续prompt范式的研究提供了示范。

PET的设计流程如下:

1.预先设置多种prompt,其中包含需要预测的文字(比如上图中的Best pizza ever! It was ___.其中It was就是预先设置的prompt,可以替换成其他的prompt),然后将多种prompt送入不同的PLM模型中进行训练,最终得到多个PET模型。

2.将需要预测的文本送入多个PET模型中进行推理,综合多个PET模型结果得到soft label。

3.把需要预测的文本和soft label放到分类器中进行训练,得到最终的文本分类模型。

AutoPrompt

PET构建的prompt是人为设计的,这可能会导致设计的prompt不够合理。AutoPrompt提出在构建prompt时通过网络自动化学习出Trigger Tokens [T] [T] [T] [T] [T],优化目标是加入合适的token之后,预测结果越来越倾向于正确结果(比如上图中,token为atmosphere alot dialogue clone totally时,positive的概率越高)。

CLIP

OpenAI从网络收集了4亿数据量的图片文本对用于CLIP训练,最后进行zero-shot transfer到下游任务达到了非常好的效果(关于zero-shot learning可以看我之前的文章ViLD:超越Supervised的Zero-Shot检测器)。

简单回顾一下CLIP的使用流程:

1.如图(1)所示,CLIP将一批文本通过Text Encoder编码成一批word embedding,将一批图片(与文本一一对应)通过Image Encoder编码成一批feature embedding,然后将对应的word embedding和feature embedding先归一化然后进行点积得到相似度矩阵,点积数值越大,代表word embedding和feature embedding的向量越相似,这里的监督信号就是矩阵对角线为1,其余位置为0。其中Text Encoder使用的是Transformer,而Image Encoder使用ResNet50和ViT两种架构其中一个,Image Encoder和Text Encoder都是从头训练。

2.然后将预训练好的CLIP迁移到下游任务,如图(2)所示,先将下游任务的标签构建为一批带标签的文本(例如 A photo of a {plane}),然后经过Text Encoder编码成一批相应的word embedding。

3.最后将没有见过的图片进行zero-shot预测,如图(3)所示,通过Image Encoder将一张小狗的图片编码成一个feature embedding,然后跟(2)编码的一批word embedding先归一化然后进行点积,最后得到的logits中数值最大的位置对应的标签即为最终预测结果。

从CLIP的流程中可以看出,CLIP和PET的prompt使用方式非常相似,A photo of a就是一个人为设计的prompt。

CoOp

CoOp明显是受到了AutoPrompt的启发,并且CoOp发现CLIP实际上就是prompt在visual-language model中的一个应用,于是CoOp在CLIP的基础上进一步进行改进。

CoOp先在四个数据集上做实验,发现更合理的prompt能够大幅度的提升分类精度尤其是使用了本文提出的CoOp之后,最终的分类精度远超CLIP人为设计的prompt。

和CLIP的主要不同之处在于,CoOp在CLIP的第二个阶段中引入了context optimization。具体的,CoOp将prompt设计为:

其中每个向量跟word embedding的维度相同,可以理解为可学习的context,并且所有类别对应的context共享参数。

将learnable context和不同类别的word embedding拼接起来送入text encoder中进行训练,优化目标是使得和图片对应的prompt预测分数最大。训练完成后,learnable context的参数就固定下来了。

Other Variants

作者还尝试了两种变体:

一种是prompt可以在需要预测的class前后都插入learnable context,这可以增加prompt的灵活性。

另一种是设计class-specific context(CSC),也就是所有类别的prompt参数独立,在一些细粒度分类任务中效果更好。

CoOp vs CLIP

从11个数据集的实验中可以看出,CoOp均超过了CLIP,并且在一些数据集上,大幅度超过CLIP。证明了可学习的prompt优于人为设计的prompt。CoOp提出的两种变体,在一些数据集中效果更好。

CoOp vs Prompt Ensembling

将CoOp和PET中提出的Prompt ensembling进行比较,CoOp也展现出了优越性。

CoOp的影响因素

从上面的实验中可以看出,CoOp对于噪声的鲁棒性优于CLIP。

从上面的实验中可以看出,context length长度越长,CoOp效果越好;backbone模型越大,CoOp效果越好。

Random vs. manual initialization

这个对比实验相当的精髓,也就是说learnable context的初始化prompt是什么没那么重要,随机初始化就能达到精调初始化相当的精度。

总结

因为CoOp是class-level的自适应,不能根据输入图片的不同动态变化prompt,如果能够根据输入图片动态调整prompt的话,也就是instance-level的自适应,可能会有奇效。learnable context的作用类似于去噪,让网络拟合噪声,使得预测部分的关注区域更为干净。感觉learnable context和DETR中的object query的功能非常相似,都是任意学习出信息,只根据最后的监督信号更新参数。后续可以挖掘一下如何控制learnable context的学习,来提升基于prompt的VLM性能。生成式的VLM也可以探索一下如何设计prompt更合理。

另外就是纯CV方向的prompt,也就是类似于ViT将图片拆分patch,每个patch实际上可以看成一个字符,那么也可以设计patch的prompt对模型进行训练,这其中也可以分成生成式(类似ViT)和判别式(类似self-supervised)两种方法。


Reference

[1] 刘鹏飞:近代自然语言处理技术发展的“第四范式”

[2] Timothyxxx:2021年,Pre-train+finetune还是“新”范式吗?乘风破浪的Prompt-base methods

[3] Exploiting Cloze Questions for Few Shot Text Classification and Natural Language Inference

[4] AUTOPROMPT: Eliciting Knowledge from Language Models with Automatically Generated Prompts

[5] Learning Transferable Visual Models From Natural Language Supervision

[6] LEARNING TO PROMPT FOR VISION-LANGUAGE MODELS

欢迎关注 Smarter ,构建CV世界观

欢迎加入Smarter交流群,添加微信「cjy094617」,备注「学校-方向」即可


user avatar   zyf-98-4 网友的相关建议: 
      

对这个问题非常关注,感觉prompt和andrew ng最近提出来的data-centric可能有一些微妙的联系。就目前来看,continuous prompt是最有可能transfer到CV领域的一系列工作。最近transformer准备大一统CV,nlp,将image输入转化为patch的形式也更方便了我们借鉴NLP的方法学习prompt。


然而,知乎都想到了别人会想不到呢,虽然最近也有一些多模态任务用了prompt,但是大多数也是调token,对image反倒没有那么关注。个人觉得要像NLP那样使用prompt有如下几个问题需要解决

  1. CV还不存在BERT,GPT这样具有统治力的预训练模型,因此近期内可能很难将prompt 做few-shot learning这一套搬过来。
  2. CV的downstream task更加复杂,感觉检测,分割这类任务要把prompt调work是一个非常大的工作量。

当然了,我觉得我们可以探索其他的任务形式,最近我也在试一些setting感觉还是有一定作用的,总之这一套东西感觉还是很有潜力的,欢迎大家留言讨论,合作。


user avatar   xie-ling-xi 网友的相关建议: 
      

我的看法比较保守:按照当前的情况,在CV领域强推prompt,似乎行不通。

下面抛砖引玉,如果有不同意见,也请友善讨论。

首先,我认为,prompt-based之所以能在NLP领域发挥较大作用,是因为NLP任务具有连续性:也就是说,不同任务(分类、理解、生成)之间没有明显的边界。基于这一点,prompt将各种任务优雅地统一为完形填空,使得下游开发难度大大降低。

但是CV任务是离散的:分类、检测、分割,你很难找到一些有意义的中间任务。这就意味着,即使设计了许多prompt,它能够解决的问题,归根结底还是些离散的点。那么我们就要问:这跟单独训练不同的任务有什么本质区别?注意这里说的是本质区别,不是multi-task这种浅显的区别。

也许有人会说,现在的prompt确实让CV任务变得更灵活了,比如可以从图像中找到想要的物体,或者让agent回答一些问题。然而,这些都是和NLP相关的任务(captioning、VQA、referring expressions,等等),并不是纯视觉的。也就是说,似乎CV中的prompt,作用还是局限于引入NLP的先验(或者预训练),距离视觉真正的困难,还稍微差点意思。

推广开来,我始终认为,图像和文本两种数据形态具有巨大的差异,所以我们不应该假设在某个领域中得到的经验能够迅速应用到其他领域中去。我认为,现在CV领域最大的问题,是评价指标和现实需求的严重脱节:给定一张图像,非得一口气把其中所有的物体都检测/分割出来;而现实应用中往往没有这个必要。况且,所有数据集都是固定的,做着做着就从数据集层面、甚至任务层面上过拟合了;而现实中,往往并不是交付一个模型了事,而是需要持续利用失败样本去迭代。从根源上说,这是监督学习走入困境的表现,但是强化学习还是个toy,似乎大家也没什么招。

说远了。回到这个话题,学术研究本身就是不断探索,把不可能变成可能的过程。从这个角度看,目前在CV中应用prompt的研究,都是非常有趣的——说不定哪天,真的从prompt上取得线索/突破,设计出一种新的CV任务了呢?


user avatar   wjn1996 网友的相关建议: 
      

最近我正在研究基于Prompt的预训练语言模型微调,并发表了一篇在EMNLP2021。因此对目前的prompt技术还是比较了解的。对于prompt的思想,可以从他的动机说起:

  • prompt的出现主要目标是尽可能减小预训练目标与下游微调目标的差距。通常现有的预训练目标均包含Masked Language Modeling(MLM,即完形填空模型),但是下游的任务则并未采用MLM的目标,而是引入新的MLP参数来实现分类或回归,使得预训练阶段的知识很难迁移到下游任务;
  • prompt因为不引入额外的MLP(或引入少量的参数),而是通过设计template和verbalizer,使得模型很容易在少量样本的条件下适应到下游任务,因此prompt非常适用于few-shot场景

那么Prompt是如何工作的呢?假定一个二分类的情感分析任务,给定一个文本“The film is very nice!”:

  • 传统的文本分类则是在语言模型的CLS部分加入MLP,并映射到0-1分类上(例如0对应positive,1对应negative),并给出一个概率分布(例如[0.85, 0.15]),这样在样本少的情况下,容易产生过拟合风险
  • 基于prompt的方法,则是设计一个PVP(Pattern Vebalizer Pair),例如Pattern(也叫做template)可以为“It was [MASK].”,Vebalizer可以为(positive:great, negative:terrible),因此直接将原始文本与template拼接起来,喂入MLM中,模型会给出[MASK]部分的预测词,当然这是在整个词表上获得概率分布,根据Vebalizer,我们只需要获取“great”和“terrible”两个词的概率分布即可,再取最大的作为预测结果,如果预测的是great,则说明该评论是positive的。

根据自己的研究积累,我将现阶段prompt的主要研究进度大致分为如下几个阶段:

  • GPT-3的提出,率先提出超大规模的语言模型,可以在引入少量外部信息(template、demonstraction以及vebalizer)的条件下,实现下游的in-context learning任务zero-shot的evaluation。这不仅体现了具有1750B参数量的模型的优势,也说明了使用原先的MLM实现完形填空式的预测更加合理
  • PET(以及iPET)则认为,GPT-3模型过大,无法用在实际生产环境,因此首次提出将prompt模式引入到小规模的语言模型(BERT等),采用人工构建的template和vebalizer实现prompt-tuning,并允许在下游任务中进行微调;后续T5、LM-BFF、AutoPrompt等则认为每个样本应该对应于不同的template,不同的template对实验的结果影响很大,因此分别提出对不同样本,自动生成或检索相应的template tokens
  • 不论是基于人工构建、还是生成模型或搜索模型,为每个样本创建相应不同的template会产生耗时,因此P-tuning、Prefix-tuning、PTR等方法,则提出soft-prompt概念,即设计pseudo token,则旨在直接使用template的token embedding作为初始化,并允许模型微调这部分的参数,这样可以让模型自己根据当前样本的语义,在语义空间上寻找合适的template向量,即让原始离散的prompt变成连续可微。另一个好处是,对于大模型来说,固定原始的预训练的参数,只微调prompt部分的参数。在训练完之后,只需要保存prompt部分的参数即可
  • 最近也有一些工作认为vebalizer也需要自动生成,而并非人工构建,因此产生了knowledgeable prompt-tuning(KPT),其旨在引入外部知识的方法,对整个词表召回并排序出于template相关联的label word集合,并对每个label word产生的loss进行平均或加权;也有工作(Pretrained Prompt-tuning,PPT)认为soft-prompt引入的少量参数目前都是随机初始化的,应该通过预训练的方法获得最优初始化soft-prompt部分的参数,而预训练则可以将不同任务统一为一个模式;
  • 先前工作都是站在MLM的任务上实现prompt-tuning,最近两篇工作EFL和NSP-BERT则站在Next Sentence Prediction(NSP)的预训练任务上实现prompt-tuning。可知MLM-based的prompt-tuning旨在将所有NLP任务建模为完形填空,而NSP-based旨在将所有任务建模为自然语言推理(NLI)。结合prompt,将原始文本、设计的含有候选答案的template拼接一起,让NSP预测相关性。作者认为该方法超越了基于MLM的prompt-tuning。
  • 最近谷歌的Instruction-tuning上线,其任务不同类型的任务之间也可以实现prompt-tuning的知识迁移,其直接使用超大规模的模型实现了zero-shot learning。

我们的工作发表在EMNLP2021:

TransPrompt: Towards an Automatic Transferable Prompting Framework for Few-shot Text Classification

该工作是基于P-tuning之上提出的新的算法,认为先前的工作只关心单个task的prompt-tuning,尤其是采用soft-prompt的方法,因此我们认为不同task之间可以通过设计task-specific和universal prompt encoder实现迁移。为了避免模型学偏,提出prototypical-based和entropy-based debiasing方法,避免模型在某个task上学习过好。我们的方法在SST-2、MR、CR、MRPC、QQP、MNLI和SNLI任务上均达到SOTA。

对于CV领域,最近也有一篇CPT的工作,将prompt引入到视觉中。如果使用Prompt,则可以考虑视觉中的预训练和下游微调中如何拉进二者距离。不一定要像prompt那样基于完型填空的训练模式,可以借鉴它的思想。


更多NLP论文解析与文章详见博主的CSDN账号:

或个人网站:


user avatar   zibuyu9 网友的相关建议: 
      

当然可以。实际上最近已经陆续有工作将prompt-oriented fine-tuning思想用在了跨模态场景。不过据我了解,大部分仍然只在跨模态中的文本端使用prompts,感觉这还不足以发挥prompt tuning的作用。最近我们组尝试了一种cross-modal prompt tuning,在图像端以涂色的形式建立visual sub-prompts,可以与textual sub-prompts协同实现更灵活多样的任务。我想,未来在跨模态提示的设计,如何更好完成各类复杂跨模态任务等方面,都有很多值得探索的问题,欢迎更多同学关注。

详情可以参考我们刚在arxiv上放出的论文:CPT: Colorful Prompt Tuning for Pre-trained Vision-Language Models




  

相关话题

  现代人工神经网络是不是一个死胡同?这个技术是不是骗人的? 
  俄罗斯一游戏支付公司用 AI 裁员 150 人,被裁员工被算法判定不敬业效率低下,这种评判方式合理吗? 
  如何简单形象又有趣地讲解神经网络是什么? 
  国内的自动驾驶技术目前发展到什么阶段了? 
  如何评价李开复称「ICO 是最大的泡沫,可能导致 AI 泡沫破裂」? 
  NTIRE2017夺冠的EDSR去掉了Batch Normalization层就获得了提高为什么? 
  如何系统地自学 Python? 
  上学和读书有什么区别? 
  在工作中或者学习中,有接触过哪些关于自然语言处理的应用? 
  有哪些有趣的图形学(CG)和计算机视觉(CV)相结合的应用的例子? 

前一个讨论
杨振宁迎来百岁生日,他的科学贡献有多大?你有什么话想对他说?
下一个讨论
为什么华为招的天才少年没有一个来自北大,清华或者海外学校?





© 2024-05-14 - tinynew.org. All Rights Reserved.
© 2024-05-14 - tinynew.org. 保留所有权利