人类语言处理nlp部分笔记——二、BERT和它的家族-介绍和微调

2024-06-08 01:04

本文主要是介绍人类语言处理nlp部分笔记——二、BERT和它的家族-介绍和微调,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

参考自李宏毅课程-人类语言处理

二、BERT和它的家族-介绍和微调

在这里插入图片描述

1. What is pre-train model

这里所说的pre-train model是输入一串tokens,能够输出一串vectors,且每个vector可以表示对应的语义的模型,这些vectors也被称作为embeddings。以前常用的模型有word2vec,Glove等,这里并没有详细介绍,之后需要单独去看,由于英文单词太多了,只要来一个新单词,整个embedding的模型就需要重新train,为了解决这个问题,有了fasttext。fasttext是针对英文的,针对中文的则是输入图片,让模型通过图片中文字的偏旁部首去预测出训练时没见过的文字的embedding。这种训练embedding的方式,根据语言的不同会有不同的方法。
在这里插入图片描述
但是有一个问题,如果输入的token是一样的,那么每次出来的vector也一样,所以希望模型可以在输入某个token的embedding的时候,考虑上下文信息,这叫做contextualized word embedding。这样的模型基本就是基于LSTM或者self-attention layer去搭建的一个seq2seq的模型(如Bert,Megatron,Turing NLG等),可以理解为encoder。
在这里插入图片描述
为了让模型效果变好,所用的模型越来越大,参数量越来越多,有一些模型压缩方面的技术,比如Distill BERT,Tiny BERT,ALBERT等,这里没有细说。

2. How to fine-tune

将pre-train model应用到各种任务中,这里将任务按照输入和输出分类
在这里插入图片描述

2.1 Input

  • one sentence
    输入只有一个句子时,直接输入就行了,因为pre-train model也是一个句子的输入。
  • multiple sentences
    输入有多个句子时,用一个叫做“[SEP]”的分隔符将两个句子拼成一个句子,然后再输入。
    在这里插入图片描述

2.2 Output

  • one class
    输入只有一个分类的时候,有两种做法,一种做法是,在输入的开头加“[CLS]”token,然后在“[CLS]”对应的输出的embedding后面加一个head,也就是比较浅的神经网络,可以是一层全连接,然后输出想要的类别数量;另一种做法是,把所有token的输出都输入到一个head当中去,然后输出想要的类别数量。
    在这里插入图片描述
  • class for each token
    当每个token都要做分类的时候,那在模型的后面加一个seq2seq的head就可以了。
    在这里插入图片描述
  • copy from input
    比如,当任务是Extraction-based QA时,输入有question和document,因此加入“[SEP]”分隔符合并成一个序列,然后输出是找出document中的哪个token为答案的start,哪个为答案的end,这个时候,就要用两个额外的向量去分别和document中每个token的输出做dot product,然后和start向量最相关的token是start token,和end向量最相关的token是end token。
    在这里插入图片描述
  • general sequence
    当希望模型的输出也是一个sequence的时候,可以把pre-train model的输出作为输入,在后面接一个decoder,让decoder去完成输出sequence的步骤,这样的坏处是decoder是一个比较大的模型,同时也没有进行pre-train。
    在这里插入图片描述
    另一种做法是把pre-train model当作decoder去做,这就需要在inout后面加一个类似“[SEP]”的特殊符号,然后把符号的输出丢到自定义的head中,然后输出一个token,然后把这个token当作输入,重复这个过程,直到输出"[EOS]"。
    在这里插入图片描述

2.3 Fine-tune

  • 在训练的时候,可以把pre-trained model的weights都固定住,只去训练最后自定义加上去的head。
  • 也可以直接训练整个模型,虽然模型很大,但是大部分的weights是与训练过的,所以训练起来没有重头训练困难,实际经验也是这种方法比上面的方法更好。
    在这里插入图片描述
    如果要用第二种方法,不同的tast需要train不同的模型,而这样的模型往往非常大,这就很浪费计算资源和存储资源,所以就有了Adaptor。Adaptor是我们在pretrained-model里加一些layer,然后训练的时候就训练这些layer和最后的head,这样pretrained model还是不动的。
    在这里插入图片描述
    下图就是一种插入Adaptor的方式。实验证明,Adapter可以让模型调很少的参数,却达到finetune整个模型的效果,Adaptor怎么加是需要考虑的。
    在这里插入图片描述

2.4 Weighted Features

由于pre-trained model往往很大,不同层得到的feature代表的意义也不同,所以可以把各层的feature抽出来加权后输入到head,加权的weights可以是模型自己去学的。
在这里插入图片描述

3. Why fine-tune

那为什么需要fine-tune,一方面是trainning loss可以更快的收敛,下图对比随机初始化训练和预训练之后训练的training loss随epoch的变化过程。
在这里插入图片描述
另一方面是fine-tune得到的模型有更好的泛化能力,在同样去找极小值点的时候,预训练的模型找到的极小值点附近的区域更加平缓,意味着泛化能力更好。
在这里插入图片描述

这篇关于人类语言处理nlp部分笔记——二、BERT和它的家族-介绍和微调的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1040815

相关文章

Python FastAPI+Celery+RabbitMQ实现分布式图片水印处理系统

《PythonFastAPI+Celery+RabbitMQ实现分布式图片水印处理系统》这篇文章主要为大家详细介绍了PythonFastAPI如何结合Celery以及RabbitMQ实现简单的分布式... 实现思路FastAPI 服务器Celery 任务队列RabbitMQ 作为消息代理定时任务处理完整

C#使用SQLite进行大数据量高效处理的代码示例

《C#使用SQLite进行大数据量高效处理的代码示例》在软件开发中,高效处理大数据量是一个常见且具有挑战性的任务,SQLite因其零配置、嵌入式、跨平台的特性,成为许多开发者的首选数据库,本文将深入探... 目录前言准备工作数据实体核心技术批量插入:从乌龟到猎豹的蜕变分页查询:加载百万数据异步处理:拒绝界面

Springboot处理跨域的实现方式(附Demo)

《Springboot处理跨域的实现方式(附Demo)》:本文主要介绍Springboot处理跨域的实现方式(附Demo),具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不... 目录Springboot处理跨域的方式1. 基本知识2. @CrossOrigin3. 全局跨域设置4.

Mysql删除几亿条数据表中的部分数据的方法实现

《Mysql删除几亿条数据表中的部分数据的方法实现》在MySQL中删除一个大表中的数据时,需要特别注意操作的性能和对系统的影响,本文主要介绍了Mysql删除几亿条数据表中的部分数据的方法实现,具有一定... 目录1、需求2、方案1. 使用 DELETE 语句分批删除2. 使用 INPLACE ALTER T

python+opencv处理颜色之将目标颜色转换实例代码

《python+opencv处理颜色之将目标颜色转换实例代码》OpenCV是一个的跨平台计算机视觉库,可以运行在Linux、Windows和MacOS操作系统上,:本文主要介绍python+ope... 目录下面是代码+ 效果 + 解释转HSV: 关于颜色总是要转HSV的掩膜再标注总结 目标:将红色的部分滤

Python实现自动化接收与处理手机验证码

《Python实现自动化接收与处理手机验证码》在移动互联网时代,短信验证码已成为身份验证、账号注册等环节的重要安全手段,本文将介绍如何利用Python实现验证码的自动接收,识别与转发,需要的可以参考下... 目录引言一、准备工作1.1 硬件与软件需求1.2 环境配置二、核心功能实现2.1 短信监听与获取2.

Python使用date模块进行日期处理的终极指南

《Python使用date模块进行日期处理的终极指南》在处理与时间相关的数据时,Python的date模块是开发者最趁手的工具之一,本文将用通俗的语言,结合真实案例,带您掌握date模块的六大核心功能... 目录引言一、date模块的核心功能1.1 日期表示1.2 日期计算1.3 日期比较二、六大常用方法详

MySQL中慢SQL优化的不同方式介绍

《MySQL中慢SQL优化的不同方式介绍》慢SQL的优化,主要从两个方面考虑,SQL语句本身的优化,以及数据库设计的优化,下面小编就来给大家介绍一下有哪些方式可以优化慢SQL吧... 目录避免不必要的列分页优化索引优化JOIN 的优化排序优化UNION 优化慢 SQL 的优化,主要从两个方面考虑,SQL 语

C语言中的数据类型强制转换

《C语言中的数据类型强制转换》:本文主要介绍C语言中的数据类型强制转换方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录C语言数据类型强制转换自动转换强制转换类型总结C语言数据类型强制转换强制类型转换:是通过类型转换运算来实现的,主要的数据类型转换分为自动转换

利用Go语言开发文件操作工具轻松处理所有文件

《利用Go语言开发文件操作工具轻松处理所有文件》在后端开发中,文件操作是一个非常常见但又容易出错的场景,本文小编要向大家介绍一个强大的Go语言文件操作工具库,它能帮你轻松处理各种文件操作场景... 目录为什么需要这个工具?核心功能详解1. 文件/目录存javascript在性检查2. 批量创建目录3. 文件