当前位置: 首页 > news >正文

大语言模型——BERT和GPT的那些事儿

前言

自然语言处理是人工智能的一个分支。在自然语言处理领域,有两个相当著名的大语言模型——BERT和GPT。两个模型是同一年提出的,那一年BERT以不可抵挡之势,让整个人工智能届为之震动。据说当年BERT的影响力是GPT的十倍以上。而现在,由GPT-3.5模型产生的chatGPT,则以一己之力,让整个世界重新认识了人工智能。现在,用妇孺皆知来形容chatGPT一点也不为过。是什么让GPT在后来完成复仇,碾压BERT模型?这篇文章带你了解这两个模型的“恩恩怨怨”。

自然语言处理(背景)

自然语言处理(Natural Language Processing),简称NLP,是人工智能领域的一个重要方向。NLP主要处理四类任务,分别是序列标注、文本分类任务、句子关系判断和生成式任务。

序列标注是NLP中最基础的任务,应用十分广泛,如词性标注、命名实体识别、语义角色标注等实质上都属于序列标注的范畴。

文本分类任务是NLP中的经典问题,包括主题分析和情感分析等。

句子关系判断任务的输入是两个句子,输出是句子间的关系,常用的判别有语义相似度、语义关系推理(蕴含/中立/矛盾)、问答对匹配、搜索相关性排序等。

生成式任务包括对话生成、摘要生成、机器翻译等。

其中,生成式任务就是我们的chatGPT最擅长的任务。我们问它问题,它可以自动生成回答。

自然语言处理的一些早期处理方法(铺垫)

在计算机领域,我们一般不喜欢文字,更喜欢数字。所以怎么把文字转换成计算机可以理解的数字,就是一个很重要的问题。

独热编码

比较早的转换方式是独热编码(one-hot encoding)。独热编码的处理方式是把N个要处理的字(或者单词)转换为一个N维向量,第 i i i个字转换后的向量为 ( 0 , 0 , … , 0 , 1 , 0 , … , 0 , 0 ) (0,0,\dots,0,1,0,\dots,0,0) (0,0,,0,1,0,,0,0),其中第 i i i维为1,其它维都是0。这样的弊端也非常明显,那就是当处理的字数比较多的时候,维数会非常高。比如中国有约10万个汉字,为了表示这些汉字,需要10万的向量。这显然是我们无法接受的。

word2vec模型

2013年,google提出了word2vec模型。这个模型的提出,使得NLP进入神经网络时代。顾名思义,这个模型就是专门把单词(或者字)转换成向量的模型。通过这个模型,给每个单词赋予了一个低维向量。且意思相近的单词之间,其向量的距离也会越近。向量的每一维也不再是0或1,而是一个0-1之间的实数。这种把高维的文字表示成低维的向量的方式,叫做词嵌入(word embedding)。这样的一个最大的缺点是无法识别多义词。因为一个词在不同的上下文中所表达的意思可能是不一样的,而静态的向量没有办法处理这些情况。

特征提取器

神经网络、深度学习最擅长的事情就是提取特征。而在NLP领域,字与字之间会有一些特征,句与句之间也会有一些特征,可以把这些特征统称为语言学知识。而我们要做的,就是找到一个优秀的特征提取器,把这些语言学知识提取出来。常见的特征提取器有RNN(循环神经网络)、LSTM(RNN的一种特殊形式)、CNN(卷积神经网络)、Transformer。Transformer是目前最好的特征提取器。Transformer就像其另一个霸气的名字“变形金刚”一样,被更多人研究,并不断地变化。

自然语言处理元年(正文)

我们的故事要从2018年开始。2018年,被称为自然语言处理元年。这一年,许多重要模型相继发布,为NLP带来了里程碑式的进展。这一年,无监督预训练+微调的模式开始流行。这些重要的模型中,就包含我们的主角,BERT模型和GPT模型。

ELMo模型(配角登场)

2018年3月,ELMo模型被提出。ELMo模型基于LSTM这个特征提取器,采用双向训练的模式,会根据上下文的含义来动态产生表示这个词的向量,解决了word2vec不能表示多义词的弊端。ELMo模型先让模型在大量无标注数据集上进行训练,通过双向LSTM,提取数据特征,学习到基本的语言学特征。当应用于下游任务时,只需要给少量的有标注数据集进行训练,模型就能达到不错的效果。这种模式称为预训练+微调,这种模式也被GPT和BERT所采用。无标注数据集的获取相对来说较容易,所以这种无监督预训练+微调也逐渐流行。

GPT模型(男主登场)

2018年6月,GPT诞生了。GPT (Generative Pre-Training Transformer) 是 OpenAI GPT 系列的开山之作。

从名字上可以看出,GPT是基于Transformer的生成式预训练模型。它主要处理的是自然语言处理四大任务中的生成式任务。因为在做生成式任务时,是看不到下文的,只能给出上文来生成下文,所以像ELMo这种双向训练的模式不适合GPT。

Transformer以其卓越的性能击败了LSTM,GPT也以优异的表现战胜了ELMo。

BERT模型(男二登场)

2018年10月,BERT模型横空出世!BERT当年的成绩可谓是拳打ELMo,脚踩GPT,霸占了各大自然语言处理榜单的榜首。而且,在后面几年,BERT的追随者越来越多,衍生出了一系列跟BERT相关的模型,比如RoBERTa、SpanBERT、ALBERT、MacBERT等等,大家都在BERT的基础上进行优化。BERT的影响力可见一斑。

关于BERT,前亚马逊首席科学家李沐曾在2021年11月说过:“如果对自然语言处理在过去三年里面最重要的文章做排序的话,你把BERT排在第二的位置,那么很难有另外一篇论文能够名正言顺地排在第一的位置。BERT及后续的一系列文章使得自然语言处理在过去三年里面有一个质的飞跃。”

那么BERT为什么这么厉害呢?因为BERT结合了ELMo和GPT的优势。相比于ELMo,BERT把特征提取器换成了更加厉害的Transformer(当然还有其它的一些改变,但是这里略过)。相比于单向训练的GPT,它采取了双向训练的方式,使得其产生的向量更加贴合上下文的意思。

GPT VS BERT(决战)

和GPT相比,BERT所使用的掩码语言模型任务(Masked Language Model)虽然让它失去了直接生成文本的能力,但换来的是双向编码的能力,这让模型拥有了更强的文本编码性能,直接的体现则是下游任务效果的大幅提升。而GPT为了保留生成文本的能力,只能采用单向编码。以当年的眼光来看,BERT绝对是一个更加优秀的模型。因为既然BERT和GPT两者都是采用预训练+微调的范式,并且下游任务依然是分类、匹配、序列标注等等经典的NLP任务形式,那么像BERT模型这种更注重特征编码的质量,下游任务选一个合适的损失函数去配合任务做微调,显然比GPT这种以文本生成的方式去迂回地完成这些任务更加直接。从BERT模型出来以后,无监督训练+下游任务微调的范式便奠定了它的霸主地位,各类沿着BERT的思路,琢磨如何获得更好的文本特征编码的方法大量涌现,以至于GPT这个以生成式任务为目标的模型显得像一个异类。马后炮地说,如果当时OpenAI顺应大势,放弃生成式预训练这条路,也许我们要等更长的时间才能见到ChatGPT这样的模型。

总结

在自然语言处理四大任务中,GPT更擅长生成式任务,而BERT更擅长其它三个。而在如今,以对话任务为代表的生成式任务成为了主流,且随着参数量的增大,GPT系列的效果也越来越好,这也是GPT后来能打败BERT的重要原因吧。

参考文章

自然语言处理技术的模型和任务
OpenAI是如何胜过谷歌的?ChatGPT发展简史
语言大模型的进化轨迹
ChatGPT的前世今生:OpenAI的技术“执拗”与“豪赌”

相关文章:

大语言模型——BERT和GPT的那些事儿

前言 自然语言处理是人工智能的一个分支。在自然语言处理领域,有两个相当著名的大语言模型——BERT和GPT。两个模型是同一年提出的,那一年BERT以不可抵挡之势,让整个人工智能届为之震动。据说当年BERT的影响力是GPT的十倍以上。而现在&#…...

Docker 命令详解

1. 容器生命周期管理 命令说明文档run创建一个新的容器并运行一个命令Docker run 命令start/stop/restart启动、停止、重启容器Docker start/stop/restart 命令kill杀掉一个运行中的容器Docker kill 命令rm删除一个或多个容器Docker rm 命令pause/unpause暂停 恢复容器中所有的…...

ios打包,证书获取

HBuilderX 打包ios界面: Bundle ID(AppID): 又称应用ID,是每一个ios应用的唯一标识,就像一个人的身份证号码; 每开发一个新应用,首先都需要先去创建一个Bundle ID Bundle ID 格式: 一般为&…...

linux(nginx安装配置,tomcat服务命令操作)

首先进系统文件夹 /usr/lib/systemd/systemLs | grep mysql 查看带有命名有MySQL的文件夹修改tomcat.service文件复制jdk目录替换成我们的路径替换成我们的路径进入这个目录,把修改好的文件拖到我们的工具里面重新刷新系统 systemctl daemon-reload查看tomcat状态…...

jQuery_03 dom对象和jQuery对象的互相转换

dom对象和jQuery对象 dom对象 jQuery对象 在一个文件中同时存在两种对象 dom对象: 通过js中的document对象获取的对象 或者创建的对象 jQuery对象: 通过jQuery中的函数获取的对象。 为什么使用dom或jQuery对象呢? 目的是 要使用dom对象的函数或者属性 以及呢 要…...

Mysql 中如何导入数据?

文章目录 前言使用 LOAD DATA 导入数据使用 mysqlimport 导入数据mysqlimport的常用选项介绍后言 前言 hello world欢迎来到前端的新世界 😜当前文章系列专栏:Mysql 🐱‍👓博主在前端领域还有很多知识和技术需要掌握,正…...

深入了解前馈网络、CNN、RNN 和 Hugging Face 的 Transformer 技术!

一、说明 本篇在此对自然语言模型做一个简短总结,从CNN\RNN\变形金刚,和抱脸的变形金刚库说起。 二、基本前馈神经网络: 让我们分解一个基本的前馈神经网络,也称为多层感知器(MLP)。此代码示例将&#xff1…...

Flink Table API 读写MySQL

Flink Table API 读写 MySQL import org.apache.flink.connector.jdbc.table.JdbcConnectorOptions; import org.apache.flink.streaming.api.environment.StreamExecutionEnvironment; import org.apache.flink.table.api.DataTypes; import org.apache.flink.table.api.Envi…...

Nginx 开源版安装

下载 tar.gz安装包,上传。 解压 [rootlocalhost ~]# tar zxvf nginx-1.21.6.tar.gz nginx-1.21.6/ nginx-1.21.6/auto/ nginx-1.21.6/conf/ nginx-1.21.6/contrib/ nginx-1.21.6/src/ ... ...安装gcc [rootlocalhost nginx-1.21.6]# yum install -y gcc 已加载插件…...

『亚马逊云科技产品测评』活动征文|低成本搭建物联网服务器thingsboard

授权声明:本篇文章授权活动官方亚马逊云科技文章转发、改写权,包括不限于在 Developer Centre, 知乎,自媒体平台,第三方开发者媒体等亚马逊云科技官方渠道。 0. 环境 - ubuntu22(注意4G内存勉强够,部署完…...

【Pytorch】Visualization of Feature Maps(3)

学习参考来自: Image Style Transform–关于图像风格迁移的介绍github:https://github.com/wmn7/ML_Practice/tree/master/2019_06_03 文章目录 风格迁移 风格迁移 风格迁移出处: 《A Neural Algorithm of Artistic Style》(ar…...

人工智能对我们的生活影响

目录 前言 一、人工智能的领域 二、人工智能的应用 三、对人工智能的看法 总结 🌈嗨!我是Filotimo__🌈。很高兴与大家相识,希望我的博客能对你有所帮助。 💡本文由Filotimo__✍️原创,首发于CSDN&#x1f4…...

Mysql存储引擎分类

Mysql存储引擎分类: 在选择存储引擎时,应该根据应用系统的特点选择合适的存储引擎。对于复杂的应用系统,还可以根据实际情况选择多种存储引擎进行组合。 InnoDB: 是Mysql的默认存储引擎,支持事务、外键。如果应用对事务的完整性有…...

基于Python+TensorFlow+Django的交通标志识别系统

欢迎大家点赞、收藏、关注、评论啦 ,由于篇幅有限,只展示了部分核心代码。 文章目录 一项目简介 二、功能三、系统四. 总结 一项目简介 随着交通网络的不断扩展和智能交通系统的发展,交通标志的自动识别变得愈发重要。本项目旨在利用Python编…...

【Java 进阶篇】Jedis:让Java与Redis轻松对话的利器

在现代软件开发中,缓存系统是提高系统性能的常见手段之一,而Redis作为一个高性能的缓存数据库,被广泛应用于各类系统。如果你是Java开发者,那么使用Jedis库可以让你轻松地与Redis进行交互。本文将带你深入了解Jedis的快速入门&…...

【数据分享】我国12.5米分辨率的DEM地形数据(免费获取/地理坐标系)

DEM地形数据是我们在各种研究和设计中经常使用的数据!之前我们分享过500米分辨率的DEM地形数据、90米分辨率的DEM地形数据、30米分辨率的DEM地形数据(均可查看之前的文章获悉详情)。 本次我们为大家带来的是分辨率为12.5m的DEM地形数据&#…...

C++设计模式之策略模式

策略模式 介绍示例示例测试运行结果应用场景优点总结 介绍 策略模式是一种行为设计模式。在策略模式中,可以创建一些独立的类来封装不同的算法,每一个类封装一个具体的算法,每一个封装算法的类叫做策略(Strategy),为了保证这些策…...

spring-webflux的一些概念的理解

Spring5的webflux可以支持高吞吐量,使用相同的资源可以处理更加多的请求,它将会成为未来技术的趋势,但是相对于学习其他的框架相比,它的学习曲线很高,综合了很多现有的技术,即使按照教程学习能编写代码&…...

OpenCV快速入门:特征点检测与匹配

文章目录 前言一、角点检测1.1 角点特征1.1.1 角点特征概念1.1.2 角点的特点1.1.3 关键点绘制代码实现1.1.4 函数解析 1.2 Harris角点检测1.2.1 Harris角点检测原理1.2.2 Harris角点检测公式1.2.3 代码实现1.2.4 函数解析 1.3 Shi-Tomasi角点检测1.3.1 Shi-Tomasi角点检测原理1…...

旋转的数组

分享今天看到的一个题目,不同思路解法 题目 思路1:时间复杂度0(N*k) void rotate(int *a,int N,int k)//N为数组元素个数 { while(k--) { int tema[N-1]; for(int rightN-2;right>0;right--) { a[right1]a[right]; } a[0]tem; …...

OpenLayers 可视化之热力图

注:当前使用的是 ol 5.3.0 版本,天地图使用的key请到天地图官网申请,并替换为自己的key 热力图(Heatmap)又叫热点图,是一种通过特殊高亮显示事物密度分布、变化趋势的数据可视化技术。采用颜色的深浅来显示…...

golang循环变量捕获问题​​

在 Go 语言中,当在循环中启动协程(goroutine)时,如果在协程闭包中直接引用循环变量,可能会遇到一个常见的陷阱 - ​​循环变量捕获问题​​。让我详细解释一下: 问题背景 看这个代码片段: fo…...

【JVM】- 内存结构

引言 JVM:Java Virtual Machine 定义:Java虚拟机,Java二进制字节码的运行环境好处: 一次编写,到处运行自动内存管理,垃圾回收的功能数组下标越界检查(会抛异常,不会覆盖到其他代码…...

Opencv中的addweighted函数

一.addweighted函数作用 addweighted()是OpenCV库中用于图像处理的函数,主要功能是将两个输入图像(尺寸和类型相同)按照指定的权重进行加权叠加(图像融合),并添加一个标量值&#x…...

React Native在HarmonyOS 5.0阅读类应用开发中的实践

一、技术选型背景 随着HarmonyOS 5.0对Web兼容层的增强,React Native作为跨平台框架可通过重新编译ArkTS组件实现85%以上的代码复用率。阅读类应用具有UI复杂度低、数据流清晰的特点。 二、核心实现方案 1. 环境配置 (1)使用React Native…...

IoT/HCIP实验-3/LiteOS操作系统内核实验(任务、内存、信号量、CMSIS..)

文章目录 概述HelloWorld 工程C/C配置编译器主配置Makefile脚本烧录器主配置运行结果程序调用栈 任务管理实验实验结果osal 系统适配层osal_task_create 其他实验实验源码内存管理实验互斥锁实验信号量实验 CMISIS接口实验还是得JlINKCMSIS 简介LiteOS->CMSIS任务间消息交互…...

爬虫基础学习day2

# 爬虫设计领域 工商:企查查、天眼查短视频:抖音、快手、西瓜 ---> 飞瓜电商:京东、淘宝、聚美优品、亚马逊 ---> 分析店铺经营决策标题、排名航空:抓取所有航空公司价格 ---> 去哪儿自媒体:采集自媒体数据进…...

selenium学习实战【Python爬虫】

selenium学习实战【Python爬虫】 文章目录 selenium学习实战【Python爬虫】一、声明二、学习目标三、安装依赖3.1 安装selenium库3.2 安装浏览器驱动3.2.1 查看Edge版本3.2.2 驱动安装 四、代码讲解4.1 配置浏览器4.2 加载更多4.3 寻找内容4.4 完整代码 五、报告文件爬取5.1 提…...

Android 之 kotlin 语言学习笔记三(Kotlin-Java 互操作)

参考官方文档:https://developer.android.google.cn/kotlin/interop?hlzh-cn 一、Java(供 Kotlin 使用) 1、不得使用硬关键字 不要使用 Kotlin 的任何硬关键字作为方法的名称 或字段。允许使用 Kotlin 的软关键字、修饰符关键字和特殊标识…...

企业如何增强终端安全?

在数字化转型加速的今天,企业的业务运行越来越依赖于终端设备。从员工的笔记本电脑、智能手机,到工厂里的物联网设备、智能传感器,这些终端构成了企业与外部世界连接的 “神经末梢”。然而,随着远程办公的常态化和设备接入的爆炸式…...