©PaperWeekly 原创 · 作者 | 李国趸

学校 | 浙江大学硕士生

研究方向 | 少样本学习

前言

THUNLP 团队前不久发布了 OpenPrompt 工具包和相关技术报告,笔者迫不及待上手尝试了一下,特意撰写此文来报告一下作为研究人员的使用感受。

本文将结合作者发布的技术报告以及个人使用感受向大家分享和介绍这个强大易用的 Prompt Learning 工具包。

主要分为四个部分:

  • 为什么我们需要 Prompt 工具包?

  • OpenPrompt 是什么?

  • OpenPrompt 的优势:为什么我们需要 OpenPrompt?

  • Next Step towards PromptCenter:不仅仅是 OpenPrompt

为什么我们需要Prompt工具包?

从 LAMA 和 GPT-3 起,Prompt Learning 在近两年开始飞速发展,涌现了一大批优秀的论文,粗略总结下可以分为 few-shot learning 和 parameter-efficient learning 两种应用场景。

尽管开源社区有很多相关论文的优秀实现,但是基于以下理由,我们仍然需要一个针对初学者可以开箱即用,对于研究者可以方便修改迭代,对于工业界容易部署的 Prompt 工具包。

  • Prompt learning 的性能并不是很稳定,需要考虑诸多的因素,诸如  template 和 verbalizer 的设计,tunable token 和 label words 的初始化和预训练模型的选择等。

  • 一些 Prompt 的工作仍基于传统 fine-tuning 的代码模版,用最小的更改成本来实现 Prompt learning,代码耦合程度较高,缺乏可读性和可复现性。

从上述两个因素看,作为 Prompt learning 的研究者而言,我们急需一个能够稳定实现各种经典的 Prompt learning 方法,同时对不同策略可以灵活配置,不同模块灵活组合的开源工具包。

于是,OpenPrompt 出现了。

OpenPrompt到底是什么?

回顾 Prompt learning 的几个关键流程,我们可以总结出 Prompt learning 一般可以分为以下步骤:1)选择预训练模型;2)设计 template;3)设计 verbalizer:确定答案空间;4)确定 tuning 策略。每个步骤中我们又需要考虑若干因秦,诸如设计 soft 还是 hard 或者 hybrid 的模版,soft token 怎么初始化,tuning 策略是什么等。

Open Prompt 就是这样一个覆盖 Prompt learning 全生命周期的工具包,提供了一套完整的 pipeline 以及每个 step 中灵活配置的模块。

从上图不难看出,OpenPrompt 提供一套完整的 Prompt Learning Pipeline,而其中每个 class 都继承了 torch 的类或者 huggingface 的类来实现,完美兼容最流行的深度学习框架和最流行的预训练模型框架,在代码风格和 pipeline 设计上也是完美贴合 huggingface 框架,让研究者可以以最少的学习成本上手和修改。

下面,笔者通过一个 example 来讲解整个框架的运行流程。

首先是一些基本的设置:

  • 定义 tokenizer,然后用 PromptTokenizer 包起来,PromptTokenizer 中实现了额外的一些辅助方法;

  • 定义 template:按照需要选择 soft,或者 hard,或者 hybrid,每个都有相应的类;

  • 定义 verbalizer:同样按照需要可以选择 soft,或者 hard 等;

  • 定义 model:一般有两种,PromptForClassification 和  PromptForGeneration,当然里面要传入预训练模型,可以是 BERT,也可以是 T5,还要传入定义的 template 和 verbalizer。

然后就是数据的流动:raw text 被包成一个个 InputExamp|e,并送到 template中按照 template 进行“改造”,改造后的 example(被叫做 wrapped example)送到 tokenizer 中,最后组织成 dataset。dataloader 从 dataset 中取出一个个  batch 送入预训练模型中进行 tuning(可以选择是否 freeze 预训练模型)并进行优化。听起来是不是很简单?实际流程也是和传统的写法并无二致。

当然,和 huggingface 一样,作者除了上述写法,还提供了 PromptTrainer 这种封装的更好的写法,使用习惯也和 huggingface 一样,没有太大学习成本。

值得一提的是,作者也提供了一种小样本设置的 DataSampler,即从数据集中采少量样本来模拟小样本环境。

OpenPrompt的优势:为什么我们需要 Open Prompt?

刚刚知道 OpenPrompt 的时候,我对这个工具包还有些许不屑,觉得多半是现有方法的简单集成,我不禁在想,虽然我们需要 Prompt 工具包,可为什么一定要用 OpenPrompt?

仔细了解和使用了 OpenPrompt 以后,我对 OpenPrompt 的设计赞不绝口,下面分享下我的一些个人感受。

什么模块化设计,容易配置和灵活修改,适用于生成和分类任务,集成了各种  prompt 的优点我就不说了,让我觉得井常妙的一点是作者提出的: Template Language

实际上,prompt learning 发展到现在,有各种各样的 template 和 template 组合。在做实验的时候,设计各种各样的 template 的实现成本是比较高的,很难实现快速迭代和尝试。为了解决这一痛点,作者设计一种 template language 来统一各种各样的 template 设计,然后用一个统一的函数去解析 template。

上图展示了一些具体的例子,大家可以看论文了解详情。具体来说,template language 有这些功能:

  • 利用 Python 的 dict 的 key-value 形式表示 template,每个 dict 表示一个特殊的节点及其描述。

  • meta 标签表示了一些特殊的 slot,填入对应的输入,比如 {"meta":"premise"} 表示这个 slot 填入的是 premise sentence。

  • shortenable 标签表示了该 slot 在面临预训练模型输入长度限制时能否被截断,比如一些特殊的 token 就不能被截断,而一些输入句子是可以被截断的。

  • soft 标签指定当前位置是 soft token,其 value 表示用什么词进行初始化,duplicate 表示 soft token 在该位置周围重复多少次。soft id 标签则指如果两个  soft token 有相同的 soft id,则共享 word embedding。

  • mask 标签则表示此位需要被预测,post_ processing 标签则表示该位置的内容可以传入一个函数去后处理。

从以上笔者的介绍可以看出 template language 的强大之处!这也是我觉得该工具包最大的亮点之一。

Next Step towards PromptCenter:不仅仅是OpenPrompt

尽管 OpenPrompt 已经很强大,作者并不局限于构建这样一个集成了各种  prompt 的工具包。该工具的作者在智源社区的分享会提到了下一步的想法,这里我不再赘述,给大家分享其中一张 PPT,则可以窥见一二。

回顾 SPoT 这篇工作,把一个 unified 的 task 形式(seq2seq)和一个强大的生成模型(T5)作为基础,在 multi-task 上预训练的各个 prompt 可以在下游任务上有无限的可能。

我们有理由相信,在不远的未来,有了 Prompt Center 这一强大的工具,融合各种预训练的 prompt,应用在各种下游任务上,将进一步激发 prompt learning 的实力。

特别鸣谢

感谢 TCCI 天桥脑科学研究院对于 PaperWeekly 的支持。TCCI 关注大脑探知、大脑功能和大脑健康。

更多阅读

#投 稿 通 道#

 让你的文字被更多人看到 

如何才能让更多的优质内容以更短路径到达读者群体,缩短读者寻找优质内容的成本呢?答案就是:你不认识的人。

总有一些你不认识的人,知道你想知道的东西。PaperWeekly 或许可以成为一座桥梁,促使不同背景、不同方向的学者和学术灵感相互碰撞,迸发出更多的可能性。

PaperWeekly 鼓励高校实验室或个人,在我们的平台上分享各类优质内容,可以是最新论文解读,也可以是学术热点剖析科研心得竞赛经验讲解等。我们的目的只有一个,让知识真正流动起来。

全网首个OpenPrompt尝鲜报告:Prompt研究者必备实验利器相关推荐

  1. 5行代码秀碾压,比Keras还好用的fastai来了,尝鲜PyTorch 1.0必备伴侣

    休假栗 问耕 假装发自 凹非寺 量子位 出品 | 公众号 QbitAI PyTorch 1.0来了~ 在今天的F8(Facebook开发者大会)上,深度学习框架PyTorch 1.0 rc1版如期发布 ...

  2. Python 3.10 尝鲜

    Python 3.10 尝鲜 图源:giaiphapso.com Python 3.10 版本已经在本月初(10.4)正式发布,其中最让人振奋的新特性是模式匹配,简单的说就是Python终于引入了类似 ...

  3. 首台android手机号码,国内首批手机Android 12尝鲜列表已公布,华为与荣耀不在名单之上...

    今天凌晨,谷歌在 I/O 2021大会上正式发布Android 12操作系统,并且开放了Android 12 Beta 1的下载链接,除了可支持谷歌Pixel机型以外,国内的众多手机品牌也在首次尝鲜名 ...

  4. 一加6怎么刷android p6,一加6秒速跟进安卓P 教你尝鲜速成开发者

    今年5月份,谷歌在I/O开发者大会上发布了全新的Android P操作系统,而在Android P系统发布后的没多久,一加手机官方就公开承诺,年度旗舰一加手机6将会成为首批次升级谷歌Android P ...

  5. android6变化,一次尝鲜体验 关于一加6升级Android P后的变化

    原标题:一次尝鲜体验 关于一加6升级Android P后的变化 2018年8月7日,谷歌终于推出了Android P的第一个正式版本,这个系统一经发布便可谓是万众瞩目,因为这个系统所具有的诸多亮点足够 ...

  6. Windows Server 2008 R2正式版尝鲜体验

    Windows Server 2008 R2尝鲜体验 Windows Server 2008 R2已经发布了RTM版本,现在英文版的R2已经可以通过Technet或MSDN订阅下载.Windows S ...

  7. 一加8 线刷官方ColorOS尝鲜版遇到的各种问题及解决方案

    一加工程师发布刷尝鲜版Color OS系统的教程贴 教程原地址:https://www.oneplusbbs.com/thread-5873103-1.html 一加8刷Color OS 这里请注意, ...

  8. 一加6android p上手,一加6秒速跟进安卓P 教你尝鲜速成开发者

    今年5月份,谷歌在I/O开发者大会上发布了全新的Android P操作系统,而在Android P系统发布后的没多久,一加手机官方就公开承诺,年度旗舰一加手机6将会成为首批次升级谷歌Android P ...

  9. Taro 小程序开发大型实战(六):尝鲜微信小程序云(上篇)

    欢迎继续阅读<Taro 小程序开发大型实战>系列,前情回顾: 熟悉的 React,熟悉的 Hooks[1]:我们用 React 和 Hooks 实现了一个非常简单的添加帖子的原型 多页面跳 ...

最新文章

  1. redis启动异常处理一例
  2. python从入门到入土表情包-Python开发个人专属表情包网站,表情在手,天下我有...
  3. Python基于socket实现的多任务版TCP服务端
  4. ajax同步和异步的区别_同步电机和异步电机区别
  5. spring学习笔记02-spring-bean创建的细节问题
  6. 用matlab绘制中国海岸线,matlab显示全球海岸线
  7. FileFilter 遍历某个目录下文件名含有某个字符的文件
  8. 二分法查找——C++代码
  9. TCP: SYN ACK FIN RST PSH URG
  10. Python爬取百度文库doc文档
  11. MDT修改部署时的背景图
  12. 企企通SRM:时尚服装品牌企业建立优质供应链体系,只需要做到这几步
  13. 2016美国计算机研究生,2016年美国计算机工程专业研究生排名(转载)
  14. 武汉科技大学计算机学院研究生复试,2019年武汉科技大学硕士研究生复试及录取工作方案...
  15. 汉德森基因检测丨认清自己,才能成为更好的自己
  16. Python中reshape函数参数-1的意思?
  17. Latex 之公式编辑
  18. 上半年净利同比降46%,依赖大客户的天润云能靠IPO翻身吗?
  19. Anaconda 安装教程
  20. oracle按年同比环比,oracle求同比,环比函数(LAG与LEAD)的详解

热门文章

  1. Android NDK 学习汇总
  2. java8 lambda 视频_一文搞懂Java8 Lambda表达式(附带视频教程)
  3. solr参数之facet
  4. python正则re
  5. csu 1548: Design road (三分)
  6. HDU 4705 Y (树形DP)
  7. jemalloc java_从源构建tensorflow遇到错误:规则'@jemalloc//:jemalloc'的C编译失败
  8. java 气泡 提示插件_Java气泡提示功能实现
  9. IC设计Linux设置文件夹颜色,IC设计中常用的Linux命令
  10. postgresql mysql fdw_PostgreSQL使用MySQL外表(mysql_fdw)