《BERT基础教程:Transformer大模型实战》读书笔记

概念

BERT,Bidirectional Encoder Representations from Transformers,多Transformer的双向编码器表示法。

RNN,recurrent neural network,循环神经网络。

LSTM,long short-term memory,长短期记忆网络。

NLI,Natural language inference,自然语言推理。

知识蒸馏(knowledge distillation),一种模型压缩技术,指训练一个小模型来重现大型预训练模型的行为。使用知识蒸馏法将知识从预训练的大型BERT模型迁移到小型BERT模型。也称师生学习。

两类文本摘要(text summarization)任务:

  • 提取式摘要任务:提取给定文本中重要的句子形成摘要
  • 抽象式摘要任务:转述给定文本形成摘要

未登录词(out-of-vocabulary word, OOV word),

GeLU,即高斯误差线性单元(Gaussian Error Linear Unit),用于激活函数。

ASR,automatic speech recognition,自动语音识别。

MSE,mean squared error,均方误差。MSE最小化作为训练任务。

t-SNE,t-distributed stochastic neighbor embedding,t分布随机邻域嵌入法。用于

CEL,cosine embedding loss,余弦嵌入损失。两个特征向量之间的距离,距离越小,特征向量越准确。

TLM,translation language modeling,翻译语言模型构建任务。

原理

RNN和LSTM已广泛应用于时序任务:文本预测、机器翻译、文章生成等。然而面临一大问题就是如何记录长期依赖。

Transformer完全依赖于注意力机制,并摒弃循环,及自注意力(self-attention)。

可将预训练模型用于两种场景:

  • 作为特征提取器,提取嵌入;
  • 针对文本分类任务、问答任务等下游任务对预训练的BERT模型进行微调。

有两种:不区分大小写(BERT-uncased)和区分大小写(BERT-cased)。

对于NER任务,named entity recognition,命名实体识别,必须使用区分大小写的模型。

数据集包含文本,故而需要对文本进行向量化,常用算法:TF-IDF、word2vec。

Hugging Face,一个致力于通过自然语言将AI技术大众化的组织,其开源Python Transformers库常用于NLP和自然语言理解(natural language understanding,NLU)任务,包括100多种语言的数千个预训练模型,兼容PyTorch和TensorFlow。

安装:pip install transformers

Google Colab:在线。

BERT模型可使用如下几个约定的符号:

  • 编码器的层数用 L L L表示
  • 注意力头的数量用 A A A表示
  • 隐藏神经元的数量用 H H H表示

几种标准配置:

  • BERT-base:由12层编码器叠加而成。每层编码器都使用12个注意力头,其中前馈网络层由768个隐藏神经元组成,特征向量的大小是768。
  • BERT-large:由24层编码器叠加而成。每层编码器都使用16个注意力头,其中前馈网络层包含1024个隐藏神经元,特征向量的大小是1024。
  • BERT-tiny: L = 2 , H = 128 L=2, H=128 L=2,H=128
  • BERT-mini: L = 4 , H = 256 L=4, H=256 L=4,H=256
  • BERT-small: L = 4 , H = 512 L=4, H=512 L=4,H=512
  • BERT-medium: L = 8 , H = 512 L=8, H=512 L=8,H=512

在将数据输入BERT之前,首先使用如下3个嵌入层将输入转换为嵌入:

  • 标记嵌入层
  • 分段嵌入层
  • 位置嵌入层

[CLS]只在第一句的开头添加,而[SEP]在每一句的结尾都要添加。[CLS]用于分类任务,而[SEP]用于表示每个句子的结束。

位置编码:

WordPiece:特殊的词元分析器,遵循子词词元化规律。

BERT模型在以下两个自然语言处理任务上进行预训练:

  • 掩码语言模型构建
  • 下句预测

语言模型构建任务是指通过训练模型来预测一连串单词的下一个单词。可以把语言模型分为两类:

  • 自动回归式语言模型:有两种方法:正向(从左到右)预测、反向(从右到左)预测
  • 自动编码式语言模型:同时利用正向预测和反向预测的优势

全词掩码(whole word masking):如果子词被掩盖,则该子词对应的单词也将被掩盖。

下句预测(next sentence prediction):用于训练BERT模型的策略,一个二分类任务。给BERT提供两个句子,让其预测第二个句子是否是第一个句子的下一句。

3种常用的子词词元化算法:

  • 字节对编码:byte pair encoding,BPE
  • 字节级字节对编码:byte-level byte pair encoding,BBPE,原理与字节对编码非常相似,但它不使用字符序列,而是使用字节级序列
  • WordPiece:在字节对编码中,首先要从给定的数据集中提取带有计数的单词。然后,将这些单词拆分为字符序列。接着,将具有高频率的符号对进行合并。最后,不断地迭代合并具有高频率的符号对,直到达到词表的大小要求。在WordPiece中,也是这样做的,但不根据频率合并符号对,而是根据相似度合并符号对。合并具有高相似度的符号对,其相似度由在给定的数据集上训练的语言模型提供。

变体

ALBERT

ALBERT:A Lite version of BERT,BERT的精简版,尽量缩短训练时间。
使用以下两种技术减少参数的数量:

  • 跨层参数共享
  • 嵌入层参数因子分解

在应用跨层参数共享时有以下几种方式:

  • 全共享:其他编码器的所有子层共享编码器1的所有参数,默认。
  • 共享前馈网络层:只将编码器1的前馈网络层的参数与其他编码器的前馈网络层共享。
  • 共享注意力层:只将编码器1的多头注意力层的参数与其他编码器的多头注意力层共享。

与任务无关的数据增强方法:

  • 掩码方法
  • 基于词性的词汇替换方法
  • n-gram采样方法

掩码方法和基于词性的词汇替换方法是互斥的,两者只能选择一个。

RoBERTa

RoBERTa:Robustly Optimized BERT Pretraining Approach,稳健优化的BERT预训练方法,在预训练步骤上有一些变化:

  • 在掩码语言模型构建任务中使用动态掩码而不是静态掩码。
  • 不执行下句预测任务,只用掩码语言模型构建任务进行训练。
  • 以大批量的方式进行训练。
  • 使用字节级字节对编码作为子词词元化算法。

ELECTRA

ELECTRA:Efficiently Learning an Encoder that Classifies Token Replacements Accurately,高效训练编码器如何准确分类替换标记。使用一个生成器(generator)和一个判别器(discriminator),并使用替换标记检测这一新任务进行预训练

SpanBERT

SpanBERT,被普遍用于预测文本区间的问答任务和关系提取任务。

pipeline API是由Transformers库提供的简单接口,用于无缝地执行从文本分类任务到问答任务等各类复杂任务

DistilBERT

损失函数是以下3种损失之和:

  • 蒸馏损失;
  • 掩码语言模型损失(学生损失);
  • 余弦嵌入损失。

TinyBERT

蒸馏可以在多层进行:

  • Transformer层:编码器层
  • 嵌入层:输入层
  • 预测层:输出层

两阶段学习框架,即在预训练阶段和微调阶段都应用知识蒸馏法。

Transformer层蒸馏包括两次知识蒸馏:

  • 基于注意力的蒸馏
  • 基于隐藏状态的蒸馏

BERTSUM

BERT for summarization,为文本摘要任务微调。

在Transformer模型中,编码器是一个预训练的BERTSUM模型,但解码器是随机初始化的,这将导致微调时出现差异。由于编码器已经经过预训练,它可能会过拟合,而解码器没有经过预训练,它可能会欠拟合。为解决这个问题,需要使用两个Adam优化器,分别用于编码器和解码器,并对二者使用不同的学习率。

ROUGE

为了评估文本摘要任务,需使用一套评估指标ROUGE(Recall-Oriented Understudy for Gisting Evaluation)。ROUGE在Chin-Yew Lin的论文ROUGE: A Package for Automatic Evaluation of Summaries中首次提出,包含5种评估指标:

  • ROUGE-N
  • ROUGE-L
  • ROUGE-W
  • ROUGE-S
  • ROUGE-SU

ROUGE-N指标(N代表n-gram)是指候选摘要(预测摘要)和参考摘要(实际摘要)之间的多元召回率。召回率为候选摘要和参考摘要之间重叠的元词总数与参考摘要中的元词总数的比率。
召回率 = 重叠的元词总数 参考摘要中的元词总数 召回率=\frac{重叠的元词总数}{参考摘要中的元词总数} 召回率=参考摘要中的元词总数重叠的元词总数

ROUGE-L指标基于最长公共子序列(longest common subsequence, LCS)。两个序列之间的LCS是长度最大的相同子序列。如果候选摘要和参考摘要之间有一个LCS,则可说候选摘要匹配参考摘要。

M-BERT

M-BERT模型中的零数据知识迁移不依赖于词汇的重叠,即词汇重叠对M-BERT模型中的零数据知识迁移没有影响。因此,M-BERT模型能够很好地迁移到其他语言中。

世界语言结构图谱(World Atlas of Language Structures,WALS)是一个大型数据库,它包括语言的结构属性,如语法、词汇和语音属性。

XLM

使用跨语言目标训练的BERT模型被称为跨语言模型(简称为XLM模型)。XLM模型比M-BERT模型表现得更好,因为它可以学习跨语言的特征。

XLM模型使用单语言数据集和平行数据集进行预训练。平行数据集由语言对文本组成,即由两种不同语言的相同文本组成。平行数据集,也称为跨语言数据集。单语言数据集来自维基百科,平行数据集有多个来源,包括MultiUN(联合国多语言语料库)和OPUS(Open Parallel Corpus,开源平行语料库)。XLM模型使用字节对编码,并对所有语言创建共享词表。

XLM模型使用以下任务进行预训练:

  • 因果语言模型构建任务
  • 掩码语言模型构建任务
  • 翻译语言模型构建任务

XLM-R模型是对XLM的扩展,即XLM-RoBERTa模型,代表最先进的跨语言特征学习技术。

对于小语种,获得平行数据集很难,在XLM-R模型中,只用掩码语言模型构建任务目标来训练模型,不使用翻译语言。XLM-R模型只需要一个单语言数据集。

FlauBERT

French Language Understanding via BERT。法语语料库由24个子语料库组成,包含来自不同来源的数据,如维基百科、书籍、内部抓取、WMT19数据、OPUS的法语文本以及维基媒体等。

FLUE(French Language Understanding Evaluation,法语理解评估)。FLUE类似于法语的GLUE标准。FLUE标准中的数据集包括:

  • CLS-FR
  • PAWS-X-FR
  • XNLI-FR
  • 法语Treebank
  • FrenchSemEval

Sentence-BERT

由Ubiquitous Knowledge Processing Lab(UKP-TUDA)研发,是用来获得固定长度的句子特征的,扩展了预训练的BERT模型(或其变体)以获得句子特征。普遍用于句子对分类、计算两个句子之间的相似度等任务。

两种汇聚策略:

  • 通过对所有标记的特征使用平均汇聚法来获得句子特征,从本质上讲,句子特征持有所有词语(标记)的意义。
  • 通过对所有标记的特征使用最大汇聚法来获得句子特征,从本质上讲,句子特征持有重要词语(标记)的意义。

Sentence-BERT模型使用二元组网络架构来执行以一对句子作为输入的任务,并使用三元组网络架构来实现三元组损失函数。

公布的Sentence-BERT模型:

  • bert-base-nli-cls-token:采用预训练的BERT-base模型,用NLI数据集进行微调。使用[CLS]标记作为句子特征。
  • bert-base-nli-mean-token:采用预训练的BERT-base模型,并用NLI数据集进行微调。使用平均汇聚策略计算句子特征。
  • roberta-base-nli-max-tokens:采用预训练的RoBERTa-base模型,并用NLI数据集进行微调。使用最大汇聚策略计算句子特征。
  • distilbert-base-nli-mean-tokens:采用预训练的DistilBERT-base模型,用NLI数据集进行微调。使用平均汇聚策略计算句子特征。

ClinicalBERT

一个针对临床领域的BERT模型,它在一个大型临床语料库上进行预训练。临床记录或进度记录包含关于病人的非常有用的信息:就诊记录、症状、诊断情况、日常活动、观察记录、治疗计划、放射性检查结果,等等。理解临床记录的上下文特征具有挑战性,因为它们有自己的语法结构、缩略语和行话。

使用MIMIC-III临床记录进行预训练。MIMIC-III是Beth Israel Deaconess Medical Center参与创建的一个大型健康数据集合,包括一个重症医学数据集,含有超过40000名重症监护室病人的观察数据。

BioBERT

一个针对生物医学领域的BERT模型。可以针对许多生物医学领域特定的下游任务对BioBERT模型进行微调,如生物医学问答任务、生物医学命名实体识别任务等。

使用以下两个生物医学数据集:

  • PubMed:一个引文数据库,它包含来自生命科学期刊、在线书籍和MEDLINE(美国国立医学图书馆的生物医学文献数据库)的3000多万条生物医学文献的引文。
  • PubMed Central(PMC):一个免费的在线资料库,包括在生物医学期刊和生命科学期刊上发表的文章。

与疾病相关的实体,可以使用以下数据集:

  • NCBI
  • 2010 i2b2/VA
  • BC5CDR

对于与药物/化学品相关的实体,可以使用以下数据集:

  • BC5CDR
  • BC4CHEMD

对于与基因相关的实体,可以使用以下数据集:

  • BC2GM
  • JNLPBA

对于与物种相关的实体,可以使用以下数据集:

  • LINNAEUS
  • Species-800

VideoBERT

第一个联合学习视频特征及语言特征的模型,可应用于图像字幕生成、视频字幕添加、预测视频的下一帧等任务。

与训练BERT模型的下句预测任务类似,语言−视觉对齐也是一个分类任务。但不预测一个句子是否是另一个句子的下一句,而是预测语言标记和视觉标记是否在时间上吻合,即,需要预测文本(语言标记)是否与视频画面(视觉标记)匹配。

使用以下3个目标进行预训练,它们被称为纯文本、纯视频和文本−视频:

  • 在纯文本目标中,掩盖语言标记,并训练模型预测被掩盖的语言标记,有助于使模型更好地理解语言特征。
  • 在纯视频目标中,掩盖视觉标记,并训练模型预测被掩盖的视觉标记,有助于模型更好地理解视频特征。
  • 在文本−视频目标中,掩盖语言标记和视觉标记,并训练模型预测被掩盖的语言标记和视觉标记,这有助于模型理解语言标记和视觉标记之间的关系。

BART

Facebook AI推出的一个有趣的模型。最适合文本生成,语言翻译和语言理解。

基于Transformer架构,本质上是一个降噪自编码器,是通过重建受损文本进行训练的。本质上是一个带有编码器和解码器的Transformer模型。将受损文本送入编码器,编码器学习给定文本的特征并将特征发送给解码器。解码器获得编码器生成的特征,重建原始文本。

BART模型的编码器是双向的,这意味着它可以从两个方向(从左到右和从右到左)读取一个句子,但解码器是单向的,它只能从左到右读取一个句子。有一个双向编码器(针对两个方向)和一个自回归解码器(针对单一方向)。

BART模型是通过最小化重建损失来训练的,也就是原始文本和解码器的生成文本之间的交叉熵损失。不同于BERT模型,在BERT模型中,我们只是将被掩盖的标记送入编码器,然后将编码器的结果送入前馈网络层,用前馈网络层来预测被掩盖的标记。但在BART模型中,将编码器的结果反馈给解码器,由其生成或重构原始句子。

BART模型有两种配置:

  • BART-base:6层编码器和解码器
  • BART-large:12层编码器和解码器

破坏文本的增噪方法:

  • 标记掩盖
  • 标记删除
  • 标记填充
  • 句子重排
  • 文档轮换

其他

数据集

本书提到的数据集:

  • 多伦多图书语料库(Toronto BookCorpus)
  • 维基百科
  • CommonCrawl
  • CLS-FR
  • PAWS-X-FR
  • XNLI-FR
  • 法语Treebank
  • FrenchSemEval
  • PubMed
  • PMC

Python库

本书提到的Python库:

  • Transformers
  • sentence-transformers:
  • ktrain:用于增强机器学习的低代码库,由Arun S. Maiya开发,是Keras的一个轻量级打包代码库,旨在更容易建立、训练和部署深度学习模型。还包括几个预训练模型,使文本分类、文本摘要、问答、翻译、回归等任务更加容易。用tf.keras实现的,包括几个有趣的功能,如学习率查找器、学习率调度器等。
  • bert-as-service库

模型

本书提到的Python Transformers内置的预训练模型:

  • bert-base-uncased:不区分大小写的模型
  • spanbert-large-finetuned-squadv2:用于问答任务的预训练和微调的SpanBERT模型
  • bart-large-cnn:预训练的BART-large模型,可用于文本摘要任务
  • bert-base-nli-cls-token:
  • bert-base-nli-mean-token:
  • roberta-base-nli-max-tokens
  • distilbert-base-nli-mean-tokens

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

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

相关文章

python类中的def __next__(self):有什么用

在Python中,__next__ 方法是一个特殊方法,它用于实现迭代器协议。当一个对象定义了 __next__ 方法时,这个对象就变成了一个迭代器。迭代器允许你在一个序列(比如列表、元组或集合)或其他可迭代对象上进行迭代&#xff…

Linux网络配置修改hosts映射文件关闭防火墙

Linux网络配置&系统管理 一、物理机、VMware软件、虚拟机之间的网络关系1.1 总体框架图1.2 为什么物理机、VM软件、客户机之间能够通信?1.3 查看客户机的IP地址ifconfig1.4 小节1.5 修改静态IP地址1.6 测试能不能ping通 二、修改主机名以及hosts映射文件2.1 修改主机名2.1…

机器视觉学习(二)—— 显示图像和视频

一、获取图像 要使用OpenCV获取图像,你需要安装OpenCV库并学习基本的OpenCV函数。下面是一些获取图像的基本步骤: 导入必要的库:import cv2 读取图像:image cv2.imread("image.jpg") 这将从指定路径读取图像&#xf…

什么是事件冒泡?Littlevgl中的事件冒泡是怎么样的?

什么是事件冒泡?Littlevgl中的事件冒泡是怎么样的? 事件冒泡(Event Bubbling)是指当一个元素上的事件被触发时,该事件会从最底层的元素开始逐级向上传播,直到最顶层的元素(通常是文档对象)被触发。 ​ 例如我们点击一个按钮时,…

前后端分离项目环境搭建

1. 使用到的技术和工具 springboot vue项目的搭建 工具 idea,mavennodejs 2. 后端框架搭建 利用maven创建springboot项目 3. 前端项目搭建 1. 安装相关工具 nodejs: 一个开源、跨平台的 JavaScript 运行时环境,可以理解成java当中需要…

fly-gesture-unlock 手势解锁库

最近要实现前端九宫格手势解锁功能,到 github 和 gitee 上没有找到质量比较好的库,自己对这个功能也是蛮感兴趣的,所以做了这个开源库,用于实现手势解锁功能,可以帮助大家快速完成业务逻辑,提供了完整的 DE…

Prompt提示工程上手指南:基础原理及实践(二)-Prompt主流策略

前言 上篇文章将Prompt提示工程大体概念和具体工作流程阐述清楚了,我们知道Prompt工程是指人们向生成性人工智能(AI)服务输入提示以生成文本或图像的过程中,对这些提示进行精炼的过程。生成人工智能是一个根据人类和机器产生的数…

python基于flask考研学习交流系统30vy7附源码django

考研在线学习与交流平台根据实际情况分为前后台两部分,前台部分主要是让用户使用的,包括用户的注册登录,首页,课程信息,在线讨论,系统公告,后台管理,个人中心等功能;后台…

Redis 中的全局命令

查看所有键 keys * keys命令会遍历所有键, 所以它的时间复杂度是O(n) 查看键总数 dbsize dbsize命令在计算键总数时不会遍历所有键, 而是直接获取Redis内置的键总数变量, 所以dbsize命令的时间复杂度是O&#xff…

Mysql锁与MVCC

文章目录 Mysql锁的类型锁使用MVCC快照读和当前读读视图【Read View】串行化的解决 exlpain字段解析ACID的原理日志引擎整合SpringBoot博客记录 Mysql锁的类型 MySQL中有哪些锁: 乐观锁(Optimistic Locking):假设并发操作时不会发…

CODE001

GPIO通用输入输出端口 1.可以配置八种输入输出模式 2.引脚电平0~3.3v 部分可以容忍5V 3.输出模式下可控制端口输出高低电平,用来驱动LED,蜂鸣器,模拟通信协议输出时序 4.输入模式下可读取端口的高低电平或电压,用于读取按键输入&a…

3.Python从入门到精通—Python 基础语法详细讲解-中

【30天】Python从入门到精通详解版—第二天—Python 基础语法详细讲解-中 控制流程语句条件语句循环语句 函数和模块函数模块 控制流程语句 在Python中,控制流程语句用于控制程序的执行流程,包括条件语句和循环语句。 条件语句 Python中的条件语句包括…

Database Connectivity using Python使用 Python 进行数据库连接

Introduction • The Python programming language has powerful features for database programming • Python supports various databases like MySQL, Oracle, Sybase, PostgreSQL, etc • Python also supports Data Definition Language (DDL), Data Manipulation Langua…

ARMV8-aarch64的虚拟内存(mmutlbcache)介绍-概念扫盲

🔥博客主页: 小羊失眠啦. 🎥系列专栏:《C语言》 《数据结构》 《C》 《Linux》 《Cpolar》 ❤️感谢大家点赞👍收藏⭐评论✍️ 思考: 1、cache的entry里都是有什么? 2、TLB的entry里都是有什么? 3、MMU操作…

代码简洁之道

《代码简洁之道》(Clean Code)是由Robert C. Martin所著的一本经典书籍,主要介绍了如何编写清晰、可读性高、易于维护的代码。以下是该书中的一些重要观点: 1. 命名清晰明了:变量、函数、类等命名应当清晰明了&#x…

unity3d Animal Controller的Animal组件中Speeds,States和modes基础部分理解

Speeds 速度集是修改你可以做的原始动画,增加或减少运动,旋转,或动画速度。它们与 州 所以,当动物在运动状态下,在飞行或游泳时,你可以有不同的速度 如果你的性格动画是 (已到位), 你一定要调整速度 位置 和 旋转 每一种的价值观 速度装置 …否则,它们不会移动或旋转。 每个速…

Java策略模式源码剖析及使用场景

策略模式 一、介绍二、不同的支付方式采用不同的策略三、 电商定价策略四、日志记录策略五、 压缩算法六、Java 中的 Arrays.sort() 方法,不同的排序策略进行排序七、Spring 中的 ResourceLoader 类,不同的资源位置采用不同的加载策略 一、介绍 策略模式是一种行为型设计模式,…

计算机行业在数字经济时代的角色与数字化转型之路

目录 前言1 数字经济时代下的计算机行业角色与定位1.1 数字经济支撑者1.2 创新引领者1.3 产业融合者 2 数字化转型对计算机行业的影响与挑战2.1 技术更新换代的压力2.2 人才培养与流动的问题2.3 数据隐私与安全的挑战 3 数字化转型如何提升行业竞争力3.1 提高生产效率与优化产品…

【Java】获取手机文件名称补充

本地的 ADB 工具路径指的是你电脑上安装的 Android Debug Bridge(ADB)工具的路径。ADB 是 Android SDK 中的一个工具,用于与连接到计算机上的 Android 设备进行通信。你需要确保 ADB 已正确安装,并知道其在你计算机上的位置。 通…

Prometheus 监控告警配置

文章目录 一、告警通知1.邮件通知2.钉钉通知2.1.获取钉钉机器人webhook2.2.prometheus-webhook-dingtalk2.3.配置信息2.4.自定义模板 3.自定义 二、告警规则1.Prometheus2.Linux3.Docker4.Nginx5.Redis6.PostgreSQL7.MySQL8.RabbitMQ9.JVM10.Elasticsearch 开源中间件 # Prome…