解析Bert系列模型的输出结果?结构与形状是什么?如何更好地应用到‘微调下游任务’中?

        无论是工作还是上学,使用Bert、RoBERTa或者Bert系列模型作为基底,在此基础之上构建神经网络分支进行微调,是非常简单、常见的一种任务实现方式。既然是基于别人的工作进行展开,那就有必要了解Bert系列模型的输出结果结构。(不同版本的torch、tensorflow在Bert输出结构上可能略有不同)。

        Bert模型实现的框架中,输出主要有3个:last_hidden_statepooler_output 以及hidden_state。注:当然还有其他的一些输出,比如attentions、cross_attentions等,但是这些输出结果一般不用于任务)

1. last_hidden_state

        这是模型的最后一层隐藏层状态,本身是一个三维张量,其形状为 [batch_size, sequence_length, hidden_size],它是模型的主要输出。对于每一个输入的token,last_hidden_state都会输出一个向量,形状为[1, hidden_size],也就是最后一维。

        绝大多数任务都可以直接基于这个张量进行训练。

        举一个实体匹配的例子:有两个实体text1和text2,输入Bert的形式一般为[CLS,text1,SEP,text2,SEP],其中 CLS 和 SEP 为特殊字符。Bert模型输出last_hidden_state,在这里有几种很直观的利用方式。

        (1)不做任何处理直接将last_hidden_state,过Layer_norm、全连接等结构,最终经过sigmoid 或者 softmax 完成不同的任务。

        (2)基于last_hidden_state,做cross_attention,然后经过基础网络层输出结果

        (3)将text1和text2对应的token抽取并使用avgpool1()求平均(得到两个[1, hidden_size]的张量),这两个张量与后面描述的CLS特征向量做拼接。基于这个拼接后的结果做后续的操作(基础网络层)。

        实验结果表明:(2)和(3)的效果更好一点。

2. pooler_output

        它是Bert模型的输出中最后一层隐藏状态(last_hidden_state)的第一个token(通常是[CLS]标记)经过一个线性层和一个tanh激活函数得到的,形状为[batch, hidden_size]

        我们通常将pooler_output理解为整个句子 or 整个输入的总结,因此这个输出通常会被用作句子级别的任务,比如句子分类。

        在实际使用过程中,将其与last_hidden_state或者其他隐藏层向量进行拼接,是一种效果不错的用法。

3. hidden_states

        这是模型的所有隐藏层的输出,它包含了模型的所有中间层的信息,形状为[13, batch_size, sequence_length, hidden_size](13 = 1层embedding layer 和 12层transfomer block)。

        hidden_states的使用主要在于微调阶段,根据任务类型以及数据量的大小,可以手动控制哪一层的权重需要冻结,哪一层的权重需要重新训练/微调。

if config.freeze_layer_count:   # 个人自定义的参数,控制是否需要启用参数冻结logger.info(f"frozen layers count of {str(config.freeze_layer_count)}")# We freeze here the embeddings of the model# for param in qm_sim_model.bert.embeddings.parameters(): # embedding层#     param.requires_grad = Falseif config.freeze_layer_count != -1:# if freeze_layer_count == -1, we only freeze the embedding layer# otherwise we freeze the first `freeze_layer_count` encoder layersfor layer in         qm_sim_model.bert.encoder.layer[:config.freeze_layer_count]:for param in layer.parameters():param.requires_grad = False

# param.requires_grad = False,意味着不会计算该参数的梯度,也就是不会更新这个参数

根据需要,微调部分transformer block的参数

参考资料:

NLP系列(3)文本分类(Bert+TextCNN)pytorch - 知乎

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

Bert模型输出:last_hidden_state转换为pooler_output_获取bert中间层的输出-CSDN博客

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

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

相关文章

【数据采集】实验07-Kafka的常用命令及使用

文章目录 一、实验目的二、实验准备三、实验内容1. 运行Zookeeper2. 运行kafka3. 创建topics4. Kafka与MySQL的组合使用,把JSON格式数据放入Kafka发送出去,再从Kafka中获取并写入到MySQL数据库,p975. Kafka与MySQL的组合使用,把My…

在视频号上面怎么卖货?只需要开一个店铺即可!具体怎么操作?

大家好,我是电商小V 最近这段时间在视频号上面卖货的热度可以说是非常大的,也是创业者常常提起的话题,大家之所以对视频号卖货非常感兴趣那是因为视频号和抖音处于一个赛道,也是朝着电商的方向发展, 所以说大家对于腾讯…

mongo篇---mongoDB Compass连接数据库

mongo篇—mongoDB Compass连接数据库 mongoDB笔记 – 第一条 一、mongoDB Compass连接远程数据库,配置URL。 URL: mongodb://username:passwordhost:port点击connect即可。 注意:host最好使用名称,防止出错连接超时。

cmake使用(01)

顶层CMakeLists.txt cmake_minimum_required (VERSION 3.5)# 配置 交叉编译 放置在 project() 命令之前# /opt/fslc-wayland/2.5.2/sysroots/aarch64-fslc-linux/usr/bin/make: error # while loading shared libraries: libdl.so.2: cannot open shared object file: # No su…

c++ 模板类的泛化版本,只声明,不定义,可以么?可以

王建伟老师的课本,413 页讲解过这个情况。只要不创建泛化模板的对象即可。最近看源码时,也出现了这种情况,大师们也这么写。故简化逻辑,测试一下: 谢谢

家庭海外仓系统:做好标准化管理,小空间也能做出高收益

家庭海外仓凭借其运营模式灵活,合作成本低的独有特点,还是被很多跨境卖家所接受的。不过家庭海外仓的盈利也面临着一些问题。 首先,家庭海外仓的仓储空间有限,很难通过规模效应放大收益。家庭海外仓通常只能存储少量货物&#xf…

个人参与场外期权交易的最全指南

个人参与场外期权交易的最全指南 一、引言 场外期权作为金融市场中的一大亮点,为个人投资者提供了多样化的风险管理及投资策略选择。本文将详细探讨个人如何安全、有效地参与场外期权交易。 文章来源/:财智财经 二、理解场外期权 场外期权是双方通过协…

ISO 26262认证与ASPICE认证是汽车电子软件的双重保障

为了确保汽车电子软件的高品质与可靠性,ISO 26262与ASPICE两大认证标准应运而生,它们共同为汽车电子软件的开发提供了双重保障。 (要明确的是:在ASPICE行业中专业来说,ASPICE项目是没有认证,而只有评估。不…

fastjson反序列化漏洞复现

靶机IP:192.168.253.134 攻击机IP:192.168.142.44 1、靶机环境搭建 靶机:http://caiyun.feixin.10086.cn/dl/095CteuquNKVq 提取密码:NNPD RCE:http://caiyun.feixin.10086.cn/dl/095CuIsJQOw14 提取密码:J2vd 靶机账号密码&…

OBS+nginx+nginx-http-flv-module实现阿里云的推流和拉流

背景:需要将球机视频推送到阿里云nginx,使用网页和移动端进行播放,以前视频格式为RTMP,但是在网页上面播放RTMP格式需要安装flash插件,chrome浏览器不给安装,调研后发现可以使用nginx的模块nginx-http-flv-…

工业物联网网关助推企业数字化转型,解决设备互联互通问题-天拓四方

随着科技的飞速发展,物联网技术已经渗透到工业领域的每一个角落。作为连接物理世界和数字世界的桥梁,工业物联网网关在推动企业数字化转型中发挥着至关重要的作用。数字化转型已经成为企业提升竞争力的必由之路,然而,在转型过程中…

升级最新版openssh-9.7p1及openssl-1.1.1h详细步骤及常见问题总结

近期因为openssh相继被漏洞扫描工具扫出存在漏洞,所以考虑升级操作系统中的openssh和openssl为最新版本,来避免漏洞风险。期间的升级过程及遇到的疑难问题,特此记录下来,供有需要的人参考。 本次目标是升级 openssh 为 9.7p1 版本…

计算机网络ppt和课后题总结(上)

试在下列条件下比较电路交换和分组交换。要传送的报文共 x(bit)。从源点到终点共经过 k 段链路,每段链路的传播时延为 d(s),数据率为 b(b/s)。在电路交换时电路的建立时间为 s(s)。在分组交换时分组长度为 p(bit),且各结点的排队等待时间可忽…

深入理解 Vue Router 及其 `router` 和 `route` 变量

深入理解 Vue Router 及其 router 和 route 变量 在使用 Vue.js 进行单页面应用开发时,Vue Router 是一个不可或缺的工具。它使得我们可以轻松地管理应用中的路由,提供了流畅的用户体验。然而,在实际开发中,许多开发者可能会混淆…

【Bug】httpClient循环调用除首次外会报Forbidden postman上用同样的参数可以

文章目录 问题问题代码原因解决处理Bug的具体步骤 问题 httpClient循环调用除首次外会报Forbidden postman上用同样的参数可以 问题代码 出问题的是一个外部系统的登录接口的调用 var response _httpClient.PostAsync($"/prod-api/openauth/login", content).Res…

Object.defineProperty 和 Proxy 响应式原理 vue2 vue3

一、VUE2 响应式原理 Object.defineProperty Object.defineProperty 方法允许精确添加一个属性到对象上,或者修改对象的现有属性,并返回这个对象。它可以用来定义或修改属性的特性,如 value, writable, enumerable, 和 configurable。 1) …

YOLOv8+PyQt5苹果叶病害检测(可以重新训练,yolov8模型,从图像、视频和摄像头三种路径识别检测)

效果视频:YOLOv8PyQt5苹果叶病害检测系统完整资源集合 资源包含可视化的苹果叶病害检测系统,基于最新的YOLOv8训练的苹果叶病害检测模型,和基于PyQt5制作的可视苹果叶病害系统,包含登陆页面和检测页面,该系统可自动检…

操作符:->

在一个指针变量指向一个结构体时常常会用->操作符来使用结构体内部的成员&#xff0c; 下面是我们没有使用指针时&#xff0c;如何调用结构体内的成员&#xff0c; #include<stdio.h>struct stu {char name[20];int age;char number[20]; };int main() {struct stu …

python实现——分类类型数据挖掘任务(图形识别分类任务)

分类类型数据挖掘任务 基于卷积神经网络&#xff08;CNN&#xff09;的岩石图像分类。有一岩石图片数据集&#xff0c;共300张岩石图片&#xff0c;图片尺寸224x224。岩石种类有砾岩&#xff08;Conglomerate&#xff09;、安山岩&#xff08;Andesite&#xff09;、花岗岩&am…

学会这14大招,30天涨粉两三千没问题!沈阳新媒体运营培训

很多小白在刚转入公司做新媒体时&#xff0c;基本都是从帮助公司运营账号开始的。但不同于个人号&#xff0c;一个企业本身是没有ip属性的&#xff0c;它的风格、调性等&#xff0c;都需要通过你的运营&#xff0c;让它变成一个活灵活现的、赋予独立个性人设的账号。 目前&…