java做網(wǎng)站開發(fā)書seo綜合查詢 站長工具
當前,ChatGLM-6B 在自然語言處理領(lǐng)域日益流行。其卓越的技術(shù)特點和強大的語言建模能力使其成為對話語言模型中的佼佼者。讓我們深入了解 ChatGLM-6B 的技術(shù)特點,探索它在對話模型中的創(chuàng)新之處。
GLM: 自回歸空白填充的多任務(wù)預訓練語言模型
- ChatGLM-6B 技術(shù)特點詳解
- GLM
- GLM(General Language Model)發(fā)展背景:
- GLM特點:
- GLM的改進:
- GLM預訓練框架
- 預訓練目標
- 自回歸空白填充
- 多任務(wù)預訓練
- 模型架構(gòu)
- 2D 位置編碼
- 微調(diào) GLM
- 對比
- 與 BERT 的比較
- 與 XLNet 的比較
- 與 T5 的比較
- 與 UniLM 的比較
ChatGLM-6B 技術(shù)特點詳解
ChatGLM-6B 是一個開源的、支持中英雙語的對話語言模型,基于 General Language Model (GLM) 架構(gòu),具有 62 億參數(shù),基于原文提煉出一些特點
- Tokenization(標記化)
論文采用了基于 icetk 包的文本標記器,詞匯量達到 150,000,其中包括 20,000 個圖像標記和 130,000 個文本標記。標記的范圍從 No.20000 到 No.145653,其中包括常見標點、數(shù)字和無擴展定義的空格。 - 層規(guī)范化
層規(guī)范化在語言建模問題中的重要性得到了深入討論。論文采用了 DeepNorm 作為 Post-LN 方法,取代了傳統(tǒng)的 Pre-LN 方法。該決策是為了應(yīng)對模型規(guī)模擴大至 100B 甚至遇到多模態(tài)數(shù)據(jù)時 Pre-LN 的訓練困難的問題。 - 管道并行分析
管道并行性的優(yōu)化對于訓練效率至關(guān)重要。論文引入了 Gpipe 和 PipeDream-Flush 策略。在實際 GLM-130B 的預訓練中,通過調(diào)整微批次的數(shù)量,成功減少了 GPU 內(nèi)存泡沫的占用。具體而言,當微批次數(shù)(m)大于等于 4 倍管道數(shù)(p)時,總 GPU 內(nèi)存泡沫的占比可以被降低到可接受的水平。 - 權(quán)重量化
為了在推理過程中節(jié)省 GPU 內(nèi)存,論文采用了權(quán)重量化技術(shù)。Absmax 量化方法在性能和計算效率上的平衡得到了充分的考慮。以下是量化結(jié)果的比較:
Model | Original | Absmax INT8 | Absmax INT4 | Zeropoint INT4
-----------|----------|-------------|-------------|----------------
BLOOM-176B | 64.37% | 65.03% | 34.83% | 48.26%
GLM-130B | 80.21% | 80.21% | 79.47% | 80.63%
這表明 GLM-130B 在 INT4 精度下能夠保持較高性能,同時有效地減少 GPU 內(nèi)存占用。考慮到ChatGLM-6B是基于 General Language Model (GLM) 架構(gòu)實現(xiàn)的,下文將詳細對GLM架構(gòu)展開介紹。
GLM
這個圖展示了GLM(General Language Model)的基本原理。在這個模型中,我們首先將文本中的一些部分(綠色部分)標記為空白,也就是我們遮擋了其中的一些文本片段。接下來,我們通過自回歸的方式逐步生成這些被遮擋的文本片段。也就是說,我們從左到右逐個預測每個被遮擋的位置上應(yīng)該是什么詞語,然后將這些預測組合起來形成完整的文本。
這個過程類似于我們填寫一篇文章的空白部分,通過上下文逐步補充缺失的信息。
GLM(General Language Model)發(fā)展背景:
當前存在多種預訓練模型架構(gòu),如自編碼模型(BERT)、自回歸模型(GPT)和編碼-解碼模型(T5)。然而,這些框架在自然語言理解(NLU)、無條件生成和條件生成等任務(wù)中均無法在所有方面表現(xiàn)最佳。
GLM特點:
GLM是一種基于自回歸空白填充的通用語言模型。它通過在輸入文本中隨機空白化連續(xù)跨度的令牌,并訓練模型順序重構(gòu)這些跨度來進行預訓練。GLM改進了空白填充預訓練,引入了2D位置編碼和允許以任意順序預測跨度的機制。GLM能夠處理不同類型任務(wù)的預訓練,通過變化空白的數(shù)量和長度,實現(xiàn)了對條件和無條件生成任務(wù)的預訓練。
GLM的改進:
GLM在實現(xiàn)自回歸空白填充時引入了兩個關(guān)鍵改進:1)跨度洗牌,即對空白的連續(xù)跨度進行隨機排序;2)2D位置編碼,為每個位置引入二維位置編碼。這些改進使得GLM在相同參數(shù)和計算成本下顯著優(yōu)于BERT,并在多任務(wù)學習中表現(xiàn)卓越,尤其在NLU和生成任務(wù)中。
自回歸模型(例如GPT):
- 原理: 自回歸模型是一種通過學習從左到右的語言模型來預訓練的框架。它的核心思想是根據(jù)上下文左側(cè)的單詞來預測下一個單詞,實現(xiàn)對整個文本的逐詞建模。
- 特點:
-
- 優(yōu)勢在于適用于長文本生成,并在參數(shù)規(guī)模較大時表現(xiàn)出良好的性能。
-
- 不足之處在于其單向的注意力機制,不能完全捕捉自然語言理解任務(wù)中上下文詞匯之間的依賴關(guān)系。
自編碼模型(例如BERT):
- 原理: 自編碼模型通過學習一個對輸入進行自編碼的目標,例如通過將輸入文本中的某些單詞隨機遮蔽,然后嘗試預測這些被遮蔽的單詞,從而達到學習雙向上下文表示的目的。
- 特點:
-
- 通過雙向上下文編碼,適用于自然語言理解任務(wù),如文本分類、命名實體識別等。
-
- 不同于自回歸模型,可以同時考慮上下文中的所有詞,更好地捕捉依賴關(guān)系。
編碼-解碼模型(例如T5):
- 原理: 編碼-解碼模型采用編碼器-解碼器結(jié)構(gòu),其中編碼器通過雙向注意力機制對輸入進行編碼,解碼器通過自回歸方式生成輸出。
- 特點:
-
- 適用于條件生成任務(wù),如機器翻譯、文本摘要等。
-
- 結(jié)合了自編碼和自回歸的優(yōu)勢,但通常需要更多的參數(shù)。
三大類預訓練框架對比:
特點 | 自回歸模型(GPT) | 自編碼模型(BERT) | 編碼-解碼模型(T5) |
---|---|---|---|
訓練方向 | 左到右 | 雙向 | 雙向 |
任務(wù)適用性 | 長文本生成 | 自然語言理解 | 條件生成任務(wù) |
上下文捕捉 | 單向上下文 | 雙向上下文 | 雙向上下文 |
應(yīng)用領(lǐng)域 | 生成任務(wù) | 自然語言理解任務(wù) | 條件生成任務(wù) |
訓練效率 | 參數(shù)較大時效果較好 | 效果較好且能同時處理所有詞 | 參數(shù)相對較大 |
這些預訓練框架在不同的任務(wù)和應(yīng)用場景中有各自的優(yōu)勢和不足,選擇合適的框架取決于具體任務(wù)的性質(zhì)和需求。
GLM預訓練框架
我們提出了一個通用的預訓練框架GLM,基于一種新穎的自回歸空白填充目標。GLM將NLU任務(wù)形式化為包含任務(wù)描述的填空問題,這些問題可以通過自回歸生成來回答。
預訓練目標
自回歸空白填充
GLM通過優(yōu)化自回歸空白填充目標進行訓練。在給定輸入文本 x = [ x 1 , ? ? ? , x n ] x = [x_1, · · · , x_n] x=[x1?,???,xn?]的情況下,抽樣多個文本片段 [ s 1 , ? ? ? , s m ] [s_1, · · · , s_m] [s1?,???,sm?],其中每個片段 s i s_i si?對應(yīng)于輸入文本 x x x中的一系列連續(xù)令牌 [ s i , 1 , . . . , s i , l i ] [s_{i,1}, ... , s_{i,l_i}] [si,1?,...,si,li??]。
每個片段用單個 [ M A S K ] [MASK] [MASK]令牌替換,形成一個損壞的文本 x c o r r u p t x_{corrupt} xcorrupt?。模型根據(jù)損壞的文本以自回歸方式預測片段中缺失的令牌,具體而言,模型在預測一個片段的缺失令牌時,可以訪問損壞的文本以及先前預測的片段。為了全面捕捉不同片段之間的相互依賴關(guān)系,我們隨機排列了片段的順序。這種自回歸空白填充目標通過引入二維位置編碼和允許以任意順序預測片段,改進了填充預訓練,并在 NLU 任務(wù)中相較于 BERT 和 T5 取得了性能提升。
具體而言,自回歸空白填充目標的最大化似然函數(shù)為:
其中, Z m Z_m Zm?是長度為 m m m的索引序列的所有可能排列的集合, s z < i s_{z<i} sz<i?為 [ s z 1 , ? ? ? , s z i ? 1 ] [s_{z_1}, · · · , s_{z_{i?1}}] [sz1??,???,szi?1??]。每個缺失令牌的生成概率在自回歸空白填充目標下,被分解為:
為了實現(xiàn)自回歸生成,將輸入 x x x劃分為兩部分:Part A 是損壞的文本 x c o r r u p t x_{corrupt} xcorrupt??,Part B 包含被掩蔽的片段。Part A 中的令牌可以互相關(guān)注,但不能關(guān)注 B 中的任何令牌。Part B 中的令牌可以關(guān)注 Part A 以及 B 中的先行令牌,但不能關(guān)注 B 中的任何后續(xù)令牌。為了實現(xiàn)自回歸生成,每個片段都用特殊令牌 [START] 和 [END] 進行填充,作為輸入和輸出。模型的實現(xiàn)如下圖所示:
這張圖片展示了GLM的預訓練流程。原始文本被抽樣為多個片段,其中的一些被[MASK]替換,然后進行自回歸生成。每個片段都以[S]開始,[E]結(jié)束。2D位置編碼用于表示片段的內(nèi)部和相互之間的位置關(guān)系。
我們通過從泊松分布中抽樣長度為 l i l_i li?的片段,反復抽樣新片段,直到至少 15% 的原始令牌被掩蔽,來確定片段的數(shù)量和長度。實驗證明,15% 的比例對于在下游 NLU 任務(wù)中取得良好性能至關(guān)重要。
多任務(wù)預訓練
在上述自回歸空白填充目標的基礎(chǔ)上,GLM 引入了多任務(wù)預訓練。我們考慮了兩個附加目標:
- 文檔級別目標: 通過抽樣一個長度在原始長度的50%–100%之間的單個片段,鼓勵模型進行長文本生成
- 句子級別目標: 限制必須為完整句子的掩蔽片段,以涵蓋原始令牌的15%。這個目標旨在處理通常需要生成完整句子或段落的 seq2seq 任務(wù)。
這兩個新目標都采用與原始目標相同的形式,但有不同數(shù)量和長度的片段。
模型架構(gòu)
GLM 使用單個 Transformer 模型,對其進行了幾處修改:
- 將層歸一化和殘差連接的順序重新排列,以避免大規(guī)模語言模型中的數(shù)值錯誤。
- 使用單個線性層進行輸出令牌預測。
- 將 ReLU 激活函數(shù)替換為 GeLU(Gaussian Error Linear Unit)。
2D 位置編碼
自回歸空白填充任務(wù)的一個挑戰(zhàn)是如何編碼位置信息。為了解決這個問題,GLM 引入了二維位置編碼。具體而言,每個令牌都用兩個位置 id 進行編碼。第一個位置 id 表示在損壞的文本 x c o r r u p t x_{corrupt} xcorrupt?中的位置,對于被替換的片段,它是相應(yīng) [ M A S K ] [MASK] [MASK] 令牌的位置。第二個位置 id 表示片段內(nèi)部的位置。對于 Part A 中的令牌,它們的第二個位置 id 為0;對于 Part B 中的令牌,它們的第二個位置 id 在1到片段長度之間。這兩個位置 id 通過可學習的嵌入表投影為兩個向量,然后與輸入令牌嵌入相加。
這種編碼確保了在模型重建片段時,模型不知道被替換片段的長度,這與其他模型不同。例如,XLNet 在推理時需要知道或枚舉答案的長度,而 SpanBERT 替換了多個 [ M A S K ] [MASK] [MASK]令牌并保持長度不變。
微調(diào) GLM
通常,對于下游 NLU 任務(wù),線性分類器將預訓練模型生成的序列或令牌表示作為輸入,并預測正確的標簽。我們將 NLU 分類任務(wù)重新構(gòu)造為空白填充任務(wù),通過 PET(Pattern-Exploiting Training)的方式,將輸入文本 x x x轉(zhuǎn)換為包含單個掩蔽令牌的填充問題 c ( x ) c(x) c(x)。這個填充模板以自然語言編寫,以表示任務(wù)的語義,例如,情感分類任務(wù)可以被構(gòu)造成“{SENTENCE}. It’s really [MASK]”。候選標簽 y ∈ Y y∈Y y∈Y也被映射到填充的答案,稱為 v e r b a l i z e r v ( y ) verbalizer v(y) verbalizerv(y)。在情感分類中,標簽“positive”和“negative”被映射為“good”和“bad”。給定 x x x的條件下預測 y y y的概率為:
微調(diào) GLM 采用交叉熵損失,具體形式如下圖所示:
對比
在這一節(jié)中,我們討論 GLM 與其他預訓練模型的差異,并關(guān)注它們?nèi)绾芜m應(yīng)下游空白填充任務(wù)。
與 BERT 的比較
與 BERT 不同,GLM 在 MLM 的獨立性假設(shè)下,無法捕捉掩蔽令牌之間的相互依賴關(guān)系。BERT 的另一個劣勢是,它不能很好地填充多個令牌的空白。為了推斷長度為 l l l的答案的概率,BERT 需要執(zhí)行 l l l個連續(xù)的預測。如果長度 l l l未知,可能需要枚舉所有可能的長度,因為 BERT 需要根據(jù)長度改變 [MASK] 令牌的數(shù)量。這是 GLM 改進的一個方面。
與 XLNet 的比較
GLM 和 XLNet 都是通過自回歸目標進行預訓練的,但它們之間存在兩個主要區(qū)別。首先,XLNet 在損壞之前使用原始位置編碼。在推斷時,我們需要知道或枚舉答案的長度,這與 BERT 有相同的問題。其次,XLNet 使用雙流自注意機制,而不是右移,以避免 Transformer 內(nèi)的信息泄漏。這導致了預訓練的時間成本加倍。
與 T5 的比較
T5 提出了一種類似的空白填充目標,以預訓練編碼器-解碼器 Transformer。T5 為編碼器和解碼器使用獨立的位置編碼,并依賴于多個 sentinel 令牌來區(qū)分被掩蔽的片段。在下游任務(wù)中,只使用其中一個 sentinel 令牌,導致模型容量的浪費和預訓練與微調(diào)之間的不一致性。此外,T5 總是按固定的從左到右順序預測片段,而 GLM 在 NLU 和 seq2seq 任務(wù)上可以使用更少的參數(shù)和數(shù)據(jù)獲得更好的性能。
與 UniLM 的比較
結(jié)合了不同的預訓練目標,通過在自動編碼框架中更改注意力掩碼,實現(xiàn)了在雙向、單向和交叉注意力之間的切換。然而,UniLM總是用[MASK]令牌替換掉掩蔽的片段,這限制了其建模掩蔽片段及其上下文之間依賴關(guān)系的能力。與之不同,GLM以自回歸的方式輸入前一個令牌并生成下一個令牌,提高了模型對片段和上下文之間依賴關(guān)系的建模能力。
UniLMv2在生成任務(wù)中采用了部分自回歸建模,同時在NLU任務(wù)中使用自動編碼目標。GLM通過自回歸預訓練來統(tǒng)一NLU和生成任務(wù),使其在兩者之間更加高效。