大语言模型——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的技术“执拗”与“豪赌”

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

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

相关文章

PCIE链路训练-状态机描述2

Configuration.Lanenum.Accept 如果use_modified_TS1_TS2_Ordered_Set为1,需要注意: (1)tx需要发送Modified TS1而不是正常的TS1; (2)rx端必须检查是否收到Modified TS1(注意一开…

第十七章总结

数据库基础 SQL语言 1、select 语句 select 语句用于从数据中检索数据。语法如下: SELECT 搜选字段列表 FROM 数据表名 WHERE 条件表达式 GROUP BY 字段名 HAVING 条件表达式(指定分组的条件) ORDER BY 字段名[ASC|DESC] 2、insert 语句 insert 语句用于向表中插入新…

Ubuntu20.04 install pnpm

npm install -g pnpm referrence link: Installation | pnpmPrerequisiteshttps://pnpm.io/installation

TrustAsia亮相Matter开发者大会,荣获Matter优秀赋能者奖

11月22日,由CSA(连接标准联盟)中国成员组主办,CSHIA承办的“Matter中国区开发者大会2023” 于杭州举行。 会上,连接标准联盟中国成员组主席宿为民博士、连接标准联盟亚洲区架构师杨莉女士、CSHIA秘书长|中智盟投资创始…

蓝桥杯官网练习题(最长子序列)

题目描述 我们称一个字符串S 包含字符串 T 是指 T 是 S 的一个子序列,即可以从字符串 S 中抽出若干个字符,它们按原来的顺序组合成一个新的字符串与 T 完全一样。 给定两个字符串 S 和 T,请问 T 中从第一个字符开始最长连续多少个字…

LangChain的简单使用介绍

❤️觉得内容不错的话,欢迎点赞收藏加关注😊😊😊,后续会继续输入更多优质内容❤️ 👉有问题欢迎大家加关注私戳或者评论(包括但不限于NLP算法相关,linux学习相关,读研读博…

idea里面常用插件

这里列出了一系列常用的 IntelliJ IDEA 插件,它们可以提高开发效率、简化操作,以及帮助进行代码分析和优化。以下是每个插件的简要介绍: GenerateAllSetter:生成对象的所有 set 方法和 get 方法,方便对象之间的转换。该…

微信小程序实现【点击 滑动 评分 评星(5星)】功能

wxml文件&#xff1a; <view class"wxpl_xing"><view class"manyidu">{{scoreContent}}</view><view><block wx:for{{scoreArray}} wx:for-item"item"><view classstarLen bindtapchangeScore data-sy"{{…

vuex中的常用属性有哪些?

在 Vuex 中&#xff0c;有一些常用的属性可以帮助你管理应用程序的状态。这些属性包括 state、getters、mutations 和 actions。 state: 用于存储应用程序的状态数据&#xff0c;是 Vuex 存储数据的地方。当应用程序中的多个组件需要共享状态时&#xff0c;就可以将这些共享的状…

力扣283:移动零(JAVA)

题目描述: 意思是将所有0移到最后的同时其余非0元素位置仍然不变 如 1 2 0 5 2 0 经过移动零后变为 1 2 5 2 0 0 思路:使用双指针的思路来写 fast:从左往右遍历数组 slow:非零元素最后的一个位置 将数组分为3个区间 [0,slow]为处理好的非0数据,slow永远指向最后一个非0数据 [s…

Java面向对象第一天

什么是类&#xff1f;什么是对象&#xff1f; 现实生活是由很多很多对象组成的&#xff0c;基于对象抽出了类 对象&#xff1a;软件中真实存在的单个的个体/东西 类&#xff1a;类型/类别&#xff0c;代表一类个体 类是对象的模板/模子&#xff0c;对象是类的具体的实例 类中…

docker mysql 宿主机挂载配置文件

官方文档摘录&#xff08;勿喷&#xff0c;仅供自己笔记&#xff09; 官方文档如下&#xff1a; The MySQL startup configuration is specified in the file /etc/mysql/my.cnf, and that file in turn includes any files found in the /etc/mysql/conf.d directory that e…

GoLang语言范围(Range)

目录 一、在数组、切片上使用‘range’ 二、在映射上使用range 三、在通道上使用range Go语言中的range关键字用于迭代数组&#xff08;数组、切片、字符串&#xff09;、映射&#xff08;map&#xff09;、通道&#xff08;channel&#xff09;或者在 for 循环中迭代每一个…

案例022:基于微信小程序的行政复议在线预约系统

文末获取源码 开发语言&#xff1a;Java 框架&#xff1a;SSM JDK版本&#xff1a;JDK1.8 数据库&#xff1a;mysql 5.7 开发软件&#xff1a;eclipse/myeclipse/idea Maven包&#xff1a;Maven3.5.4 小程序框架&#xff1a;uniapp 小程序开发软件&#xff1a;HBuilder X 小程序…

Django之中间件

引入 1、Django自带7个中间件&#xff0c;每个中间件都有各自的功能 2、django能够自定义中间件 3、使用场景&#xff1a; 1. 全局身份校验 2. 全局用户权限校验 3. 全局访问频率的校验 ...... 【1】什么是中间件 Django中间件是一个轻量级、可重用的组件&#xff0c;用于处理…

python运行jackhmmer二进制命令的包装器类

jackhmmer 是 HMMER 软件套件中的一个工具&#xff0c;用于进行高敏感度的蛋白质序列比对。HMMER&#xff08;Hidden Markov Model based on profile&#xff09;是一套用于分析蛋白质序列的工具&#xff0c;它使用隐藏马尔可夫模型&#xff08;HMM&#xff09;来建模蛋白质家族…

nodejs微信小程序+python+PHP -留学信息查询系统的设计与实现-安卓-计算机毕业设计

目 录 摘 要 I ABSTRACT II 目 录 II 第1章 绪论 1 1.1背景及意义 1 1.2 国内外研究概况 1 1.3 研究的内容 1 第2章 相关技术 3 2.1 nodejs简介 4 2.2 express框架介绍 6 2.4 MySQL数据库 4 第3章 系统分析 5 3.1 需求分析 5 3.2 系统可行性分析 5 3.2.1技术可行性&#xff1a;…

543. 二叉树的直径 --力扣 --JAVA

题目 给你一棵二叉树的根节点&#xff0c;返回该树的 直径 。 二叉树的 直径 是指树中任意两个节点之间最长路径的 长度 。这条路径可能经过也可能不经过根节点 root 。 两节点之间路径的 长度 由它们之间边数表示。 解题思路 最长长度可以理解为左子树最长路径加上右子树最长…

MySQL错误之ONLY_FULL_GROUP_BY

报错信息&#xff1a; 翻译&#xff1a; 对该报错的解释 所以&#xff0c;实际上该报错是由于在SQL查询语句中有group by&#xff0c;而这个包含group by的SQL查询写的并不规范导致的&#xff0c;这个ONLY_FULL_GROUP_BY模式开启之后检查就会很严格&#xff0c;如果select列表…

uniapp为什么能支持多端开发?uniapp底层是怎么做的?

文章目录 前言uniapp为什么能支持多端开发&#xff1f;uniapp底层是怎么做条件编译uniapp的语法uniapp如何编译为不同端的代码uniapp的底层是如何做平台特性适配的呢&#xff1f;后言 前言 hello world欢迎来到前端的新世界 &#x1f61c;当前文章系列专栏&#xff1a;uniapp &…