大語言模型基礎

大語言基礎

GPT : Improving Language Understanding by Generative Pre-Training
提出背景

從原始文本中有效學習的能力對于減輕自然語言處理中對監督學習的依賴至關重要。很多深度學習方法需要大量人工標注的數據,限制了它們在很多領域的應用,收集更多的人工標注數據耗時且費錢。而且在有大量標注數據情況下,無監督學習到的好的向量表示能表現的更好。

但是從無標注的文本中利用信息有下面兩個挑戰

  1. 不清楚那種優化目標能最有效的向量表示,NLP中不同的任務(文本推理、文本問答、文本相似度評估等)用不同的目標,使得在僅在當前任務得到最優結果。
  2. 將學習到的文本表示遷移到目標任務上面的最有效的方法還沒有共識,有的改模型結構,有的增加輔助目標。

GPT使用無監督的預訓練(pre-training)和有監督的精調(fine-tuning)這種半監督的方式來解決這個問題,目標就是學習一個通用的向量表示,大量的下游任務僅需要做一點調整即可。

評估

四類語音理解任務:自然語言推斷、問答、語義相似性、文檔分類。

方案詳情

兩階段,第一階段在一個大的文本語料庫上面學習一個大容量的語言模型,第二階段針對下游具體任務精調。

第一階段:Unsuperviserd pre-training
對于token語料庫 U = { u 1 , u 2 , . . . , n n } \mathcal {U}=\{u_1,u_2, ..., n_n\} U={u1?,u2?,...,nn?},用標準的語言建模目標最大化下面的似然函數
L 1 ( U ) = ∑ i log ? P ( u i ∣ u i ? k , . . . , u i ? 1 ; Θ ) L_1(\mathcal{U} ) = \sum_i \log P(u_i|u_{i-k}, ..., u_{i-1};\Theta) L1?(U)=i?logP(ui?ui?k?,...,ui?1?;Θ)
這里 k k k表示上下文窗口size大小,模型參數 Θ \Theta Θ,使用SGD訓練。

U = ( u ? k , . . . , u ? 1 ) U=(u_{-k},...,u_{-1}) U=(u?k?,...,u?1?)表示上下文token向量, n n n表示decoder層數, W e W_e We?表示token的Embedding矩陣, W p W_p Wp?表示位置向量矩陣
h 0 = U W e + W p h_0=UW_e+W_p h0?=UWe?+Wp?
h l = t r a n s f o r m e r _ b l o c k ( h l ? 1 ) h_l=\mathrm{transformer\_block}(h_{l-1}) hl?=transformer_block(hl?1?)
P ( u ) = s o f t m a x ( h n W e T ) P(u)=\mathrm{softmax}(h_nW_e^T) P(u)=softmax(hn?WeT?)

GPT參數量計算,參考Attention機制

使用Transformer的decoder,因為沒有encoder,這里去掉了decoder里面需要encoder輸入的multi-head attention模塊,保留了masked multi-head attention。層數6->12,embedding維度512->768,注意力頭數head_num 8->12,FFN層的隱層維度1024->3072。

在這里插入圖片描述

這里 N = 4 , d = 768 , V = 40000 N=4,d=768,V=40000 N=4d=768V=40000
GPT預訓練模型大小為
12 ? ( ( 4 + 2 ? 4 ) ? 76 8 2 + ( 5 + 4 ) ? 768 ) + 40000 ? 768 = 115737600 = 115 M 12*((4+2*4)*768^2+(5+4)*768)+40000*768=115737600=115\mathrm M 12?((4+2?4)?7682+(5+4)?768)+40000?768=115737600=115M
GPT還有最后的一個線性輸出層,參數量為 d ? V d*V d?V,加上精調線性層的任務參數,總量為
12 ? ( ( 4 + 2 ? 4 ) ? 76 8 2 + ( 5 + 4 ) ? 768 ) + 40000 ? 768 + 768 ? 40000 + 768 ? 40000 = 146457600 = 146 M 12*((4+2*4)*768^2+(5+4)*768)+40000*768 + 768*40000 + 768*40000 =146457600=146\mathrm M 12?((4+2?4)?7682+(5+4)?768)+40000?768+768?40000+768?40000=146457600=146M

第二階段:fine-tuning
精調階段的線性層

P ( y ∣ x 1 , . . . , x m ) = s o f t m a x ( h l W y ) P(y|x^1,...,x^m)=\mathrm{softmax}(h_lW_y) P(yx1,...,xm)=softmax(hl?Wy?)
精調階段最大化下面的似然函數
L 2 ( C ) = ∑ ( x , y ) log ? P ( y ∣ x 1 , . . . , x m ) L_2(C)=\sum_{(x,y)} \log P(y|x^1,...,x^m) L2?(C)=(x,y)?logP(yx1,...,xm)
最終的似然函數

L 3 = L 2 + L 1 L_3 = L_2 + L_1 L3?=L2?+L1?

模型結構
在這里插入圖片描述
所有任務,都需要插入開始和結束符;
對于文本推斷任務,把前提和假設用分隔占位符concat起來;
對于語義相似評估任務,因為沒有順序,所以講text1和text2連接起來作為一個輸入,同時將text2和text1連接起來作為輸出,經過各個的Transformer后concat起來;
多項選擇任務,把context和各個候選答案分別concat起來作為輸入;

實驗

數據集:BookCorpus,超過7000本書,
在這里插入圖片描述

預訓練參數配置
在這里插入圖片描述
精調參數配置
在這里插入圖片描述

在文本推斷任務的表現
在這里插入圖片描述
在問答任務的表現
在這里插入圖片描述
在文本分類任務的表現
在這里插入圖片描述
Transformer層數的影響(下面左圖),層數越大效果越好;比較Zero-shot的表現,和LSTM比較,Transformer隨更新步數增長效果更好,LSTM就差很多,預訓練的模型容量比較重要。
在這里插入圖片描述
消融分析
精調階段使用/不使用輔助的LM目標(aux LM);去掉預訓練;相同層數的LSTM(單層2048個unit);
在這里插入圖片描述

BERT: Pre-training of Deep Bidirectional Transformers for Language Understanding
提出背景

GPT是從左到右單向的語言模型,ELMo也是單向的(單向的從左到右和單向的從右到左,然后concat到一起),單向的語言模型會限制它在下游的表現。
BERT提出雙向的Transformer模型

方案詳情

示意圖如下
在這里插入圖片描述
BERT的輸入包括三部分,Token Embedding、Segment Embedding(句子pair中的句子A還是句子B)、Position Embedding
在這里插入圖片描述

和其他結構比較
在這里插入圖片描述
BERT是雙向的Self-Attention,既可以看到前面的token,也可以看到后面的token,BERT的目標與GPT不一樣了,GPT是根據前面的詞預測后面的詞,BERT是根據前后的詞預測當前位置的詞,類似于完形填空。

為此BERT引入了掩碼語言任務(Masked LM),隨機mask一個token,然后根據這個token之前及之后的token來預測這個token;mask的token用[MASK]占位符替代,在每個sequence里面隨機mask15%的比例的token。但是[MASK]這個token并不在fine-tuning階段出現,為了緩解預訓練和精調之間這種不一致,預訓練在mask的時候并不總是用[MASK]這個token代替,80%的概率用[MASK]代替,10%的概率隨機選擇一個token代替,10%的概率就用原來的token不做替換。
這里mask策略也是調參調出來的
在這里插入圖片描述

示意圖如下:
在這里插入圖片描述
這里最上面是 MLM 的多分類任務,多出的這個線性層矩陣 W ∈ R d i m ? V W \in R^{dim*V} WRdim?V是和輸入的詞匯表 embedding 矩陣共享的,就是多了一個偏置 b ∈ R 1 ? V b \in R^{1* V} bR1?V,也就是此處多了 V V V個模型參數。

很多NLP的任務像問答、推斷都是理解兩個句子的關系,語言模型不容易直接識別到時哪種任務,為了使模型理解兩個句子之間的關系,引入了下一個句子預測任務(Next Sentence Prediction , NSP),構造樣本的時候,句子A后面50%的概率是后面接著的句子B(label標記為IsNext),50%的概率從語料庫從語料庫隨機選(label標記為NotNext)
最上面是個二分類任務,有一個線性矩陣 W ∈ R d i m ? 2 W \in R^{dim*2} WRdim?2 來表示。

fine-tuning細節和GPT一致

實驗

實驗配置, B E R T B A S E \mathrm {BERT_{BASE}} BERTBASE? 為了和GPT對比,和GPT的參數配置幾乎完全一樣。
B E R T B A S E \mathrm {BERT_{BASE}} BERTBASE? L=12,H=768,A=12
B E R T L A R G E \mathrm {BERT_{LARGE}} BERTLARGE? L=24,H=1024,A=16

token數量(V)和GPT不一樣,其他一致, N = 4 , d = 768 , V = 32000 N=4,d=768,V=32000 N=4d=768V=32000,不算后面fine-tuning階段線性層的參數
B E R T B A S E \mathrm {BERT_{BASE}} BERTBASE?預訓練模型大小為(加上每個位置的 embedding 512768、NSP 二分類任務參數 7682、MLM 多分類任務參數 32000(分類任務權重矩陣和詞表 embedding 矩陣共享,但是有獨立的偏置,參數量32000))
12 ? ( ( 4 + 2 ? 4 ) ? 76 8 2 + ( 5 + 4 ) ? 768 ) + 32000 ? 768 + 512 ? 768 + 768 ? 2 + 32000 = 110020352 = 110 M 12*((4+2*4)*768^2+(5+4)*768)+32000*768 + 512*768+768*2 + 32000=110020352=110\mathrm M 12?((4+2?4)?7682+(5+4)?768)+32000?768+512?768+768?2+32000=110020352=110M
B E R T L A R G E \mathrm {BERT_{LARGE}} BERTLARGE?預訓練模型大小為
24 ? ( ( 4 + 2 ? 4 ) ? 102 4 2 + ( 5 + 4 ) ? 1024 ) + 32000 ? 1024 + 512 ? 1024 + 1024 ? 2 + 32000 = 335537408 = 335 M 24*((4+2*4)*1024^2+(5+4)*1024)+32000*1024 + 512*1024 + 1024*2 + 32000=335537408=335\mathrm M 24?((4+2?4)?10242+(5+4)?1024)+32000?1024+512?1024+1024?2+32000=335537408=335M
實驗效果
在這里插入圖片描述

RoBERTa: A Robustly Optimized BERT Pretraining Approach

BERT的升級優化版本

提出背景

BERT訓練不充分,還有很大的空間
提升措施:

  1. 讓模型訓練的更久、使用更大的batch size,使用更多的數據
  2. 去除下一個句子預測任務NSP
  3. 在更長的sequence序列上面訓練
  4. 在訓練數據中動態改變mask方式
方案詳情

增加語料庫

  1. BOOKCORPUS加上英語WIKIPEDIA,這是BERT用的語料庫(16GB)
  2. CC-NEWS,這是RoBERTa從CommonCrawl新聞數據集手機的,包含6300萬英語新聞文章(2016年至2019年)(76GB)
  3. OPENWEBTEXT開源的WebText語料庫,從Reddit上面根據URL抽取的web內容(38GB)
  4. STORIES包含了過濾的CommonCraw數據子集(31GB)

下游任務評估基準
GLUE:The General Language Understanding Evaluation,包含9個數據集來評估自然語言理解。
SQuAD:The Stanford Question Answering Dataset 提供一個上下文的段落及以問題,任務是通過抽取上下文回答問題。
RACE:The ReAding Comprehension from Examinations 大規模的閱讀理解數據集,包含28000篇文章和100000個問題,來自中國的中學英文考試題目。

改進BERT
配置和 B E R T B A S E \mathrm {BERT_{BASE}} BERTBASE?一樣 (L=12, H=768, A=12, 110M參數量)
BERT模型在數據預處理的時候就mask好了,稱為靜態mask(static masking)數據復制了10份,在40個epoch里面,每份訓練數據會相同mask4次。這里采用動態mask(dynamic masking)訓練數據每次都是動態mask,保證訓練時不會有重復的mask數據。動態masking效果更好,后面的評測均用動態masking。
在這里插入圖片描述
原始BERT里面有個NSP任務,預測下一個句子的任務,去掉NSP會影響效果,但是有很多質疑的研究,起作用的主要是MLM,并不是NSP,為此做了一些消融實驗來驗證。

SEGMENT-PAIR+NSP:原始的BERT的方式,每個輸入是一個Segment pair對,每個Segment可以包含多個自然句子,多個句子的總長度不超過512個tokens。
SENTENCE-PAIR+NSP:每個輸入是一個自然句子pair對,因為這些句子顯著低于512個tokens,因此增大batch size使得batch內總的token數量與SEGMENT-PAIR+NSP相似,也有NSP loss。
FULL-SENTENCES:每個輸入是從一個或者多個文檔中連續采樣得來的,每個輸入最多512個tokens,輸入可能跨文檔,如果跨文檔,增加一個額外的分割token在里面,同時去除NSP loss。
DOC-SENTENCES:構造方式和FULL-SENTENCES類似,就是句子不跨文檔。那么采樣文檔末尾的句子的時候,token長度可能小于512個,那就動態增加batch size,使得batch內的token和FULL-SENTENCES相似。

結果如下:
SEGMENT-PAIR+NSP vs SENTENCE-PAIR+NSP 說明使用單個句子模型沒法學習到長距離依賴關系。
FULL-SENTENCES vs SEGMENT-PAIR+NSP:說明去除NSP loss會提升下游任務表現
FULL-SENTENCES vs DOC-SENTENCES:限制sequence來自同一個文檔有輕微提升,但是batch size是動態的,為了對比方便,后面都使用FULL-SENTENCES這一組。
在這里插入圖片描述
更大的batch size
更大的batch size帶來更好的效果
在這里插入圖片描述
文本編碼方式
Byte-Pair Encoding(BPE)是字符級和單詞級表示的混合,該編碼方案可以處理自然語言語料庫中常見的大量詞匯。BPE不依賴于完整的單詞,而是依賴于子詞(sub-word)單元,這些子詞單元是通過對訓練語料庫進行統計分析而提取的,其詞表大小通常在 1萬到 10萬之間。
原始的BERT使用的是字符級的編碼,詞匯量30K,RoBERTa使用BPE編碼,詞匯量50K,相對 B E R T B A S E \mathrm {BERT_{BASE}} BERTBASE? B E R T L A R G E \mathrm {BERT_{LARGE}} BERTLARGE?會多出15M到20M的參數量。

實驗效果

在這里插入圖片描述

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/42334.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/42334.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/42334.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

cs231n作業2 雙層神經網絡

雙層神經網絡 我們選用ReLU函數和softmax函數: 步驟: 1、LOSS損失函數(前向傳播)與梯度(后向傳播)計算 Forward: 計算score,再根據score計算loss Backward:分別對W2、b2、W1、b1求…

學懂C#編程:WPF應用開發系列——WPF之ComboBox控件的詳細用法

WPF(Windows Presentation Foundation)中的ComboBox控件是一個下拉列表控件,允許用戶從一組預定義的選項中選擇一個選項。以下是ComboBox控件的詳細用法,并附帶示例說明。 ComboBox的基本用法 1. XAML定義: 在XAML中…

multisim中關于74ls192n和DSWPK開關仿真圖分析(減法計數器)

🏆本文收錄于「Bug調優」專欄,主要記錄項目實戰過程中的Bug之前因后果及提供真實有效的解決方案,希望能夠助你一臂之力,幫你早日登頂實現財富自由🚀;同時,歡迎大家關注&&收藏&&…

直播預告 | VMware大規模遷移實戰,HyperMotion助力業務高效遷移

2006年核高基專項啟動,2022年國家79號文件要求2027年央國企100%完成信創改造……國家一系列信創改造政策的推動,讓服務器虛擬化軟件巨頭VMware在中國的市場份額迅速縮水。 加之VMware永久授權的取消和部分軟件組件銷售策略的變更,導致VMware…

開發一個HTTP模塊

開發一個HTTP模塊 HTTP模塊的數據結構ngx_module_t模塊的數據結構ngx_http_module_t數據結構ngx_command_s 數據結構 定義一個HTTP模塊處理用戶請求返回值獲取URI和參數方法名URIURL協議版本 獲取HTTP頭獲取HTTP包體 發送響應發送HTTP頭發送內存中的字符串作為包體返回一個Hell…

什么時候考慮將mysql數據遷移到ES?

文章目錄 對ES的一些疑問問題1:ES相比mysql本身有哪些優勢?問題2:哪些場景適合用ES而不是mysql?問題3:mysql逐行掃描,根據過濾條件檢查記錄中對應字段是否滿足要求屬于正排索引,根據二叉樹索引檢索記錄的方式屬于正排索引還是倒排…

SpringBoot整合DataX數據同步(自動生成job文件)

SpringBoot整合Datax數據同步 文章目錄 SpringBoot整合Datax數據同步1.簡介設計理念 DataX3.0框架設計DataX3.0核心架構核心模塊介紹DataX調度流程 2.DataX3.0插件體系3.數據同步1.編寫job的json文件2.進入bin目錄下,執行文件 4.SpringBoot整合DataX生成Job文件并執…

生產力工具|VS Code安裝及使用指南

一、VS Code介紹 (一)軟件介紹 Visual Studio Code(簡稱VS Code)是由Microsoft開發的免費開源代碼編輯器,適用于Windows、macOS和Linux操作系統。它支持多種編程語言,如JavaScript、Python、C等&#xff0…

知識社區在線提問小程序模板源碼

藍色的知識問答,問答交流,知識社區,在線提問手機app小程序網頁模板。包含:社區主頁、提問、我的、綁定手機,實名認證等。 知識社區在線提問小程序模板源碼

ubuntu 檢查硬盤的通電時長、健康度

ubuntu 檢查硬盤的通電時長、健康度 在Ubuntu系統中,檢查硬盤的通電時長和健康度通常需要使用SMART(Self-Monitoring, Analysis, and Reporting Technology)工具。SMART是硬盤制造商內置的一套硬盤保護技術,用于監控硬盤的健康狀況…

品質至上!中國星坤連接器的發展之道!

在電子連接技術領域,中國星坤以其卓越的創新能力和對品質的不懈追求,贏得了業界的廣泛認可。憑借在高精度連接器設計和制造上的領先地位,星坤不僅獲得了多項實用新型專利,更通過一系列國際質量管理體系認證,彰顯了其產…

【Qt5.12.9】程序無法顯示照片問題(已解決)

問題記錄:Qt5.12.9下無法顯示照片 我的工程名為03_qpainter,照片cd.png存放在工程目錄下的image文件夾中。 /03_qpainter/image/cd.png 因為這是正點原子Linux下Qt書籍中的例程,在通過學習其配套的例程中的項目,發現我的項目少…

【Python】搭建屬于自己 AI 機器人

目錄 前言 1 準備工作 1.1 環境搭建 1.2 獲取 API KEY 2 寫代碼 2.1 引用庫 2.2 創建用戶 2.3 創建對話 2.4 輸出內容 2.5 調試 2.6 全部代碼 2.7 簡短的總結 3 優化代碼 3.1 規范代碼 3.1.1 引用庫 3.1.2 創建提示詞 3.1.3 創建模型 3.1.4 規范輸出&#xf…

在線調試網絡接口的免費網站

免費接口網站 GET接口 https://httpbin.org/get https://httpbin.org/ip https://publicobject.com/helloworld.txt POST接口 https://httpbin.org/post 調試網站 Postman需要下載安裝,還要登錄賬號。對于簡單測試,麻煩! http://coolaf.…

西門子1200高速計數器編碼器的應用 接線 組態 編程 調試 測距測速

編碼器的應用、接線、組態、博途1200編程與調試:高速計數器,用于給PLC發高速脈沖,接I點 用來例如:檢測電機轉速,皮帶輸送機運行的距離 (粗略定位) 360:代表轉一圈會對外發360個脈沖&…

系統化學習 H264視頻編碼(02) I幀 P幀 B幀 引入及相關概念解讀

說明:我們參考黃金圈學習法(什么是黃金圈法則?->模型 黃金圈法則,本文使用:why-what)來學習音H264視頻編碼。本系列文章側重于理解視頻編碼的知識體系和實踐方法,理論方面會更多地講清楚 音視頻中概念的…

Python類實例的json

web開發中有這么一個場景,我們從數據庫中查詢某一數據的時候,往往需要對數據進行一些轉化之后才能傳給前端。 當然我們可以根據查詢出來的實例對象,構建一個dict返回,這樣會導致我們的代碼非常的臃腫。但是這也確實是一種最直接的…

網絡空間測繪是什么?

網絡空間測繪是一種技術過程,用于探測、分析和可視化互聯網及其他網絡環境中的各種資源和連接。這個概念在2016年開始廣泛使用,它涉及到收集有關網絡節點(如服務器、路由器、個人電腦和其他設備)的信息,并建立這些節點…

C++ STL 多線程庫用法介紹

目錄 一:Atomic: 二:Thread 1. 創建線程 2. 小心移動(std::move)線程 3. 如何創建帶參數的線程 4. 線程參數是引用類型時,要小心謹慎。 5. 獲取線程ID 6. jthread 7. 如何在線程中使用中斷 stop_token 三:如何解決數據競爭 1.有問題的代碼 2.使用互斥 3.預防…

Vue3+.NET6前后端分離式管理后臺實戰(二十八)

1,Vue3.NET6前后端分離式管理后臺實戰(二十八)