【NLP预训练模型】你finetune BERT的姿势可能不对哦?

3 文本分类入门finetune:bert-base-chinese 在加载模型后,可以使用它的 `encode` 方法将文本转换为向量表示,或者使用 `forward` 方法对文本进行特定任务的预测。使用 `bert-base-chinese` 模型时,可以将其作为一个特征提取器,将输入的文本转换为固定长度的向量表示,然后将这些向量输入到其他机器学习模型中进行训练或推断。需要注意的是,`bert-base-chinese` 是一个通用的中文语言模型,但它可能在特定的任务上表现不佳。3. 创建模型架构:根据你的任务需求,创建一个适当的模型架构。与之前的训练数据一样使用; 阅读详情

预训练模型BERT是NLP领域如今最大的网红,BERT的预训练过程学习了大量的自然语言中词、句法以及常识等泛领域的知识。因此,在运用BERT到实际的NLP任务中,通常的做法都是基于特定领域内的少量数据(几千到几万)集,再进行Finetune,以适用于当前的任务和领域。

通常来说,基于BERT进行Finetune效果都会还不错。但是如果你的数据集相对小的时候,你有可能会遇到一些麻烦。本篇基于论文《Revisiting Few-sample BERT Fine-tuning》深入看一下BERT的预训练过程,试着深入分析这一过程,用于指导Finetune的工作。

作者&编辑 | 小Dream哥

1  BERT及其预训练

BERT是一个基于transformer encoder的大型双向模型,基于海量的文本进行预训练,训练的任务包括MLM和NSP。

笔者前面有详细介绍BERT的文章,忘记的同学可以先点击了解:

【NLP】 深入浅出解析BERT原理及其表征的内容

在论文《Revisiting Few-sample BERT Fine-tuning》中,论文作者细致的发现了BERT在预训练时,在更新参数时做了一些"小动作",如下图:

BERT在预训练时,省略了标准Adam优化器优化过程中的第9和第10步。步骤9和步骤10分别是对步骤7和步骤8中一阶动量和二阶动量的有偏估计的纠正(bias-corrected)。关于为什么步骤7和步骤8中的一阶动量和二阶动量为什么是有偏的,感兴趣的读者可以翻看原文去了解,这里不做繁琐的推演了。

需要说明的是,为什么BERT在预训练时要省略和可以省略这两部呢?笔者猜测,google省略优化步骤主要原因应该是为了提速,毕竟预训练过程的数据量如此之大,BERT又是如此的庞大。那么为什么能做这样的省略呢,笔者猜测,是因为BERT在预训练是用的训练数据集非常之大,数据集的分布已经非常接近于实际的样本分布,因此可以省略上述步骤。

2 BERT的小样本Finetune

如我们上一节讨论的,BERT的预训练过程用的Adam优化器是非标的,可以称为BERT_Adam。然后论文作者发现,如今产业界和学术界大部分的开源BERT库的Adam优化器都是基于这个版本。

作者认为,BERT_Adam会造成Finetune时的不稳定(insstability)。

论文作者做实验发现,在小样本Finetune时,将BERT_Adam换成Adam确实会有更好的效果。笔者用自己的2000左右的数据集,做分类任务,确实也复现到了同样的现象。至此,我们发现了BERT在预训练时一个不小的坑,在小样本Finetune时,需要换回标准Adam优化器,因为小样本需要对一阶动量和二阶动量做bias-correction。

笔者看了下tensorflow和keras的Adam优化器实现,确实是BERT_Adam的实现:

所以,坑我们已经找到了,后续大家在bert Finetune时,最好能够自己重写一下Adam优化器,将其规范为标准的Adam优化器,或者直接用一些标准的开源库。

总结

基于BERT的预训练权重进行Finetune,是NLP领域目前最流行和高效的手段。本文介绍了预训练过程中会出现的一个大坑,即大部分开源的Adam优化器都是非标准的,并介绍了解决的方案。

下期预告:ACL论文领读系列

知识星球推荐

扫描上面的二维码,就可以加入我们的星球,助你成长为一名合格的自然语言处理算法工程师。

知识星球主要有以下内容:

(1) 聊天机器人。

(2) 知识图谱。

(3) NLP预训练模型。

转载文章请后台联系

侵权必究

往期精选

预训练模型--GPT why预训练+finetune 目前在nlp领域,比较流行的一种方式就是“pretrain+finetune” 为什么是这种模式呢? 在nlp领域大量数据是无标签的,只有小量数据是有标签的,而大量数据可以帮助模型获得更好的效果(泛化能力),所以在pretrain阶段采用大量无标签的数据无监督学习(在此阶段模型没有明确的下游任务目标,学习的是普适的文本特征),而再在finetune阶段再根据不同具体任务使用小量有标签的数据有监督微调; 在nlp领域任务种类并不只有一种,也就是说上面提到的finetune阶段 阅读详情

相关推荐

[预训练语言模型专题] RoBERTa: 捍卫BERT的尊严

本文为预训练语言模型专题的第15篇。 快速传送门 1-4:[萌芽时代]、[风起云涌]、[文本分类通用技巧]、[GPT家族] 5-8:[BERT来临]、[浅析BERT代码]、[ERNIE合集]、[MT-DNN(KD)] 9-12:[Transformer]、[Transformer-XL]、[UniLM]、[Mass-Bart] 13-14:[跨语种模型]、[XLNet] 感谢清华大学自然语言处理实验室对预训练语言模型架构的梳理,我们将沿此脉络前行,探索预训练语言模型的前沿技术,红...

yang191919的博客 1810

【NLP】如何在文本分类任务中Fine-Tune BERT

问 题BERT在许多自然语言理解(NLU)任务中取得了惊人的成果,但它的潜力还有待充分挖掘。目前很少有如何能进一步提高BERT性能的研究,因此,如何通过一些技巧和方法最大限度的提升BE...

fengdu78的博客 1314

finetune:NLP的Scikit学习风格模型微调

NLP的Scikit学习风格模型微调 Finetune是一个库,允许用户利用最新的经过预训练的NLP模型来执行各种下游任务。 Finetune当前支持以下模型的TensorFlow实现: BERT ,摘自 RoBERTa ,摘自 GPT ,摘自 GPT2 ,来自 TextCNN ,摘自 时间卷积网络,摘自 DistilBERT来自 部分 描述 基本模型,可配置等 如何使用pip或直接从源代码安装 在Docker容器中进行微调和推理 完整的API文档 Finetune API导览 微调基础语言模型就像调用Classifier.fit一样容易: model = Classifier () # Load base model model . fit ( trainX , trainY ) # Finetune base model

#深入理解# NLP 中的 Feature-based 和 Fine-tune 两种学习方法

基于神经网络的语言模型根据学习方法不同大体可以分为两大类,分别是Feature-based和Fine-tune Feature-based 方法是通过训练神经网络从而得到词语的embedding,换句话说就是通过神经网络得到更恰当的向量来表示词库中的每一个词语,Feature-based 方法不使用模型本身,而是使用模型训练得到的参数作为词语的 embedding Fine-tune 方法会根据下游特定的任务,在原来的模型上面进行一些修改,使得最后输出是当前任务需要的。这些修改一般是在模型的最后一层,或者

lch551218的博客 1699

Python-在Keras下微调Bert的一些例子

在Keras下微调Bert的一些例子;some examples of bert in keras

奇安信 2025 年护网蓝队初选笔试题(附答案解析)

熬夜为大家整理了 奇安信 2025 年护网蓝队初选笔试题,(关注我我会持续更新)涵盖 SQL 注入、Web 安全、渗透测试、二进制安全 等核心知识点,并附上详细答案解析,助力大家高效备考!12.下列关于虚表指针描述正确的是(1.5分)✅ B. 虚表指针存储的是虚表的首地址❌ A. 任何类对象都存在虚表指针(仅含虚函数的类有)❌ C. 虚表指针位于对象内存空间的起始处(由编译器决定)❌ D. 虚表指针是否存在不影响对象所占内存空间的大小(存在时会增加指针大小)📌 解析:虚表指针(vptr)用于实现多态,指向

Aishenyanying33的博客 4699

【Huggingface系列学习】Finetuning一个预训练模型

【huggingface系列】Fituning预训练模型

qq_52852138的博客 2776

实战对比:Lmcache+vllm将KVcache卸载到CPU和SSD的性能差异(附完整配置)

本文通过实战对比Lmcache与vLLM在KV Cache卸载到CPU和SSD的性能差异,详细解析了配置优化、基准测试及高级调优策略。实验显示,CPU卸载在低并发下表现优异,而SSD方案在高并发场景中更具性价比优势,为LLM推理任务提供了高效的存储解决方案。

weixin_30664051的博客 701

huggingface fine tune 教程

Huggingface Transformers(1)-Hugging Face官方课程 - 知乎

qq_42378739的博客 527

1、Ovirt 开源虚拟化平台安装

Ovirt虚拟化Node和Engine安装

大鱼 6266

从Pikachu靶场实战解析越权漏洞:原理、攻击与防御

本文通过Pikachu靶场实战详细解析越权漏洞的原理、攻击方式与防御策略。文章深入探讨水平越权和垂直越权的危害,结合代码示例展示漏洞利用过程,并提供代码层和架构层的立体化防御方案,帮助开发者有效防范这一Web安全隐形杀手。

weixin_29325007的博客 359

预训练语言模型fine-tuning近期进展概述

近年来,迁移学习改变了自然语言处理领域的范式,对预训练语言模型(PLM)进行微调(fine-tuning)已经成为了新的范式。本文主要梳理了近期的预训练语言模型做fine-tuning的进...

zenRRan的博客 1740

使用ChIPSeeker进行ChIP-seq, ATAC-seq,cut&tag等富集峰的基因组注释

常规的下一代高通量测序(next generation sequencing, NGS)实验通常产生大量短片段(reads),通常我们需要将这些reads比对到参考基因组/转录组上,即将它们置于生物学上有意义的基因背景下,才能获得有意义的结果。一般我们认为会产生两种类型的数据(当然两者并无严格意义上的区分)

微生信 3320

BERT微调finetune笔记

参考: 什么是BERT? - 知乎 (zhihu.com) 词向量之BERT - 知乎 (zhihu.com) BERT 详解 - 知乎 (zhihu.com) 详解Transformer (Attention Is All You Need) - 知乎 (zhihu.com) 从Transformer到Bert - 知乎 (zhihu.com) 14.10. 预训练BERT — 动手学深度学习 2.0.0-alpha2 documentation (d2l.ai) (强推)李宏

K1052176873的博客 2930

如何在 Windows 中实时打开字幕

在 Windows 操作系统中,你可以使用编程来实现实时字幕功能,以便在屏幕上显示即时的文字内容。下面是一个示例代码,展示了如何使用Python编程语言在Windows上实现实时字幕功能。这样,字幕窗口将会不断地显示系统当前时间作为字幕。你可以根据自己的需求修改主循环中的内容,以显示你想要的实时字幕。希望以上代码和说明能够帮助你在Windows中实现实时字幕功能。函数创建了一个顶级窗口,并设置窗口的样式、位置和大小。方法,用于在字幕窗口中显示指定的字幕内容。上述代码中,我们使用了Python的。

DevWizard的博客 3272

【3天快速入门WPF】1-从最简单的xaml开始

首先我们要知道xaml语法中声明即定义,意思就是“见到元素就相当于创建实例”,MainWindow.xaml的主干是一个元素里包含着一个 元素。这段程序就是在定义一个Window类的实例,这个实例的一个组成部分是一个Grid类的实例。

Zy100Papa的博客 1625

2021秋招-NLP基础-Attention-预训练模型总结

NLP基础-预训练模型总结

LBJ_King的博客 3010

Java中使用工厂模式和策略模式优雅消除if-else语句(UML类图+案例分析)

在最近的后端开发中,多多少少会发现有很多if-else语句,如果条件过多则会造成整体代码看起来非常臃肿。本篇博客汇总了我对工厂模式和策略模式的理解,以及我是如何把它们巧妙运用在实际项目当中的一些技巧进行了分享,如有问题,欢迎评论区讨论!

黄团团的个人博客 2614

2020 NLP算法面试必备!NLP预训练模型的全面总结

转自:https://zhuanlan.zhihu.com/p/115014536 预训练模型(Pre-trained Models,PTMs)的出现将NLP带入了一个全新时代。2020年3月18日,邱锡鹏老师发表了关于NLP预训练模型的综述《Pre-trained Models for Natural Language Processing: A Survey》[1],这是一篇全面的综述,系统...

qq_42189083的博客 2409

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

网页翻书怎么做?Turn.js 指南:5 分钟给静态页面加上 3D 翻书效果

想让网页像真书一样"哗"地翻过一页,以前得自己算 CSS 透视、手写动画和触摸事件,折腾半天效果还很假。Turn.js 省掉了这些:它是一个 JavaScript 翻页效果库,几行配置就能让静态页面拥有 3D 翻书效果,变成可交互的电子书或杂志风展示。 [![Turn.js 3D翻书效果中的杂志封面页](https://raw.gitcode.com/gh_mirrors/tu/turn.js/

gitblog_00282的博客 230

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

gh_mirrors/fi/finetune:终极NLP模型微调框架,像Scikit-learn一样简单高效

gh_mirrors/fi/finetune是一个Scikit-learn风格的NLP模型微调框架,它让自然语言处理模型的微调过程变得简单高效,即使是新手也能快速上手。该框架提供了直观的API和丰富的功能,帮助用户轻松实现各种NLP任务的模型微调。 ## 为什么选择gh_mirrors/fi/finetune? ### 简单易用的Scikit-learn风格API gh_mirrors/fi/

gitblog_00951的博客 905

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

bert预训练模型解读_论文解读:BERT模型及fine-tuning

在上周BERT这篇论文[5]放出来引起了NLP领域很大的反响,很多人认为是改变了游戏规则的工作,该模型采用BERT + fine-tuning的方法,在11项NLP tasks中取得了state-of-the-art的结果,包括NER、问答等领域的任务。本文对该论文进行介绍。1. 现有的Language Model Embedding语言模型来辅助NLP任务已经得到了学术界较为广泛的探讨,通常有两...

weixin_39796363的博客 1328

bert 源码解读(基于gluonnlp finetune-classifier)

文章目录Bert 论文概述Bert 模型结构embedding 结构attention 结构finetune classifier 结构Bert 模型源码解析tokenizeBERTembeddingencoderattentionpositionwise_ffn与 transformer 简单比较 Bert 论文概述 bert 是 Pre-training of Deep Bidirection...

sinat_34022298的博客 3098

BERT用于推荐系统的finetune记录

环境 transformers==2.7.0 pytorch ==1.5.1 思想 先说一下这个推荐模型的大概思路: 收集用户和商品对应的评论,数据集用的是亚马逊的 提取用户id、商品id、对应的评论和评分,其中id转化为从0开始的整数 将数据集按一定比例划分为训练集、验证集和测试集 挖掘用户-商品之间评论的语义信息(通过句向量的方式) 根据句向量预测新的评论可能的评分和真实的评分来进行误差计算 如何finetune 一开始始终不明白BERT-finetune的含义 ,我觉得肯定有很多人一开始接触的时候

qq_39609267的博客 1213

NLP(四十四)使用keras-bert加载BERT模型的两种方法

  keras-bert是Keras框架加载BERT模型的Python第三方模块,在之前的文章中,笔者介绍了如何使用keras-bret来实现不同的NLP任务,比如: NLP(三十四)使用keras-bert实现序列标注任务 NLP(三十五)使用keras-bert实现文本多分类任务 NLP(三十六)使用keras-bert实现文本多标签分类任务 NLP(三十七)使用keras-bert实现英语序列标注任务 NLP(三十九)使用keras-bert实现完形填空及简单的文本纠错功能 NLP(四十二)人物关系

山阴少年 4520

Bert模型的基本原理与Fine-tuning

本文主要讲解Bert模型的基本原理与Fine-tuning。 基本原理 BERT是一种 预训练语言模型 ,即首先使用大量无监督语料进行语言模型预训练(Pre-training),再使用少量标注语料进行微调(Fine-tuning)来完成具体NLP任务(分类、序列标注、句间关系判断和机器阅读理解等)。 BERT的全称是Bidirectional Encoder Representation from Transformers,即:基于transformer的双向Encoder,所以在学习BERT之前先对Sel

zhong_ddbb的博客 7775
上一篇: 【通知】有三AI发布150页深度学习开源框架指导手册与GitHub项目,欢迎加入我们的开源团队...
下一篇: 【星球知识卡片】AutoML都有哪些核心技术,如何对其进行长期深入学习
言有三
言有三 领域专家: 人工智能技术领域 领域专家: 人工智能技术领域
博客等级 码龄15年 3635粉丝 976原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

言有三

三人行必有AI

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值