初探自然語言預訓練技術演進之路
人工智慧的三個層次:
運算職能:資料的儲存和運算能力,機器遠勝於人類。
感知功能:視覺、聽覺等能力,機器在語音辨識、影像辨識領域已經比肩人類。
認知智能:自然語言處理、常識建模與推理等任務,機器還有很長的路要走。
自然語言處理屬於認知智能範疇,由於自然語言具有抽象性、組合性、歧義性、知識性、演化性等特點,為機器處理帶來了極大的挑戰,有人將自然語言處理稱為人工智慧皇冠上的明珠。近年來,出現了以 BERT 為代表的預訓練語言模型,將自然語言處理帶入了一個新紀元:預訓練語言模型 特定任務精調。本文試圖整理自然語言預訓練技術的演進之路,以期和大家相互交流學習,不足、謬誤之處望批評指正。
1.古代- 詞表示
1.1 One-hot Encoding
用一個詞表大小的向量表示一個詞,其中詞對應位置的值為1,其餘位置為0。缺點:
- 高維稀疏性
- 無法表示語意相似性:兩個同義字的One-hot 向量相似度為0
1.2 分佈式表示
分佈式語意假設:相似的字有相似的上下文,字的語意可由上下文表示。基於該思想,可以利用每個詞的上下文分佈對詞進行表示。
1.2.1 詞頻表示
基於語料庫,利用詞的上下文來建立共現頻次表,詞表的每一行代表了一個詞的向量表示。透過不同的上下文選擇可以捕捉到不同的語言訊息,如用句子中詞的周圍固定窗口的詞作為上下文,會更多的捕捉到詞的局部信息:詞法、句法信息,若用所在文檔作為上下文,更多的捕捉到詞所表示的主題訊息。缺點:
- 高頻詞問題。
- 無法反應高階關係:(A, B) (B, C) (C, D) !=> (A, D)。
- 依然存在稀疏性問題。
1.2.2 TF-IDF表示
將詞頻表示中的值,替換為 TF-IDF,主要緩解詞頻表示的高頻詞問題。
1.2.3 點互資訊表示
同樣是緩解詞頻表示的高頻詞問題,將詞頻表示中的值替換為詞的點互資訊:
1.2.4 LSA
透過對詞頻矩陣進行奇異值分解(Singular Value Decomposition,SVD),可以得到每個字的低維、連續、稠密的向量表示,可認為表示了詞的潛在語義,該方法也被稱為潛在語義分析(Latent Semantic Analysis, LSA)。
LSA 緩解了高頻詞、高階關係、稀疏性等問題,在傳統機器學習演算法中效果還是不錯的,但是也存在一些不足:
- 當字表大時,SVD 速度比較慢。
- 無法追新,當語料改變或新增語料時,需要重新訓練。
2. 近代-靜態詞向量
#文本的有序性及詞與詞之間的共現關係為自然語言處理提供了天然的自監督學習訊號,使得系統無需額外的人工標註也能夠從文本中學到知識。
2.1 Word2Vec
2.1.1 CBOW
CBOW(Continous Bag-of-Words) 利用上下文(視窗)對目標字進行預測,將上下文的字的詞向量取算術平均,然後預測目標字的機率。
2.1.2 Skip-gram
Skip-gram 透過字預測上下文。
2.2 GloVe
GloVe(Global Vectors for Word Representation) 利用詞向量對詞的共現矩陣進行預測,實現了隱式的矩陣分解。首先根據詞的上下文視窗建構距離加權的共現矩陣 X,再利用詞與上下文的向量對共現矩陣 X 進行擬合:
損失函數為:
#2.3 小結
詞向量的學習利用了語料庫中詞與詞之間的共現訊息,底層思想仍是分佈式語意假設。無論是基於局部上下文的Word2Vec,還是基於顯式全局共現資訊的GloVe,本質都是將一個詞在整個語料庫中的共現上下文資訊聚合到該詞的向量表示中,並都取得了不錯的效果,訓練速度也很快,但是缺點詞的向量是靜態的,即不具備隨上下文變化而變化的能力。
3. 現代-預訓練語言模型
自迴歸語言模型:根據序列歷史計算當下時刻字詞的條件機率。
自編碼語言模型:透過上下文重構被遮罩的單字。
表示被遮罩的序列
3.1 基石-Transformer
3.1.1注意力模型
注意力模型可以理解為對一個向量序列進行加權操作的機制,權重的計算。
3.1.2 多頭自註意力
Transformer 中使用的注意力模型可以表示為:
當Q、K、V 來自同一向量序列時,成為自註意力模型。
多頭自註意力:設定多組自註意力模型,將其輸出向量拼接,並透過一個線性映射映射到 Transformer 隱層的維度大小。多頭自註意力模型,可以理解為多個自註意力模型的 ensemble。
3.1.3 位置編碼
由於自註意力模型沒有考慮輸入向量的位置訊息,但位置資訊對序列建模至關重要。可以透過位置嵌入或位置編碼的方式引入位置訊息,Transformer 裡使用了位置編碼的方式。
3.1.4 其他
此外 Transformer block 裡也使用了殘差連接、Layer Normalization 等技術。
3.1.5優缺點
優點:
- #相比RNN 能建模更遠距離的依賴關係,attention 機制將詞與詞之間的距離縮小為了1,因此對長序列資料建模能力更強。
- 比起 RNN 能更好的利用 GPU 平行運算能力。
- 表達能力強。
缺點:
- 比起 RNN 參數大,增加了訓練難度,需要更多的訓練資料。
3.2 自回歸語言模型
3.2.1 ELMo
ELMo: Embeddings from Language Models
輸入層
對詞可以直接用詞的embedding,也可以對詞中的字符序列通過CNN,或其他模型。
模型結構
ELMo 透過LSTM 獨立的建模前向、後向語言模型,前向語言模型:
後向語言模型:
優化目標
#最大化:
下游應用程式
ELMo 訓練好後,可以得到如下向量供下游任務使用。
是輸入層得到的 word embedding, 則是前、後向 LSTM 輸出拼接的結果。
下游任務使用時,可以加各層向量加權得到 ELMo 的一個向量表示,同時用一個權重對 ELMo 向量進行縮放。
不同層次的隱含層向量蘊含了不同層次或粒度的文字訊息:
- 頂層編碼了更多的語意訊息
- 底層編碼了更多的詞法、句法資訊
3.2.2 GPT 系列
GPT-1
模型結構
在GPT-1(Generative Pre-Training),是一個單向的語言模型,使用了12個transformer block 結構作為解碼器,每個transformer 區塊都是一個多頭的自註意力機制,然後透過全連接得到輸出的機率分佈。
- U: 字的獨熱向量
- We:字向量矩陣
- Wp:位置向量矩陣
最佳化目標
最大化:
下游應用
下游有監督任務的目標則是最大化:
GPT-2
GPT-2 的核心思想概括為:任何有監督任務都是語言模型的一個子集,當模型的容量非常大且資料量足夠豐富時,僅靠訓練語言模型的學習便可以完成其他有監督學習的任務。所以GPT-2 並沒有對GPT-1 的網路進行過多的結構的創新與設計,只是使用了更多的網路參數和更大的資料集,目標旨在訓練一個泛化能力更強的詞向量模型。
在8個語言模型任務中,僅僅透過zero-shot 學習,GPT-2 就有7個超過了當時state-of-the-art 的方法(當然好些任務上還是不如監督模型效果好)。 GPT-2 的最大貢獻是驗證了透過海量資料和大量參數訓練出來的詞向量模型有遷移到其它類別任務中而不需要額外的訓練。
同時 GPT-2 顯示隨著模型容量和訓練資料量(質量)的增大,其潛能還有進一步開發的空間,基於這個思想,誕生了 GPT-3。
GPT-3
依舊模型結構沒啥變化,增加模型容量、訓練資料量及質量,號稱巨無霸,效果也很好。
小結
從GPT-1 到GPT-3,隨著模型容量和訓練資料量的增加,模型學到的語言知識也越豐富,自然語言處理的典範也從「預訓練模型精進」逐步轉向「預訓練模型zero-shot/few-shot learning」。 GPT 的缺點是用的單向語言模型,BERT 已經證明了雙向語言模型能提升模型效果。
3.2.3 XLNet
XLNet 透過排列語言模型(Permutation Language Model) 引入了雙向的上下文信息,不引入特殊的tag,避免了預訓練和精調階段token 分佈不一致的問題。同時使用 Transformer-XL 作為模型主體結構,對長文字有更好的效果。
排列語言模型
排列語言模型的目標是:
#是文字序列所有可能的排列集合。
雙流自註意力機制
- 雙流自註意力機制(Two-stream Self-attention)要達到的目的:透過改造Transformer,在輸入正常文字序列的情況下,實作排列語言模型:
- 內容表示:包含的資訊
- #查詢表示:只包含的資訊
此方法使用了預測詞的位置資訊。
下游應用程式
下游任務應用程式時,不需要查詢表示,也不 mask。
3.3 自編碼語言模型
3.3.1 BERT
掩碼語言模型
掩碼語言模型(masked language model, MLM),隨機地屏蔽部分詞,然後利用上下文資訊進行預測。 MLM 有個問題,預訓練和 fine-tuning 之間不匹配,因為在 fine-tuning 期間從未看到 [MASK] token。為了解決這個問題,BERT 並不總是用實際的 [MASK] token 替換被“masked”的 word piece token。訓練資料產生器隨機選擇15%的 token,然後:
- 80%的機率:用 [MASK] 標記替換。
- 10%的機率:從詞表隨機一個 token 替換。
- 10%的機率:token 保持不變。
原生 BERT 裡對 token 進行 mask,可以對整字或片語(N-Gram)進行 mask。
下一句預測
下一句預測(NSP):當選擇句子A 和B 作為預訓練樣本時,B 有50%的可能是A 的下一個句子,也有50%的可能是來自語料庫的隨機句子。
輸入層
模型結構
#經典的「預訓練模型精調」的範式,主題結構是堆疊的多層Transformer。
3.3.2 RoBERTa
RoBERTa(Robustly Optimized BERT Pretraining Approach) 並沒有大刀闊斧的改進 BERT,而只是針對 BERT 的每一個設計細節進行了詳盡的實驗找到了 BERT 的改進空間。
- 動態遮罩:原始方式是建立資料集的時候設定好掩碼並固定,改進方式是每輪訓練將資料輸入模型的時候才進行隨機掩碼,增加了資料的多樣性。
- 捨棄 NSP 任務:以實驗證明不使用 NSP 任務對大多數任務都能提升效能。
- 更多訓練數據,更大批次,更長的預訓練步數。
- 更大的詞表:使用 SentencePiece 這種位元組層級的 BPE 字表而不是 WordPiece 字元層級的 BPE 字表,幾乎不會出現未登入字的情況。
3.3.3 ALBERT
BERT 參數量相對較大,ALBERT(A Lite BERT) 主要目標是減少參數:
- BERT 的詞向量維度和隱含層維度相同,詞向量上下文無關,而BERT 的Transformer 層需要並且可以學習充分的上下文訊息,因此隱含層向量維度應遠大於詞向量維度。當增大提高效能時,沒有必要跟著變大,因為詞向量空間對需要嵌入的資訊量可能已經足夠。
- 方案:,字向量透過全連接層轉換為H維。
- 字向量參數分解(Factorized embedding parameterization)。
- 跨層參數共享(Cross-layer parameter sharing):不同層的Transformer block 共享參數。
- 句子順序預測(sentence-order prediction, SOP),學習細微的語意差異及語篇連貫性。
3.4 生成式對抗- ELECTRA
ELECTRA(Efficiently Learning an Encoder that Classifies Token Replacements Accurately) 引入了生成器和判別器的模式,把生成式的Masked language model (MLM) 預訓練任務改成了判別式的Replaced token detection(RTD) 任務,判斷當前token 是否被語言模型取代過,比較類似GAN 的想法。
產生器預測輸入文字中mask 位置的token:
- 生成器和判別器分別是一個BERT,縮放了生成器BERT 參數。
- 字向量參數分解。
- 生成器和判別器參數共享:輸入層參數共享,包括詞向量矩陣和位置向量矩陣。
片段遞歸的另一個好處是帶來的推理速度的提升,對比Transformer 的自回歸架構每次只能前進一個時間片,Transfomer-XL 的推理過程通過直接復用上一個片段的表示而不是從頭計算,將推理過程提升到以片段為單位進行推理。
3.5.2 相對位置編碼
在Transformer 中,自註意力模型可以表示為:
的完整運算式為:
#Transformer 的問題是無論第幾個片段,它們的位置編碼 都是一樣的,也就是說Transformer的位置編碼是相對於片段的絕對位置編碼(absulate position encoding),與當前內容在原始句子中的相對位置是沒有關係的。
Transfomer-XL 在上式的基礎上做了若干變化,得到了下面的計算方法:
- ##變化1:中,被拆分成立和,也就是說輸入序列和位置編碼不再共享權值。
- 變化2:中,絕對位置編碼取代為了相對位置編碼
- 變化3:中引入了兩個新的可學習的參數來取代和 Transformer 中的 query 向量 。表示對於所有的 query 位置對應的 query 位置向量是相同的。即無論 query 位置如何,不同字的注意偏差都保持一致。
- 改進之後,各部分的意義:
- 基於內容的相關度(): 計算query 與key 的內容之間的關聯資訊
- #內容相關的位置偏移():計算query 的內容和key 的位置編碼之間的關聯資訊
- 全域內容偏移():計算query 的位置編碼和key 的內容之間的關聯資訊
- 全域位置偏移():計算query 和key 的位置編碼之間的關聯資訊
DistillBert 的學生模型:
- 六層的 BERT, 同時去掉了標記類型向量 (Token-type Embedding, 即Segment Embedding)。
- 使用教師模型的前六層進行初始化。
- 只使用掩碼語言模型進行訓練,沒有使用 NSP 任務。
教師模型: BERT-base:
#損失函數:
有監督MLM 損失:利用掩碼語言模型訓練得到的交叉熵損失:- 表示第一個類別的標籤,表示學生模型第一個類別輸出的機率。
- 蒸餾MLM損失:利用教師模型的機率作為指導訊號,與學生模型的機率計算交叉熵損失:
- 和分別表示教師模型和學生模型最後一層的隱含層輸出。
- 最終的損失:
#4. 參考資料
#https ://www.php.cn/link/6e2290dbf1e11f39d246e7ce5ac50a1e
#https://www.php.cn/link/664c7298d2b73b3c7fe2d1e81/664c7298d2b73b3c7fe2d1e81112d
https://www.php.cn/link/67b878df6cd42d142f2924f3ace85c78https://www.php.cn/link/f6a673f09493https://www.php.cn/link/f6a673f09493afhttps://www.php.cn/link/f6a673f09493afco
https://www.php.cn/link/82599a4ec94aca066873c99b4c741ed8
##https://www. php.cn/link/2e64da0bae6a7533021c760d4ba5d621
#https://www.php.cn/link/56d33021e640f5d#> #https://www.php.cn/link/4e38d30e656da5ae9d3a425109ce9e04
##https://www.php.cn/link/c055dcc749c2632fdhttps://www.php.cn/link/c055dcc749c2632fdhttps://www.php.cn/link/c055dcc749c2632fdhttps://www.php.cn/link/c055dcc749c2632fd4806301
https://www.php.cn/link/a749e38f556d5eb1dc13b9221d1f994f
#https://www.php.cn/link /8ab9bb97ce35080338be74dc6375e0ed
https://www.php.cn/link/4f0bf7b7b1aca9ad15317a0b4efdca14
https:/ /www.php.cn/link/b81132591828d622fc335860bffec150
#https://www.php.cn/link/fca758e52635df5a640f7063#https://www.php.cn/link/5112277ea658f7138694f079042cc3bb
https://www.php.cn/link/257deb66f5366ahttps://www.php.cn/link/257deb66f5366ahttps://www.php.cn/link/257deb66f5366a231d
##https://www.php.cn/link/b18e8fb514012229891cf024b6436526
##https://www.php. cn/link/836a0dcbf5d22652569dc3a708274c16
############' https://www.php.cn/link/831b342d8a83408e5960e9b0c5f31f0c##############https://www.php.cn/link/6b27e88fdd7269394bcaddf4bcn/link/6b27e88fdd7269394bcaddf4b. ######https://www.php.cn/link/682e0e796084e163c5ca053dd8573b0c#############https://www.php.cn/link/9739efc4f#######https://www.php.cn/link/9739efc4f0129276483c #############https://www.php.cn/link/b93e78c67fd4ae3ee626d8ec0c412dec#############https://www .php.cn/link/c8cc6e90ccbff44c9cee23611711cdc4#######以上是初探自然語言預訓練技術演進之路的詳細內容。更多資訊請關注PHP中文網其他相關文章!

熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

AI Hentai Generator
免費產生 AI 無盡。

熱門文章

熱工具

記事本++7.3.1
好用且免費的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強大的PHP整合開發環境

Dreamweaver CS6
視覺化網頁開發工具

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)

熱門話題

在自然語言生成任務中,取樣方法是從生成模型中獲得文字輸出的一種技術。這篇文章將討論5種常用方法,並使用PyTorch進行實作。 1.GreedyDecoding在貪婪解碼中,生成模型根據輸入序列逐個時間步地預測輸出序列的單字。在每個時間步,模型會計算每個單字的條件機率分佈,然後選擇具有最高條件機率的單字作為當前時間步的輸出。這個單字成為下一個時間步的輸入,生成過程會持續直到滿足某種終止條件,例如產生了指定長度的序列或產生了特殊的結束標記。 GreedyDecoding的特點是每次選擇當前條件機率最

語言模型是對文字進行推理的,文字通常是字串形式,但模型的輸入只能是數字,因此需要將文字轉換成數字形式。 Tokenization是自然語言處理的基本任務,根據特定需求能夠把一段連續的文字序列(如句子、段落等)切分為一個字元序列(如單字、片語、字元、標點等多個單元),其中的單元稱為token或詞語。根據下圖所示的具體流程,首先將文字句子切分成一個個單元,然後將單元素數值化(映射為向量),再將這些向量輸入到模型進行編碼,最後輸出到下游任務進一步得到最終的結果。文本切分依照文本切分的粒度可以將Toke

編輯|ScienceAI問答(QA)資料集在推動自然語言處理(NLP)研究中發揮著至關重要的作用。高品質QA資料集不僅可以用於微調模型,也可以有效評估大語言模型(LLM)的能力,尤其是針對科學知識的理解和推理能力。儘管目前已有許多科學QA數據集,涵蓋了醫學、化學、生物等領域,但這些數據集仍有一些不足之處。其一,資料形式較為單一,大多數為多項選擇題(multiple-choicequestions),它們易於進行評估,但限制了模型的答案選擇範圍,無法充分測試模型的科學問題解答能力。相比之下,開放式問答

2018年Google發布了BERT,一經面世便一舉擊敗11個NLP任務的State-of-the-art(Sota)結果,成為了NLP界新的里程碑;BERT的結構如下圖所示,左邊是BERT模型預訓練過程,右邊是對於具體任務的微調過程。其中,微調階段是後續用於一些下游任務的時候進行微調,例如:文本分類,詞性標註,問答系統等,BERT無需調整結構就可以在不同的任務上進行微調。透過」預訓練語言模型+下游任務微調」的任務設計,帶來了強大的模型效果。從此,「預訓練語言模型+下游任務微調」便成為了NLP領域主流訓

編譯|星璇出品|51CTO技術堆疊(微訊號:blog51cto)在過去的兩年裡,我更參與了使用大型語言模型(LLMs)的生成AI項目,而非傳統的系統。我開始懷念無伺服器雲端運算。它們的應用範圍廣泛,從增強對話AI到為各行各業提供複雜的分析解決方案,以及其他許多功能。許多企業將這些模型部署在雲端平台上,因為公有雲供應商已經提供了現成的生態系統,而且這是阻力最小的路徑。然而,這並不便宜。雲端還提供了其他好處,如可擴展性、效率和高階運算能力(按需提供GPU)。在公有雲平台上部署LLM的過程有一些鮮為人知的

自然語言生成是一種人工智慧技術,它能夠將資料轉換為自然語言文字。在當今的大數據時代,越來越多的業務需要將資料視覺化或呈現給用戶,而自然語言生成正是一種非常有效的方法。 PHP是一種非常受歡迎的伺服器端腳本語言,它可以用來開發網頁應用程式。本文將簡要介紹如何使用PHP進行基本的自然語言生成。引入自然語言生成庫PHP自帶的函數庫並不包括自然語言生成所需的功能,因此

隨著語言模型擴展到前所未有的規模,對下游任務進行全面微調變得十分昂貴。為了解決這個問題,研究人員開始注意並採用PEFT方法。 PEFT方法的主要想法是將微調的範圍限制在一小部分參數上,以降低計算成本,同時仍能實現自然語言理解任務的最先進性能。透過這種方式,研究人員能夠在保持高效能的同時,節省運算資源,為自然語言處理領域帶來新的研究熱點。 RoSA是一種新的PEFT技術,透過在一組基準測試的實驗中,發現在使用相同參數預算的情況下,RoSA表現出優於先前的低秩自適應(LoRA)和純稀疏微調方法。本文將深

一篇新論文的作者提出了一種「強化」代碼生成的方法。程式碼生成是人工智慧中一項日益重要的能力。它透過訓練機器學習模型,根據自然語言描述自動產生電腦程式碼。這項技術具有廣泛的應用前景,可以將軟體規格轉化為可用的程式碼,自動化後端開發,並協助人類程式設計師提高工作效率。然而,產生高品質程式碼對AI系統仍然具有挑戰性,與翻譯或總結等語言任務相比。程式碼必須準確地符合目標程式語言的語法,能夠優雅地處理各種極端情況和意外輸入,並精確地處理問題描述中的許多小細節。即使是其他領域看似無害的小錯誤也可能完全破壞程式的功能,導
