更多內容:XiaoJ的知識星球
目錄
- 2.3 基于Encoder-only 架構的大語言模型
- 2.3.1 Encoder-only 架構
- 2.3.2 BERT 語言模型
- 1)BERT 模型結構
- 2)BERT 預訓練方式
- 3)BERT 下游任務
- 2.3.3 BERT 衍生語言模型
- 1)RoBERTa 語言模型
- 2)ALBERT 語言模型
- 3)ELECTRA 語言模型
2.3 基于Encoder-only 架構的大語言模型
2.3.1 Encoder-only 架構
Encoder-only 架構的核心在于能夠覆蓋輸入所有內容的雙向編碼模型(Bidirectional Encoder Model)。
在處理輸入序列時,雙向編碼模型融合了從左往右的正向注意力以及從右往左的反向注意力,能夠充分捕捉每個 Token 的上下文信息,因此也被稱為具有全面的注意力機制。
雙向編碼器為每個詞生成動態的上下文嵌入(Contextual Embedding),使得模型能更精準理解詞之間的依賴性和語義,有效處理詞語的多義性問題。使得雙向編碼器在句子級別的任務上表現出色,顯著超過了靜態詞嵌入方法的性能。
Encoder-only 架構基于雙向編碼模型,選用了 Transformer 架構中的編碼器部分。雖然 Encoder-only 模型不直接生成文本,但其生成的上下文嵌入對于深入理解輸入文本的結構和含義至關重要。
當前, BERT及其變體,如 RoBERTa、ALBERT等,都是基于 Encoder-only 架構的主流大語言模型。
2.3.2 BERT 語言模型
BERT(Bidirectional Encoder Representations from Transformers)
-
是一種基于 Encoder-only 架構的預訓練語言模型。
-
其核心在于通過雙向編碼模型深入挖掘文本的上下文信息,而為下游任務提供優秀的上下文嵌入。
1)BERT 模型結構
BERT 模型的結構與 Transformer 中的編碼器幾乎一致,由多個編碼模塊堆疊,每個編碼模塊包含一個多頭自注意力模塊和一個全連接前饋模塊。
根據參數量的不同,BERT 模型共有 BERT-Base 和 BERT-Large 兩個版本。
2)BERT 預訓練方式
BERT 使用小說數據集 BookCorpus 和英語維基百科數據集進行預訓練。
在預訓練任務上,BERT 開創性地提出了掩碼語言建模(Masked Language Model, MLM) 和 下文預測(Next Sentence Prediction, NSP) 兩種任務來學習生成上下文嵌入。其完整的預訓練流程如下。
圖 2.7: BERT 預訓練任務。
BERT 預訓練任務步驟:
(1)構造樣本序列:
BERT 先基于給定的原始文本構造多個樣本序列,每個樣本序列由原始文本中的兩個句子組成,這兩個句子有 50% 的概率是來自原文的連續句子,另外 50% 的概率是隨機挑選的兩個句子。隨后,對樣本序列分詞, 在序列開頭添加標簽 [CLS],在每個句子結尾添加標簽 [SEP]。
(2)判斷句子連續性:
接著,BERT 利用模型判斷樣本序列中的兩個句子是否為連續的。這一任務訓練 BERT 識別和理解句子之間的關系,捕捉句子層面的語義特征。
(3)掩碼預測:
最后,BERT 隨機選樣本序列中約 15% 的 Token 進行遮掩,將其替換為標簽 [MASK] 或者隨機單詞。模型需要預測這些被替換的 Token 的原始內容。要求模型根據周圍的上下文信息來推斷缺失的 Token。預測過程使用的交叉熵損失函數驅動了 BERT 模型中參數的優化,使其能夠學習到 文本的雙向上下文表示。
值得注意的是,在 MLM 任務的訓練過程中,BERT 僅針 對那些被隨機替換的 Token 進行學習,即只計算這些 Token 的預測損失來更新模型參數。
通過這兩種預訓練任務的結合,使 BERT 在理解語言的深度和廣度上都有顯著提升。BERT 不僅能夠捕捉到 Token 的細粒度特征,還能夠把握長距離的依賴關系和句子間的復雜聯系,為各種下游任務提供了堅實的語言理解基礎。
3)BERT 下游任務
BERT 可以應用于各種自然語言處理任務,包括但不限于:
文本分類(如情感分析)、問答系統、文本匹配(如自然語言推斷)、語義相似度計算。
(1) [CLS] 標簽設計
由于 BERT 的輸出是輸入中所有 Token 的向量表示,因此總長度不固定,無法直接應用于各類下游任務。
為解決這一問題,BERT 設計了 [CLS] 標簽(即Classification Token,分類標記)來提取整個輸入序列的聚合表示。[CLS] 標簽匯總整個輸入序列的信息,生成一個固定長度的向量表示,從而實現對所有 Token 序列信息的概括,便于處理各種下游任務。
(2)任務處理
文本分類任務中:
-
將輸出中 [CLS] 標簽對應的向量提取出來,傳遞給一個全連接層,從而用于分類。
-
例如判斷整個句子的情緒是積極、消極或是中立的。
問答系統任務中:
-
需要輸入問題以及一段相關的文本,即“[CLS] 問題 [SEP] 文 本 [SEP]”。
-
最終取出 [CLS] 標簽的對應向量,并傳遞給兩個全連接層,用于判斷答案是否存在于相關文本中。如果存在,這兩個全連接層分別用于輸出答案的起始和結束位置。
-
通過這種方式,BERT 能夠從提供的段落中準確提取出問題的答案。
語義相似度任務中:
-
過構造“[CLS] 文本 1[SEP] 文本 2[SEP]”的方式,
-
結合一個 線性層來直接輸出兩個文本之間的相似度;
-
也可以不添加額外的組件,直接提取 [CLS] 標簽對應的向量,再利用額外的相似度度量方法(例如余弦相似度)來計算多段文本之間的相似度。
2.3.3 BERT 衍生語言模型
1)RoBERTa 語言模型
RoBERTa(Robustly Optimized BERT Pretraining Approach)
-
中文解釋:魯棒優化 BERT 預訓練方法。
-
旨在解決BERT在訓練程度上不充分問題,以提升預訓練語言模型的性能。
-
在BERT的基礎上采用:更大數據集、更長的訓練時間、更細致的超參數調整。
(1) RoBERTa 模型結構
RoBERTa 在結構上與BERT基本一致,基于多層堆疊的編碼模塊,每個編碼 模塊包含多頭自注意力模塊和全連接前饋模塊。RoBERTa同樣有兩個版本,分別 是RoBERTa-Base和RoBERTa-Large。
RoBERTa-Base與BERT-Base對標,RoBERTa-Large 則與BERT-Large 對標。
(2) RoBERTa 預訓練方式
RoBERTa 移除了 BERT 中的下文預測任務,并將 BERT 原生的靜態掩碼語言建模任務更改為動態掩碼語言建模。
具體而言,
BERT 在數據預處理期間對句子進行掩碼,隨后在每個訓練epoch(一次完整訓練過程)中,掩碼位置不再變化。
而RoBERTa則將訓練數據復制成10個副本,分別進行掩碼。
在同樣訓練40個epoch 的前提下,BERT在其靜態掩碼后的文本上訓練了40次,而RoBERTa將 10 個不同掩碼后的副本分別訓練了4次。從而增加模型訓練的多樣性,有助于模型學習到更豐富的上下文信息。
這些改進使得RoBERTa在理解上下文和處理長文本方面表現出色,尤其在捕捉細微的語義差異和上下文依賴性方面。
2)ALBERT 語言模型
ALBERT(A Lite BERT):輕量級 BERT 模型
-
旨在通過參數共享和嵌入分解技術來減少模型的參數量和內存占用,從而提高訓練和推理效率。
-
通過參數因子分解技術和跨層參數共享技術顯著減少了參數的數量。
(1) ALBERT 模型結構
ALBERT的結構與BERT以及RoBERTa都類似,由多層堆疊的編碼模塊組成。
但是ALBERT通過參數因子分解以及跨層參數共享,在相同的模型架構下,顯著減少了模型的參數量。
參數因子分解:
在BERT 中:
-
Embedding 層的輸出向量維度 E 與隱藏層的向量維度H 是一致的,這意味著Embedding 層的輸出直接用作后續編碼模塊的輸入。
-
具體來說, BERT-Base 模型對應的詞表大小V 為3,0000左右,并且其隱藏層的向量維度H設置為768。因此,BERT的Embedding層需要的參數數量是V ×H,大約為2,304萬。
ALBERT中:
-
將Embedding層的矩陣先進行分解,將詞表對應的獨熱編碼向量通過一個低維的投影層下投影至維度E,再將其上投影回隱藏狀態的維度H。
-
具體來說,ALBERT選擇了一個較小的Embedding層維度,例如128,并將 參數數量拆解為V ×E+E×H。按照這個設計,ALBERT的Embedding層大約 需要394萬個參數
跨層參數共享:
以經典的 BERT-Base 模型為例,模型中共有 12 層相同架構的編碼模塊,所有 Transformer 塊的參數都是獨立訓練的。
ALBERT 為了降低模型的參數量,提出了跨層參數共享機制,只學習第一層編碼模塊的參數,并將其直接共享給其他所有層。
該機制一定程度上犧牲了模型性能,但顯著提升了參數存儲空間的壓縮比, 從而實現更高效的資源利用。
ALBERT 共提出了四個版本的模型:
-
分別是 ALBERT-Base、ALBERT-Large、ALBERT-XLarge 以及 ALBERT-XXLarge。
-
ALBERT-Base 與 BERT-Base 對標,ALBERT Large 與 BERT-Large 對標,剩余兩個更大。
(2) ALBERT 預訓練方式
ALBERT 使用與 BERT 一致的數據集來進行預訓練,即小說數據集 BookCorpus及英語維基百科數據集。
在預訓練任務的選擇上:
-
ALBERT 保留了 BERT 中的掩碼語言建模任務,
-
并將下文預測任務替換為句序預測(Sentence Order Prediction, SOP),如圖所示。
圖 2.8: ALBERT 句序預測任務。
具體而言,ALBERT 從文本中選擇連續的兩個句子,將這兩個句子直接拼接起來,或是先將這兩個句子的順序翻轉后再進行拼接,并將拼接后的內容作為輸入樣本,而模型需要預測該樣本中 的兩個句子是正序還是反序。
與 BERT 相比,ALBERT 通過創新的參數共享和參數因子分解技術,在較好 地保持原有性能的同時顯著減少了模型的參數數量,這使得它在資源受限的環境 中更加實用,處理大規模數據集和復雜任務時更高效,并降低了模型部署和維護 的成本。
3)ELECTRA 語言模型
ELECTRA(Efficiently Learning an Encoder that Classifies Token Replacements Accurately)
-
中文解釋:高效地學習一個能夠準確分類Token替換的編碼器。
-
旨在解決大規模預訓練語言模型中的效率和可擴展性問題。
-
通過使用生成器-判別器架構,ELECTRA 能高效利用預訓練數據,提高模型在下游任務中的表現。
(1) ELECTRA 預訓練方式
在模型結構上,ELECTRA 在 BERT 原有的掩碼語言建模基礎上結合了生成對抗網絡(Generative Adversarial Network, GAN)的思想,采用了一種生成器-判別器結構。
-
生成器(Generator):能進行掩碼預測的模型(如BERT),負責將掩碼后的文本恢復原狀。
-
判別器(Discriminator):則使用替換詞檢測(Replaced Token Detection, RTD)預訓練任務,檢測生成器輸出的內容中的每個 Token 是否是原文中的內容。
其完整的流程如圖所示。
圖 2.9: ELECTRA 預訓練任務。
(2) ELECTRA 模型結構
根據生成器與判別器的不同規模,ELECTRA 共提出了三個版本的模型,分別 是 ELECTRA-Small、ELECTRA-Base 以及 ELECTRA-Large。
其中,ELECTRA-Small 和 ELECTRA-Base 使用與 BERT 一致的數據集來進行預訓練,而 ELECTRA-Large 則使用了更多樣化的訓練數據,從而幫助模型學習更廣泛的語言表示。
另外,在 BERT 中,只有 15% 的固定比例 Token 被掩碼,模型訓練的內容也僅限于這 15% 的 Token。
但在 ELECTRA 中,判別器會判斷生成器輸出的所有 Token 是否被替換過,因此能更好地學習文本的上下文嵌入。
Encoder-only 架構的語言模型小結:
上述基于 Encoder-only 架構的大語言模型在文本分類、情感分析等多個自然語言處理任務中取得了良好效果。表2.1從模型參數量及預訓練語料等方面對上述模型進行總結。
表 2.1: Encoder-only 架構代表模型參數和語料大小表。
模型 | 發布時間 | 參數量(億) | 語料規模 | 預訓練任務 |
---|---|---|---|---|
BERT | 2018.10 | 1.1, 3.4 | 約 15GB | MLM+NSP |
RoBERTa | 2019.07 | 1.2, 3.5 | 160GB | Dynamic MLM |
ALBERT | 2019.09 | 0.12, 0.18, 0.6, 2.2 | 約 15GB | MLM+SOP |
ELECTRA | 2020.03 | 0.28, 2.2, 6.6 | 約 20-200GB | RTD |
可以看出這些經典模型參數大小止步于 6.6 億,預訓練任務也主要服務于自然語言理解。這些模型沒有繼續尋求參數量上的突破,并且通常只專注于判別任務,難以應對生成式任務,因此在當前愈發熱門的生成式人工智能領域中可以發揮的作用相對有限。
聲明:資源可能存在第三方來源,若有侵權請聯系刪除!