当前位置: 首页 > article >正文

LM-BFF——语言模型微调新范式

gpt3(GPT3——少样本示例推动下的通用语言模型雏形)结合提示词和少样本示例后,展示出了强大性能。但大语言模型的训练门槛太高,普通研究人员无力,LM-BFF(Making Pre-trained Language Models Better Few-shot Learners)的作者受gpt3启发后,将gpt3的少样本学习思路与常规语言模型(如BERT、RoBERTa)相结合,最终提出了一种新颖的微调方法,大大降低了微调所需样本量,也为我们理解提示词的重要性带来了新的启发。

本文主要分享这种新颖微调方法的好处,不对细节做过多展开。

方法

传统的微调方法是,给定训练好的预训练模型后,再利用该预训练模型在各类监督数据集上结合标签进行监督训练。输入和输出由不同的数据集决定。

LM-BFF作者的思路是,在监督训练时,通过引入提示模板 (prompt template)任务示例 (task demonstrations/examples),将原始输入和输出(标签)转换成一种更接近语言模型预训练任务的格式(即完形填空或文本生成)进行训练。

例如,对于一个传统的文本分类任务:

  • 传统微调输入(以RoBERTa为例)[CLS] No reason to watch. [SEP] ,预测输出通常是数据集的标签(如positive,negative)
  • LM-BFF微调输入示例[CLS] No reason to watch. [SEP] It was [MASK]. [SEP] A fun ride. It was great. [SEP] The drama discloses nothing. It was terrible. [SEP],预测输出是标签词映射得到的词(如great,terrible)

在这个LM-BFF的例子中:

  1. No reason to watch. 是原始输入文本。
  2. It was [MASK]. 是应用于原始输入文本的提示模板,模型需要预测 [MASK] 位置最合适的词。
  3. A fun ride. It was great.The drama discloses nothing. It was terrible. 是任务示例(demonstrations)。其中 greatterrible 是原始标签(如“正面”、“负面”)通过标签词映射 (label word mapping) 转换成的具体词语。这些示例为模型提供了当前任务的上下文信息。

下图是更详细的过程:

在这里插入图片描述

LM-BFF的四个关键部分

  1. 三个输入部分:原始输入 + 提示模板 + 任务示例
  2. 输出标签词映射。

其中提示模板和输出词映射可以手动指定也可以自动得出,作者提出了自动推断提示模板和输出词映射的方法。任务示例从训练样本中抽样。

自动推断输出标签映射词的方法:

  • 使用预训练语言模型(如 RoBERTa)来预测与标签语义最相关的词。
  • 对于每个标签,构造一个模板(如“It was [MASK].”),然后通过模型预测 [MASK] 位置的词,选择概率最高的词作为标签映射词。
  • 例如,对于“positive”标签,模型可能预测“great”作为映射词;对于“negative”标签,预测“terrible”。
  • 这种方法减少了手动指定标签词的负担,提高了方法的通用性。

自动推断提示模板的方法:

  • 利用 T5 模型的填空能力,将模板字符作为掩码序列输入T5,使其通过预测掩码序列生成候选提示模板。
  • 例如,对于文本分类任务,T5 可能生成“It was [MASK].”或“The sentiment is [MASK].”作为提示模板。
  • 然后通过少量验证数据评估每个模板的性能,选择效果最好的模板。
  • 这种方法通过自动化生成提示模板,减少了人工设计的成本。

实验

作者在GLUE数据集和SNLI数据集上做了实验。

在不同的数据集上,作者手工指定了提示模板和标签词映射。当然后面有手工,也有自动推断的实验结果。

在这里插入图片描述

实验效果

作者对比了若干方法:

第一部分:

  1. Majority(选取数据最多的类做标签)
  2. 使用作者手工指定的提示词进行零样本学习,不微调训练
  3. 使用作者手工指定的提示词 + 任务示例,不微调训练
  4. 使用少量样本进行传统微调训练

第二部分(LM-BFF)

  1. 手工指定提示词(原始输入 + 提示模板),微调训练
  2. 手工指定提示词+任务示例(原始输入 + 提示模板+ 任务示例 ),微调训练
  3. 自动指定提示词(原始输入 + 提示模板),微调训练
  4. 自动指定提示词+任务示例(原始输入 + 提示模板+ 任务示例 ),微调训练

第三部分:

全量样本传统微调训练

实验结果确实显著的表明,在少样本设定下,LM-BFF具有显著的优势,比传统微调性能大幅提高(大多在百分之10以上)

在这里插入图片描述

结合提示词微调的优势

另一篇论文(How Many Data Points is a Prompt Worth?)通过实验清楚的表明了结合提示微调的好处:

作者用SuperGLUE数据集对比了结合提示微调和传统微调在不同数据量情况下的表现,横坐标代表样本量,黄色代表提示词微调在使用不同样本量数据时的性能,紫色为传统微调的性能。大部分数据集上提示词微调的效果都要好于传统微调。
在这里插入图片描述

结果表明结合提示微调对训练样本的需求大大少于传统微调,几十个样本可以达到较好效果,不同数据量下的效果也大多好于传统微调。这也充分证明了语言模型的提示词的重要性。

相关文章:

LM-BFF——语言模型微调新范式

gpt3(GPT3——少样本示例推动下的通用语言模型雏形)结合提示词和少样本示例后,展示出了强大性能。但大语言模型的训练门槛太高,普通研究人员无力,LM-BFF(Making Pre-trained Language Models Better Few-shot Learners)的作者受gp…...

NVMe高速传输之摆脱XDMA设计2

NVMe IP放弃XDMA原因 选用XDMA做NVMe IP的关键传输模块,可以加速IP的设计,但是XDMA对于开发者来说,还是不方便,原因是它就象一个黑匣子,调试也非一番周折,尤其是后面PCIe4.0升级。 因此决定直接采用PCIe设…...

github开源版pymol安装(ubuntu22.04实战版)

1. 克隆 PyMOL 的 GitHub 仓库 首先,你需要从 GitHub 克隆 PyMOL 的源代码: git clone https://github.com/schrodinger/pymol-open-source.git cd pymol-open-source2. 安装依赖项 PyMOL 依赖一些系统库和 Python 包,确保先安装它们&…...

pycharm无需科学上网工具下载插件的解决方案

以下是两种无需科学上网即可下载 PyCharm 插件的解决思路: 方法 1:设置 PyCharm 代理 打开 PyCharm选择菜单:File → Settings → Appearance & Behavior → System Settings → HTTP Proxy在代理设置中进行如下配置: 代理地…...

Halcon计算点到平面的距离没有那么简单

Halcon计算点到平面距离 1. 一些基本概念2. 浅谈有无符号的距离2.1 无符号距离的用武之地2.2 有符号距离的必要性 3. 无符号距离怎么算3.1 创建一个无限延展的基准平面,对距离有什么影响?Halcon代码图示 3.2 创建一个小小小的基准平面,对距离…...

基于DenseNet的医学影像辅助诊断系统开发教程

本文源码地址: https://download.csdn.net/download/shangjg03/90873921 1. 简介 本教程将使用DenseNet开发一个完整的医学影像辅助诊断系统,专注于胸部X光片的肺炎检测。我们将从环境搭建开始,逐步介绍数据处理、模型构建、训练、评估以及最终的系统部署。 2. 环境准备<…...

数据中台如何设计?中台开发技术方案,数据治理方案,大数据建设方案合集

中台的价值与核心理念 中台的核心在于“企业级能力复用”&#xff0c;其价值体现在四大维度&#xff1a; 能力整合&#xff1a;将分散的数字化能力&#xff08;如营销、供应链&#xff09;集中管理&#xff0c;形成核心竞争力&#xff1b; 业务创新&#xff1a;通过跨领域融合…...

Python爬虫设置IP代理

设置代理&#xff08;Proxy&#xff09; 作用&#xff1a; 当网站检测到某个IP的访问频率过高时&#xff0c;可能会封禁该IP。通过使用代理服务器&#xff0c;可以定期更换IP地址&#xff0c;避免被识别和封锁。 优势&#xff1a; 让网站无法追踪真实请求来源&#xff0c;提升…...

Adminer 连接mssql sqlserver

第一步 docker-compose.yml adminer部分&#xff1a; version: 3.8 services: adminer: image: adminer:latest container_name: adminer restart: unless-stopped volumes: - ./freetds/freetds.conf:/etc/freetds.conf:rw # 确保 :rw 可读写 co…...

C++系统IO

C系统IO 头文件的使用 1.使用系统IO必须包含相应的头文件&#xff0c;通常使用#include预处理指令。 2.头文件中包含了若干变量的声明&#xff0c;用于实现系统IO。 3.头文件的引用方式有双引号和尖括号两种&#xff0c;区别在于查找路径的不同。 4.C标准库提供的头文件通常没…...

利用 Python 爬虫获取唯品会 VIP 商品详情:实战指南

在当今电商竞争激烈的环境中&#xff0c;VIP 商品往往是商家的核心竞争力所在。这些商品不仅代表着品牌的高端形象&#xff0c;更是吸引高价值客户的关键。因此&#xff0c;获取 VIP 商品的详细信息对于市场分析、竞品研究以及优化自身产品策略至关重要。Python 作为一种强大的…...

DELL EMC PowerStore BBU更换手册

写在前面 上周给客户卖了一个BBU电池&#xff0c;客户要写一个更换方案。顺利完成了更换&#xff0c;下面就把这个更换方案给大家share出来&#xff0c;以后客户要写&#xff0c;您就Ctrlc 和Ctrlv就可以了。 下面的步骤是最理想的方式&#xff0c;中间没有任何的问题&#xff…...

css五边形

五边形 .fu{width: 172rpx;height: 204rpx;overflow: hidden;border-radius: 10rpx;clip-path: polygon(0% 0%, 100% 0%, 100% 75%, 50% 100%, 0% 75%, 0% 25%); }六边形 clip-path: polygon(50% 0%, 100% 25%, 100% 75%, 50% 100%, 0% 75%, 0% 25%);...

三种常见脉冲神经网络编码方式解读

速率编码&#xff08;rate coding) 速率编码使用输入特征来确定尖峰频率&#xff0c;例如将静态输入数据&#xff08;如 MNIST 图像&#xff09;转换为时间上的脉冲&#xff08;spike&#xff09;序列。它是将神经元发放脉冲的频率与输入值&#xff08;如像素强度&#xff09;…...

Go语言实战:使用 excelize 实现多层复杂Excel表头导出教程

Go 实现支持多层复杂表头的 Excel 导出工具 目录 项目介绍依赖说明核心结构设计如何支持多层表头完整使用示例总结与扩展 项目介绍 在实际业务系统中&#xff0c;Excel 文件导出是一项常见功能&#xff0c;尤其是报表类需求中常见的复杂多级表头&#xff0c;常规表格组件往…...

STM32F103 HAL多实例通用USART驱动 - 高效DMA+RingBuffer方案,量产级工程模板

导言 《STM32F103_LL库寄存器学习笔记12.2 - 串口DMA高效收发实战2&#xff1a;进一步提高串口接收的效率》前阵子完成的LL库与寄存器版本的代码&#xff0c;有一个明显的缺点是不支持多实例化。最近&#xff0c;计划基于HAL库系统地梳理一遍bootloader程序开发。在bootloader程…...

HTML回顾

html全称&#xff1a;HyperText Markup Language&#xff08;超文本标记语言&#xff09; 注重标签语义&#xff0c;而不是默认效果 规则 块级元素包括: marquee、div等 行内元素包括: span、input等 规则1&#xff1a;块级元素中能写&#xff1a;行内元素、块级元素&…...

机器视觉6-halcon高级教程

机器视觉6-halcon高级教程 双目立体视觉原理视差外极线几何双目标定 双目立体视觉之Halcon标定一&#xff0e;标定结果二.Halcon标定过程1.获取左右相机图像中标定板的区域;2.提取左右相机图像中标定板的MARK点坐标和摄像机外部参数;3.执行双目标定;4.获取非标准外极线几何到标…...

YOLOv8 的双 Backbone 架构:解锁目标检测新性能

一、开篇&#xff1a;为何踏上双 Backbone 探索之路 在目标检测的领域中&#xff0c;YOLOv8 凭借其高效与精准脱颖而出&#xff0c;成为众多开发者和研究者的得力工具。然而&#xff0c;传统的单 Backbone 架构&#xff0c;尽管已经在诸多场景中表现出色&#xff0c;但仍存在一…...

1.4 TypeScript 编译是如何工作的?

TypeScript 是 JavaScript 的超集&#xff0c;最显著的优势是引入了静态类型检查。它能帮助开发者在编写代码阶段捕获错误&#xff0c;从而提升代码的健壮性和可维护性。虽然 TypeScript 本身不能直接在浏览器或 Node.js 中运行&#xff0c;但它可以被编译成标准的 JavaScript&…...

【HTML-4】HTML段落标签:构建内容结构的基础

在网页开发中&#xff0c;段落标签<p>是最基础也是最重要的HTML元素之一。这篇博客将深入探讨段落标签的用法、最佳实践以及相关技术细节。 1. 段落标签的基本用法 HTML段落标签用于定义文本段落&#xff0c;浏览器会自动在段落前后添加一定的空白&#xff08;margin&a…...

国际前沿知识系列五:时间序列建模方法在头部撞击运动学测量数据降噪中的应用

目录 国际前沿知识系列五&#xff1a;时间序列建模方法在头部撞击运动学测量数据降噪中的应用 一、引言 二、时间序列建模方法 &#xff08;一&#xff09;ARIMA 模型 &#xff08;二&#xff09;指数平滑法 &#xff08;三&#xff09;小波变换 三、实际案例分析 &…...

未授权访问漏洞利用链实战总结

一、渗透测试核心思路 攻击链路径&#xff1a; 未授权访问 → 接口信息泄露 → 敏感数据获取 → 账户爆破 → 权限提升 → 系统控制 二、关键步骤拆解与分析 信息收集阶段 初始突破口&#xff1a; 系统登录页看似无效&#xff0c;但通过JS文件分析发现隐藏接口&#xff08;如 …...

Centos上搭建 OpenResty

一、OpenResty简介 OpenResty 是基于 Nginx 的扩展平台&#xff0c;完全兼容 Nginx 的核心功能&#xff08;如 HTTP 服务和反向代理&#xff09;&#xff0c;同时通过内嵌 LuaJIT 支持&#xff0c;允许开发者用 Lua 脚本灵活扩展业务逻辑。它简化了动态逻辑的实现。 二、安装…...

Web 服务、 Nfs 服务器以及 Dns 服务器综合实验

要求&#xff1a; 1.web 服务的资源文件通过 nfs 服务器共享 www.luntan.com 2.确保所有主机时间同步 3.定义本地 dns 服务器解析 web 主机域名 实验&#xff1a; 主机服务程序192.168.96.142dns、nfs192.168.96.132web 服务器说明&#xff1a; 设备 IP服务端 192…...

保证数据库 + redis在读写分离场景中事务的一致性

在 Spring Boot 中实现数据库与 Redis 的一致性&#xff0c;特别是处理读写分离时&#xff0c;确保数据修改的事务一致性是一个常见的挑战。因为 Redis 是一个内存数据库&#xff0c;通常用于缓存&#xff0c;而关系型数据库是持久化存储&#xff0c;两者之间的数据同步和一致性…...

汇编语言的子程序魔法:解锁四则运算的奥秘

在嵌入式系统的世界里&#xff0c;汇编语言就像是魔法师手中的魔杖&#xff0c;能够直接操控硬件&#xff0c;实现各种神奇的功能。今天&#xff0c;我将带你走进一场充满乐趣的实验&#xff1a;如何用汇编语言实现四则运算&#xff0c;并将它们封装成子程序。这不仅是一次技术…...

快速解决Linux 中yum镜像拉取失败问题

在linux中使用yum命令拉取镜像的时候&#xff0c;如果出现如下类似报错&#xff1a; 我这里是安装Erlang环境也是同样报错&#xff1a; 其实就是网络环境的问题&#xff0c;更换为国内的镜像源就行了&#xff0c;可以选择cmd的ssh连接方式(命令&#xff1a;ssh root192.168.xxx…...

C#核心概念解析:析构函数、readonly与this关键字

&#x1f50d; 析构函数&#xff1a;资源清理的最后防线 核心作用 析构函数&#xff08;~ClassName&#xff09;在对象销毁前执行&#xff0c;专用于释放非托管资源&#xff08;如文件句柄、非托管内存&#xff09;。托管资源&#xff08;如.NET对象&#xff09;由GC自动回收…...

HarmonyOS基础组件:Button三种类型的使用

简介 HarmonyOS在明年将正式不再兼容Android原生功能&#xff0c;这意味着对于客户端的小伙伴不得不开始学习HarmonyOS开发语言。本篇文章主要介绍鸿蒙中的Button使用。 HarmonyOS中的Button相较于Android原生来说&#xff0c;功能比较丰富&#xff0c;扩展性高&#xff0c;减…...