CLIP论文拜读及理解

本文介绍了CLIP论文的关键概念,并详细探讨了prompt学习,包括prompt的定义、类型、重构方法和训练过程。prompt学习通过特定模板将任务转化为预训练语言模型更易处理的形式,如BERT和GPT。此外,文章还提到了多prompt的使用策略以及其在小样本学习中的潜力。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


一、clip论文阅读

论文阅读是跟随沐神视频:CLIP 论文逐段精读【论文精读】

二、prompt

在阅读clip论文时,注意到里面提到的prompt。所以想了解并学习一下。

1.除prompt之外的预训练语言模型

在这里插入图片描述
这三种预训练语言模型需要人力

  1. feature engineering 需要人工提取特征
  2. architecture engineering 需要人工设计网络结构
  3. objective engineering 需要人工设计目标函数

2.prompt

2.1. prompt定义

prompt learning :提示学习

prompt learning 对 输入的文本信息 按照 特定模板 进行处理把任务重构成一个 更能够充分利用预训练语言模型处理的形式

以情感分析为例,传统情感分析是如下的:
Input: 你是个好人。
Output: positive 或 negative
而采用 prompt learning 的话,输入输出就会变为如下:
Input: 你是个好人。那么她____和你耍朋友。
Output: 想 或者 不想

简而言之:
将输入文本作为一个 提示(prompt),接着拼一个语句,再让模型来对这个语句进行完形填空

prompt 的重构方式可以总结为:

  1. 输入数据不变;
  2. 给定一个 prompt 模板;
  3. 给定一个答案范围。(后面会分别简单讲解这三个步骤)

进行完形填空的目的是,因为 BERT 的训练任务就是做完形填空。就是为了让下游任务更适配语言模型,而基于目标工程的预训练语言模型则是让模型去适配下游任务比如传统的 BERT 要做情感分析还要在输入时第一个位置添加一个 [CLSL,然后输出这个ICLS] 的隐藏状态后还要再接全连接层才能预测情感标签),

下图展示了几个不同的语言模型之间的关系(图来自刘鹏飞大佬的论文中):
在这里插入图片描述

与前三种预训练语言模型一样,prompt learning 同样需要人工在里面,即人工设计 提示模板(prompt template)答案模板(answer template)

2.2. prompt类型

prompt 分为了两类:cloze promptprefix prompt


首先介绍一下4种预训练方法:
由于每一类 prompt 都要让下游任务满足 预训练方法,所以作者在论文里把这些方法抽象成了以下4种。
在这里插入图片描述
在这里插入图片描述


基于以上4种预训练语言类型,我们再来讨论两类 prompt:cloze promptprefix prompt

  1. cloze prompt:在 prompt 中有插槽 (slot) 的类型为 cloze prompt
    这类 prompt 就是需要模型去填充这个 slot。这类可以选用 L2R LM (ELMo) 或者 Masked LM (BERT) 来实现。
  2. prefix prompt:输入的文本全部在 answer 前的类型为 prefix prompt
    这类 prompt 通常是需要模型去预测或者生成这个 slot。这类模型可以选用 L2R LM (RNN)Prefix LM,以及 Encoder-Decoder (GPT) 去实现。

针对不同任务的 prompt 都可以用下表展示:
在这里插入图片描述

2.3. prompt重构

在 prompt 重构的过程中,就需要两个关键的模板:prompt templateanswer template

2.3.1 prompt template

有两种方法来生成:人工设计模板自动生成模板

  1. 人工设计模板:人工设计模板是最直观的方法。抽象来看,设文本为 [ X ],插槽为 [ Z ],人工设计的模板为 [ X ] template words [ Z ]
    尽管这样非常直觉,易于理解,而且无需额外的计算代价,但是人工设计模板有很大的缺陷:
    1. 人工设计模板是很花费时间且需要先验知识的;
    2. 人工设计也会有失败的情况在内。
      为了解决上面的问题,就提出了通过训练的方式自动生成模板。
  2. 自动生成模板: 自动生成模板有两种类型。
    1. discrete prompts (离散提示, a. k. a. hard prompts),这类型 prompts 就是让模型在一组离散模板的空间中选择一个最优的模板
    2. continuous prompts (连续提示, a. k. a. soft prompts),这类型 prompts 就是让语言模型自动训练一个 prompts 出来
2.3.2 Answer engineering

Answer engineering 目的是找到一个答案 **[ Z ]**的空间,并且将这个空间映射到输出的标签 y上。

答案会有三种种类,tokens (比如文本分类),span (比如方面级情感分析中的方面识别),Sentence (比如机器翻译)。

与 prompt engineering 相同,answer engineering 同样有人工设计与自动获取两种方法。

  1. 人工设计答案: 人工设计分为两类 [ Z ]空间。
    1. Unconstrained spaces 中的 [ Z ]空间包含了输出空间的所有结果,token 级的话则是全部词表中的词 (比如 W2V 的输出层),其余类型相同。这类方法可以直接找到 [ Z ]与 y的映射关系。
    2. Constrained spaces,这类方法通常输出是在一个限定范围内 (比如 positive 和 negative),这类方法就需要一个映射关系来映射 [ Z ]与 y。
  2. 自动学习答案: 与 prompt engineering 相同,有 discrete answer search 和 continuous answer search
    1. discrete prompts
    2. continuous prompts

2.4 多个 prompt的使用

根据研究显示,使用多个 prompt 可以有效提升性能。 由于多个 prompt 集成后,每个 prompt 都会有一个输出,对这些输出我们也需要有相应的取舍。最简单的方法就是对每个 prompt 的输出概率求和取平均。但是这样有个问题就是可能有的 prompt 占比高,有的占比低,于是就有了带权平均方法。也有研究是采用 majority voting 的方法 (我没看过论文,但是我个人觉得就是对于分类问题,选择最多分类的那一类)。还有采用知识蒸馏和集成做文本分类的方法

对于 prompt ensembling有以下四种方法:
在这里插入图片描述
在这里插入图片描述

2.5 prompt的训练

在这里插入图片描述
在这里插入图片描述

总结

Prompt Learning激活了很多新的研究场景,比如小样本学习,可以成为那些GPU资源受限研究者的福音。

Prompt Learning最重要的一个作用在于给我们prompt(提示)了NLP发展可能的核心动力是什么。

参考(博文、论文)

参考的博文:
博主:野指针小李

参考的论文:

刘鹏飞大佬的论文
在这里插入图片描述

### CLIP模型学术论文检索 为了有效查找关于CLIP模型的学术论文,可以遵循以下策略: #### 使用特定API进行筛选 可以从Semantic Scholar Academic Graph API获取数据,并设置过滤条件来聚焦于最新的研究成果。对于CLIP模型的研究论文,可以选择2024年5月1日后发布的文献[^2]。 #### 设定引用阈值 选择那些拥有较高引用次数的文章作为重点阅读对象。通常情况下,选取引用量超过20次以上的文章能够保证所读到的内容具备一定的质量和影响力。 #### 构建合理的样本集合 考虑到实际操作中的效率问题,建议随机抽样形成一个适中规模的数据集用于深入分析。例如,在此场景下可以考虑构建包含约300篇左右的核心论文库来进行更细致的信息挖掘工作。 #### 利用已有资源 如果关注的是中文环境下的研究进展,则可能还需要参考由中国计算机联合会支持的相关会议记录或报告文件,这些资料或许能提供额外视角或是补充说明[^3]。 ```python import requests def fetch_clip_papers(api_key, start_date="2024-05-01", min_citations=20): url = "https://api.semanticscholar.org/graph/v1/paper/search" params = { 'query': 'CLIP model', 'fields': 'title,url,citationCount,publishDate', 'filter': f'publishDate:>={start_date},citationCount:>={min_citations}', 'apiKey': api_key, 'limit': 300 } response = requests.get(url, params=params).json() papers = [] for item in response['data']: if all([item['citationCount'] >= min_citations, item['publishDate'] >= start_date]): papers.append({ 'Title': item['title'], 'URL': item['url'] }) return papers[:300] # Example usage (replace YOUR_API_KEY with your actual key from Semantic Scholar) papers_list = fetch_clip_papers(YOUR_API_KEY) for idx, paper_info in enumerate(papers_list[:5], 1): # Display top 5 results as an example print(f"{idx}. {paper_info['Title']} - Available at: [{paper_info['URL']}]({paper_info['URL']})") ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值