Transformer 模型和 BERT 模型:概述

语言模型发展历程Language modeling history

多年来,语言建模一直在不断发展。过去十年的最新突破,包括使用神经网络来表示文本,比如2013年的Word2vec和N元语法,2014年开发的序列到序列模型,如RNN和LSTM帮助提高机器学习模型在NLP任务上的性能,例如翻译和文本分类,2015年注意力机制以及以注意力机制为基础的模型,如Transformer和BERT模型引起了广泛的热议。

Transformer基于2017年发布的一篇论文 《Attention is All You Need》

https://goo.gle/attentionpdf

文本呈现问题Problem of text presentation

尽管在Transformer之前的所有模型都能将单词表示为矢量,但这些矢量不包含上下文,单词的用法会随着上下文而变化。例如,river bank中的bank(河岸),与bankrobber中的bank(银行),两者可能会有相同的失量表示,以上这种情形存在于注意力机制面世之前。

Transformer是一种编码器-解码器模型A transformer is an encoder-decoder model

Transformer是一种使用注意力机制的编码器-解码器模型,它可以利用并行功能的优势,还可以同时处理大量数据,这是由其模型架构的特点决定的。

Transformer模型Transformer model

注意力机制有助于提高机器翻译应用的性能,Transformer模型是以注意力机制为核心而构建的。

Transformer模型由编码器和解码器组成,编码器对输入序列进行编码,再将它传递给解码器,然后解码器对表示形式进行解码,以完成相关的任务。

编码组件是相同数量的一些编码器组成的,以上提到的介绍Transfommer的研究论文中有六个编码器堆叠在一起,六不是一个神奇的数字,而仅仅是一个超参数。

编码器在结构上完全相同,但权重不同。每个编码器可以细分为两个子层,第一层称为自注意力层,编码的输入首先流经自注意力层,该层在对输入句子的中心单词进行编码时,会对单词的相关部分进行编码或查看。第二层称为前馈层,自注意力层的输出被馈送到前馈神经网络,完全相同的前馈神经网络独立应用于每个位置。解码器既有自注意力层,也有前馈层,但在两者之间还有一个编码器/解码器注意力层,用于帮助解码器专注于输入句子的相关部分。

在输入序列中嵌入单词后,每个嵌入矢量都流经编码器的两层,每个位置的单词都经过一个自注意力进程,然后再通过一个前馈神经网络,也就是每个矢量都分别流经的完全相同的网络。自注意力层中的这些路径之间存在依赖关系,但是,前馈层没有这些依赖关系。因此各种路径在流经前馈层时,可以并行执行。

在自注意力层中,输入嵌入被分解为查询矢量、键矢量和值矢量。这些矢量的计算基础是Transformer在训练过程中学习得来的权重。

所有这些计算在模型中以矩阵计算的形式并行发生。

一旦我们有了查询矢量、键矢量和值矢量,下一步就是将每个值矢量乘以softmax分数以准备对它们求和,这样做的目的是保持想要关注的单词的值不变,并通过将不相关的单词乘以很小的数。例如0.001,来降低它们的权重。

接下来我们必须对已经过加权计算的值矢量求和,从而生成自注意力层在该位置的输出。对于第一个单词,你可以将生成的矢量发送到前馈神经网络。

为了总结获得最终嵌入的这个过程,这里列出了我们采取的步骤,我们从自然语句开始嵌入句子中的每个单词

之后,计算多头注意力。图中示例中计算了八次,将嵌入的单词与各自的加权矩阵相乘,然后使用生成的QKV矩阵计算注意力。

最后,我们可以将这些矩阵串联以生成输出矩阵,这个输出矩阵与自注意力层最初得到的最终矩阵具有相同的维度。

预训练Transformer 模型Pre-trained transformer models

现在Transformer有多种变体版本,有些同时使用原始架构中的编码器和解码器组件。有些只使用编码器,而有些只使用解码器。

BERT 模型BERT model

一种流行的仅编码器架构是BERT,BERT是经过训练的Transformer模型之一,BERT代表Bidirectional Encoder Representations from Transformers,由Google于2018年开发。

从那以后,BERT诞生了多个变体版本。今天,BERT为Google搜索提供支持,我们可以看出,对于同一个搜索查询,在有BERT之前和之后的结果是多么地不同。

BERT 概述BERT overview

BERT的训练涉及到两个变体版本,一个模型包含BERT Base,它有12个Transformer,大约有1.1亿个参数,另一个模型包含BERT Large,有24层Transformer,有大约3.4亿个参数。BERT模型之所以强大,是因为它可以处理长输入上下文,它的训练以整个维基百科语料库以及BookCorpus为基础。BERT模型的训练经过了100万步,BERT接受了不同任务的训练,这意味着它具有多任务目标,这就是BERT如此强大的原因,因为它经受了多种任务的训练,它既适用于句子级别,也适用于词元级别。

BERT 版本BERT versions

这是最初发布的BERT的两个不同版本,一个是BERT Base,它有12层,另一个BERT Large则有24层,而原始的Transformer则仅有6层。

掩码语言建模Masked language modeling(MLM)

BERT经受了两种不同任务的训练,任务一称为掩码语言模型,在该任务中,句子被遮盖,模型经过训练来预测被遮盖的单词,如果你要从头开始训练BERT,则必须遮盖语料库中一定比例的单词推荐的遮盖百分比是15%,遮盖百分比要在遮盖太少和过多之间取个平衡值,遮盖太少会使训练过程的成本特别高,而遮盖太多则会失去模型所需的上下文。

下一句预测Next sentence prediction(NSP)

任务二是预测下一个句子,例如,给模型两组句子,BERT的目标是学习句子之间的关系,并根据第一个句子,预测下一个句子。例如,句子A可以是“一个人去了商店”,句子B是“他买了一加仑牛奶”,BERT负责分类判断,句子B是否是句子A之后的下一个句, 这是一个二元分类任务,有助于BERT在句子级别执行任务。

BERT 输入嵌入BERT input embeddings

为了训练BERT,对于输入的句子,你需要给模型提供三种不同的嵌入,嵌入有3种不同的类型,词元嵌入、片段嵌入和定位嵌入,词元嵌入是每个词元在输入语句中的嵌入表示,单词会转换为特定维度的矢量表示,BERT也可以解决。涉及文本分类的NLP任务,一个例子是判断两个句子的语义是否相似,例如“我的狗很可爱”和“他喜欢玩”,输入文本对会简单地串联起来并馈送给模型,BERT如何区分给定的成对文本中的输入?答案是使用片段嵌入。

有一个由SEP表示的特殊词元,用于分隔句子的两个不同分块,另一个问题是学习句子中单词的顺序,BERT由一些Transformer组成,BERT可处理长度达到512的输入序列,输入序列的顺序信息被纳入定位嵌入中,这使得BERT可以学习每个位置的矢量表示。

BERT可用于各种下游任务,尽管BERT接受的是大规模语言建模培训以及单句分类训练,它仍可用于常见NLP任务,例如句对分类、问答以及单句标记任务。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

(C语言贪吃蛇)16.贪吃蛇食物位置随机(完结撒花)

目录 前言 修改方向 修改内容 效果展示 两个新的问题🙋 1.问题1 2.问题2 代码如下: 前言 我们上一节实现了贪吃蛇吃食物身体节点变长,但是食物的刷新位置不是随机的,并且初始化几次后食物就刷不见了,本节我们就来…

[AWS云]kafka调用和创建

背景:因为因为公司的项目需要使用AWS的kafka,但是在创建和使用过程中都遇到了一些报错和麻烦,毕竟老外的东西,和阿里云、华为使用起来还是不一样。 一、创建(创建的配置过程就略了,就是配置一下可用区、型号&#xff0…

RNN心脏病预测

本文为为🔗365天深度学习训练营内部文章 原作者:K同学啊 一 前期准备 1.数据导入 import pandas as pd from keras.optimizers import Adam from matplotlib import pyplot as plt from sklearn.model_selection import train_test_split from sklearn.p…

Flink job的提交流程

在Flink中,作业(Job)的提交流程是一个复杂的过程,涉及多个组件和模块,包括作业的编译、优化、序列化、任务分发、任务调度、资源分配等。Flink通过分布式架构来管理作业的生命周期,确保作业在不同节点上以高…

std::future::then的概念和使用方法

std::future::then是 C 中用于异步操作的一种机制,它允许在一个异步任务完成后,接着执行另一个操作(即延续操作)。以下是关于 std::future::then 的概念和使用方法: 1. 概念: std::future::then 的主要目…

python 边际分布图

import seaborn as snspenguins sns.load_dataset("penguins") colors {"Gentoo": #AE5259, "Adelie": #CF992C, "Chinstrap": #6B9DAA}# 分类散点图 sns.jointplot(datapenguins, x"bill_length_mm", y"bill_depth_…

MyBatisPlus分页查询

一、导入依赖 <!-- MyBatis-plus的依赖 --> <dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-boot-starter</artifactId><version>3.5.4</version> </dependency><!-- mysql的依赖 --> &l…

CocosCreator 快速部署 TON 游戏:Web2 游戏如何使用 Ton支付

在本篇文章中&#xff0c;我们将继续探讨如何使用 Cocos Creator 开发 Telegram 游戏&#xff0c;重点介绍如何集成 TON 支付功能。通过这一教程&#xff0c;开发者将学会如何在游戏中接入 TON Connect&#xff0c;实现钱包连接、支付以及支付后的校验流程&#xff0c;最终为 W…

贴吧软件怎么切换ip

在网络使用中&#xff0c;有时我们需要切换IP地址来满足特定的需求&#xff0c;比如需要切换贴吧软件IP以进行不同的操作。本文将介绍几种贴吧切换IP地址的方法&#xff0c;帮助用户更好地管理自己的网络身份和访问权限。 1、更换网络环境‌ 通过连接到不同的Wi-Fi网络或使用移…

TON生态小游戏开发:推广、经济模型与UI设计的建设指南

随着区块链技术的快速发展&#xff0c;基于区块链的Web3游戏正引领行业变革。而TON生态小游戏&#xff0c;借助Telegram庞大的用户基础和TON&#xff08;The Open Network&#xff09;链上技术&#xff0c;已成为这一领域的明星之一。国内外开发者正迅速涌入&#xff0c;开发和…

【开源】RISC-V 修改neofetch中的Host描述

neofetch 介绍 neofetch 是一款用于在终端中显示系统信息的工具&#xff0c;其主要特点是以美观的方式展示宿主机的基本信息。它通常用于展示系统的分发版本、内核版本、硬件信息、桌面环境&#xff0c;以及一些个性化的设置&#xff0c;配合 ASCII 艺术风格的 logo&#xff0…

基于Opencv中的DNN模块实现图像/视频的风格迁移

一、DNN模块的介绍 1、简介 OpenCV中的DNN&#xff08;Deep Neural Network&#xff09;模块是一个功能强大的组件&#xff0c;它支持深度学习网络模型的加载和推理。虽然DNN模块不提供模型的训练功能&#xff0c;但它可以与主流的深度学习框架&#xff08;如TensorFlow、Caf…

Visual Studio的实用调试技巧总结

对于很多学习编程的老铁们来说&#xff0c;是不是也像下面这张图一样写代码呢&#xff1f; 那当我们这样编写代码的时候遇到了问题&#xff1f;大家又是怎么排查问题的呢&#xff1f;是不是也像下面这张图一样&#xff0c;毫无目的的一遍遍尝试呢&#xff1f; 这篇文章我就以 V…

iPhone使用指南:如何在没有备份的情况下从 iPhone 恢复已删除的照片

本指南将向您展示如何在没有备份的情况下从 iPhone 恢复已删除的照片。我们所有人在生活中的某个时刻都一定做过一些愚蠢的事情&#xff0c;例如从手机或电脑中删除一些重要的东西。这是很自然的&#xff0c;没有什么可羞耻的。您可能在辛苦工作一天后回来。当突然想看一些照片…

科技云报到:云服务的中场战事,从AI应用开始

科技云报到原创。 从去年的大模型之战&#xff0c;到今年的AI应用之争&#xff0c;云服务正在迈入全新的发展阶段。AI这个杠杆将各家厂商的竞争策略更向前推进了一步。 “云AI”能够孵化出多少可能&#xff1f;在业界眼中&#xff0c;“云AI”则意味着新的悬念&#xff1a;云计…

Java基础知识全面总结

第一章&#xff1a;类与对象 第一课&#xff1a;什么是面向对象编程 1.面向对象编程和面向过程编程的区别 无论是面向过程编程还是面向对象编程都是用于解决一个实际问题&#xff0c;当面向过程编程在解决一个问题时&#xff0c;更多的情况下是不会做出重用的设计思考的&…

蓝桥杯【物联网】零基础到国奖之路:十七. 扩展模块之单路ADC和NE555

蓝桥杯【物联网】零基础到国奖之路:十七. 扩展模块之单路ADC和NE555 第一节 硬件解读第二节 CubeMx配置第三节 代码1&#xff0c;脉冲部分代码2&#xff0c;ADC部分代码![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/57531a4ee76d46daa227ae0a52993191.png) 第一节 …

pytorh学习笔记——波士顿房价预测

机器学习的“hello world”&#xff1a;波士顿房价预测 波士顿房价预测的背景不用提了&#xff0c;简单了解一下数据集的结构。 波士顿房价的数据集&#xff0c;共有506组数据&#xff0c;每组数据共14项&#xff0c;前13项是影响房价的各种因素&#xff0c;比如&…

Nullinux:一款针对Linux操作系统的安全检测工具

关于Nullinux Nullinux是一款针对Linux操作系统的安全检测工具&#xff0c;广大研究人员可以利用该工具针对Linux目标设备执行网络侦查和安全检测。 该工具可以通过SMB枚举目标设备的安全状况信息&#xff0c;其中包括操作系统信息、域信息、共享信息、目录信息和用户信息。如…

第四次论文问题知识点及问题

1、NP-hard问题 NP-hard&#xff0c;指所有NP问题都能在多项式时间复杂度内归约到的问题。 2、启发式算法 ‌‌启发式算法&#xff08;heuristic algorithm&#xff09;是相对于最优化算法提出的。它是一种基于直观或经验构造的算法&#xff0c;旨在以可接受的花费给出待解决…