大語言模型——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.pswp.cn/news/165198.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/165198.shtml
英文地址,請注明出處:http://en.pswp.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 &…