2021-arxiv-GPT Understands, Too

2021-arxiv-GPT Understands, Too

Paper: https://arxiv.org/abs/2103.10385
Code: https://github.com/THUDM/P-tuning

Prompt 简单理解

举例来讲,今天如果有这样两句评论:

1. 什么苹果啊,都没有苹果味,怪怪的味道,而且一点都不甜,超级难吃!
2. 这破笔记本速度太慢了,卡的不要不要的。

现在我们需要根据他们描述的商品类型进行一个分类任务,

即,第一句需要被分类到「水果」类别中;第二句则需要分类到「电脑」类别中。

一种直觉的方式是将该问题建模成一个传统文本分类的任务,通过人工标注,为每一个类别设置一个id,例如:

{'电脑': 0,'水果': 1,....
}

这样一来,标注数据集就长这样:

什么苹果啊,都没有苹果味,怪怪的味道,而且一点都不甜,超级难吃!  1
这破笔记本速度太慢了,卡的不要不要的。    0
...

这种方法是可行的,但是需要「较多的标注数据」才能取得不错的效果。

由于大多数预训练模型(如BRET)在 pretrain 的时候都使用了 [MASK] token 做 MLM 任务,而我们在真实下游任务中往往是不会使用到 [MASK] 这个 token,这就意味着今天我们在训练下游任务时需要较多的数据集去抹平上下游任务不一致的 gap。

那,如果我们没有足够多的训练数据怎么办呢?

prompt learning 的出现就是为了解决这一问题,它将 [MASK] 的 token 引入到了下游任务中,将下游任务构造成和 MLM 类似的任务。

举例来讲,我们可以将上述评论改写为:

这是一条[MASK][MASK]评论:这破笔记本速度太慢了,卡的不要不要的。

然后让模型去预测两个 [MASK] token 的真实值是什么,那模型根据上下文能推测出被掩码住的词应该为「电脑」。

由于下游任务中也使用了和预训练任务中同样的 MLM 任务,这样我们就可以使用更少的训练数据来进行微调了。
但,这还不是 P-tuning。

通过上面的例子我们可以观察到,构建句子最关键的部分是在于 prompt的生成,即:

「这是一条[MASK][MASK]评论:」(prompt) + 这破笔记本速度太慢了,卡的不要不要的。(content)

被括号括起来的前缀(prompt)的生成是非常重要的,不同 prompt 会极大影响模型对 [MASK] 预测的正确率。

那么这个 prompt 怎么生成呢?

我们当然可以通过人工去设计很多不同类型的前缀 prompt,我们把他们称为 prompt pattern,例如:

这是一条[MASK][MASK]评论:
下面是一条描述[MASK][MASK]的评论:
[MASK][MASK]...

但是人工列这种 prompt pattern 非常的麻烦,不同的数据集所需要的 prompt pattern 也不同,可复用性很低。

那么,我们能不能通过机器自己去学习 prompt pattern 呢?

这,就是 P-Tuning。

P-Tuning 架构

给定一个预训练的语言模型 M M M,一个离散输入标记序列 x 1 : n = { x 0 , x 1 , … , x n } \mathbf{x}_{1: n}=\left\{x_0, x_1, \ldots, x_n\right\} x1:n={x0,x1,,xn}将由预训练嵌入层 e ∈ M \mathbf{e} \in \mathcal{M} eM映射到输入嵌入 { e ( x 0 ) , e ( x 1 ) , … , e ( x n ) } \left\{\mathbf{e}\left(x_0\right), \mathbf{e}\left(x_1\right), \ldots, \mathbf{e}\left(x_n\right)\right\} {e(x0),e(x1),,e(xn)}。在特定场景中,在上下文 x x x 的条件下,作者使用一组目标标记 y y y 的输出嵌入进行下游处理。例如,在预训练中, x x x 指的是未屏蔽的令牌,而 y y y 指的是 [MASK] 标记;在句子分类中, x x x 指的是句子标记,而 y y y 通常指的是 [CLS]。

提示 p p p 的功能是将上下文 x x x、目标 y y y 和自身组织到模板 T 中。例如,在预测一个国家首都的任务 (LAMA-TREx P36) 中,模板可能是“The capital of Britain is [MASK]”。(见图2),其中“The capital of … is … .“是提示,”Britain"是上下文,”[MASK]“是目标。提示可以非常灵活,我们甚至可以将它们插入到上下文或目标中。

V V V 指语言模型 M M M 的词汇表, [ P i ] [P_i] [Pi] 指模板 T 中的第 i i i 个提示标记。为简单起见,给定模板 T = { [ P 0 : i ] , x , [ P i + 1 : m ] , y } T=\left\{\left[\mathrm{P}_{0: i}\right], \mathbf{x},\left[\mathrm{P}_{i+1: m}\right], \mathbf{y}\right\} T={[P0:i],x,[Pi+1:m],y},与满足 [ P i ] ∈ V \left[\mathrm{P}_i\right] \in \mathcal{V} [Pi]V 并将 T T T 映射为的传统离散提示相比

相反,P-tuning 将 [Pi] 视为伪令牌,并将模板映射到

其中 h i ( 0 ≤ i < m ) h_i(0 \leq i<m) hi(0i<m) 是可训练的嵌入张量。能够找到超越 M M M V V V 可以表达的原始词汇的更好的连续提示。最后,利用下游损失函数 L L L,可以对连续提示 h i ( 0 ≤ i < m ) h_i(0 \leq i<m) hi(0i<m)进行差分优化

优化

1)离散性 M \mathcal{M} M的原始词嵌入 e e e在预训练后已经变得高度离散。如果用随机分布初始化 h h h,然后用随机梯度下降 (SGD) 进行优化,这已被证明只会改变小邻域中的参数,优化器很容易陷入局部最小值。
2)关联:另一个问题是,作者认为提示嵌入 h i h_i hi的值应该是相互依赖的,而不是独立的。需要一些机制来将提示嵌入相互关联。

鉴于这些挑战,在 P-tuning中,建议使用提示编码器将 h i h_i hi 建模为序列,该序列由一个非常精简的神经网络组成,可以解决离散性和关联问题。作者选择双向长短期记忆网络 (LSTM),并使用 ReLU 激活的两层多层感知器 (MLP) 来编码离散性。从形式上讲,将 h i ′ h_i^{\prime} hi嵌入到语言模型 M \mathcal{M} M中的实际输入源自
h i = MLP ⁡ ( [ h i → : h i ← ] ) = MLP ⁡ ( [ LSTM ⁡ ( h 0 : i ) : LSTM ⁡ ( h i : m ) ] ) \begin{aligned} h_i & =\operatorname{MLP}\left(\left[\overrightarrow{h_i}: \overleftarrow{h_i}\right]\right) \\ & =\operatorname{MLP}\left(\left[\operatorname{LSTM}\left(h_{0: i}\right): \operatorname{LSTM}\left(h_{i: m}\right)\right]\right) \end{aligned} hi=MLP([hi :hi ])=MLP([LSTM(h0:i):LSTM(hi:m)])

尽管 LSTM 头的使用确实为连续提示的训练增加了一些参数,但 LSTM 头比预训练模型小几个数量级。此外,在推理中,只需要输出嵌入 h h h,就可以丢弃 LSTM 头。

参考

https://zhuanlan.zhihu.com/p/583022692

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/125691.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

rust std

目录 一&#xff0c;std基本数据结构 1&#xff0c;std::option 2&#xff0c;std::result 二&#xff0c;std容器 1&#xff0c;vector 三&#xff0c;std算法 1&#xff0c;排序 2&#xff0c;二分 &#xff08;1&#xff09;vector二分 &#xff08;2&#xff09;…

【C++代码】分割等和子集,目标和,一和零,零钱兑换,动态规划--代码随想录

题目&#xff1a;分割等和子集 给你一个 只包含正整数 的 非空 数组 nums 。请你判断是否可以将这个数组分割成两个子集&#xff0c;使得两个子集的元素和相等。 初步想法排序后双指针&#xff0c;发现不行 class Solution { public:bool canPartition(vector<int>&…

计讯物联外贸公司--佰沃恩应邀出席第三届“嘉庚论坛”—科技创新推动经济高质量发展分论坛

10月22日&#xff0c;以“数智创新能动未来”为主题的第三届“嘉庚论坛”—科技创新推动经济高质量发展分论坛于集美海景皇冠假日酒店正式启幕。此论坛聚焦集美区战略前沿产业&#xff0c;汇聚来自全国各地优秀的企业家、高校及科研院所专家学者&#xff0c;并邀请相关领域的亲…

【案例实战】NodeJS+Vue3+MySQL实现列表查询功能

这篇文章&#xff0c;给大家带来一个列表查询的功能&#xff0c;从前端到后端的一个综合案例实战。 采用vue3作为前端开发&#xff0c;nodejs作为后端开发。 首先我们先来看一下完成的页面效果。点击分页&#xff0c;可以切换到上一页、下一页。搜索框可以进行模糊查询。 后端…

CSRF 篇

一、CSRF 漏洞&#xff1a; 1、漏洞概述&#xff1a; &#xff08;1&#xff09;一般情景&#xff1a; 利用已认证用户的身份执行未经用户授权的操作。攻击者试图欺骗用户在其不知情的情况下执行某些操作&#xff0c;通常是在受害者已经登录到特定网站的情况下。 &#xff0…

长沙某公司面经总结 - 失败版

1.Java语言的特征 Java的三大特性&#xff1a;封装、继承、多态 面向对象是利于语言对现实事物进行抽象。面向对象具有以下特征&#xff1a; 继承&#xff1a;继承是从已有类得到继承信息创建新类的过程 封装&#xff1a;封装是把数据和操作数据的方法绑定起来&#xff0c;对…

IP地址与代理ip在网络安全中的关键作用

目录 前言 一、IP地址在网络安全中的作用 1、网络流量监视和分析 2、网络安全事件响应 3、网络安全检测和防御 二、代理IP在网络安全中的作用 1、流量过滤和清洗 2、匿名访问和保护隐私 3、实现全球化业务 三、IP地址和代理IP在网络安全中的应用案例 1、DDoS攻击 2…

QT实现在线流媒体播放平台

文章目录 QT实现在线流媒体播放平台简介开发视频ffmpeg下载SimpleVideoPlayer.hSimpleVideoPlayer.cpp 开发音频添加功能打开文件夹播放暂停播放上下一首选择倍速 效果展示项目下载 QT实现在线流媒体播放平台 简介 Qt是一种流行的C开发框架&#xff0c;它提供了用于构建图形用…

AT32固件库外设使用,ArduinoAPI接口移植,模块化

目录 一、ArduinoAPI移植一、通用定时器使用1.计时1.2.ETR外部时钟计数4.ArduinoAPI - timer 三、ADC1.ADC初始化&#xff08;非DMA&#xff09;2.ADC_DMA 规则通道扫描 六、USB HID IAP1.准备好Bootloader和app2.配置好时钟&#xff0c;一定要打开USB3.将生成的时钟配置复制到…

Mybatis执行流程简析

一、前言 日常工作中&#xff0c;我们用到mybatis的时候&#xff0c;都是写一个Mapper接口xml文件/注解形式&#xff0c;然后就可以在业务层去调用我们在Mapper接口中定义的CRUD方法&#xff0c;很方便&#xff0c;但一直都没有去研究过执行逻辑&#xff0c;下面附一篇我自己研…

使用simple_3dviz进行三维模型投影

【版权声明】 本文为博主原创文章&#xff0c;未经博主允许严禁转载&#xff0c;我们会定期进行侵权检索。 更多算法总结请关注我的博客&#xff1a;https://blog.csdn.net/suiyingy&#xff0c;或”乐乐感知学堂“公众号。 本文章来自于专栏《Python三维模型处理基础》的系列文…

飞鹅打印机使用注意事项:打印小票(云播报打印机)FP-V58-W(c)

文章目录 引言I 基础操作1.1 设置Wi-Fi1.2 在机器内预先内置logo 引言 应用场景&#xff1a; 云播报打印机&#xff1a;支持第三方软件开发商&#xff0c;接单后实现智能语音播报&#xff0c;可播报订单信息、打印订单小票。 http://www.feieyun.com/open/index.html 飞鹅对…

Android OpenGL ES 2.0入门实践

本文既然是入门实践&#xff0c;就先从简单的2D图形开始&#xff0c;首先&#xff0c;参考两篇官方文档搭建个框架&#xff0c;便于写OpenGL ES相关的代码&#xff1a;构建 OpenGL ES 环境、OpenGL ES 2.0 及更高版本中的投影和相机视图。 先上代码&#xff0c;代码效果如下图…

WPF自定义控件库之Window窗口

在WPF开发中&#xff0c;默认控件的样式常常无法满足实际的应用需求&#xff0c;我们通常都会采用引入第三方控件库的方式来美化UI&#xff0c;使得应用软件的设计风格更加统一。常用的WPF的UI控件库主要有以下几种&#xff0c;如&#xff1a;Modern UI for WPF&#xff0c;Mat…

Elasticsearch:使用 Elasticsearch 进行词汇和语义搜索

作者&#xff1a;PRISCILLA PARODI 在这篇博文中&#xff0c;你将探索使用 Elasticsearch 检索信息的各种方法&#xff0c;特别关注文本&#xff1a;词汇 (lexical) 和语义搜索 (semantic search)。 使用 Elasticsearch 进行词汇和语义搜索 搜索是根据你的搜索查询或组合查询…

0基础学习PyFlink——使用DataStream进行字数统计

大纲 sourceMapSplittingMapping ReduceKeyingReducing 完整代码结构参考资料 在《0基础学习PyFlink——模拟Hadoop流程》一文中&#xff0c;我们看到Hadoop在处理大数据时的MapReduce过程。 本节介绍的DataStream API&#xff0c;则使用了类似的结构。 source 为了方便&…

C# Onnx 用于边缘检测的轻量级密集卷积神经网络LDC

效果 项目 代码 using Microsoft.ML.OnnxRuntime; using Microsoft.ML.OnnxRuntime.Tensors; using OpenCvSharp; using System; using System.Collections.Generic; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms;namespace Onnx…

【HTML】HTML基础知识扫盲

1、什么是HTML&#xff1f; HTML是超文本标记语言&#xff08;Hyper Text Markup Language&#xff09;是用来描述网页的一种语言 注意&#xff1a; HTML不是编程语言&#xff0c;而是标记语言 HTML文件也可以直接称为网页&#xff0c;浏览器的作用就是读取HTML文件&#xff…

【网络协议】聊聊http协议

当我们输入www.baidu.com的时候&#xff0c;其实是先将baidu.com的域名进行DNS解析&#xff0c;转换成对应的ip地址&#xff0c;然后开始进行基于TCP构建三次握手的连接&#xff0c;目前使用的是1.1 默认是开启了keep-Alive。可以在多次请求中进行连接复用。 HTTP 请求的构建…