透過文本捕捉語言結構,進而建立一個統計機率模型,廣義而言就可以被稱作一種語言模型。本文主要介紹透過神經網路訓練出來的語言模型,以及常見 Transformer 語言模型的分類。
(Powered By Microsoft Designer)
Word Embedding 算是一種廣義的語言模型,目的是為了將離散的文字轉換成實數的向量,有了向量我們才能使用機器學習模型進行運算,因此可以把 Embedding Layer 視為一種把文字變成數字的過程。
在完整的語言模型架構裡面 Word Embedding 扮演很重要的角色,其建構的方式有很多種,傳統上有 Word2Vec 的 Skip-Gram 與 CBOW,以及 GloVe 和 fastText 等等。目前主流的方法則是在 Transformer 架構前面加上一個 Embedding Layer 並透過 Pretraining 訓練而來。
基本的 Word Embedding 本身通常是上下文無關的,這是一個相當重要的特性。也就是說這個詞的前後是什麼並不重要,他出來的 Embedding 都是固定的。因此訓練一個 Word Embedding 時,就是在訓練每個 Word 其獨立的語意。
這些獨立語意的向量,透過特定模型(例如 Transformer 之類的)的處理,這些原本離散的語意向量得以融入上下文資訊。這種充分考慮上下文語境的向量被稱之為 Sentence Embedding,其在資訊檢索領域相當有用,也是支撐現在 Knowledge-Based 生成式 IR 相當核心的技術之一,這部份會在未來的章節提及。
遞歸神經網路 (Recurrent Neural Network, RNN) 一種典型序列模型的代稱,被認為是用來處理具有時間相依性資料相當有效的模型,例如股市或氣象等領域。在 Deep Learning 剛開始盛行的時候,也很常見到使用 RNN 處理 NLP 領域的任務,將每個字詞視為一個時間單位來處理。
常見的 RNN 有 LSTM, GRU 等架構,他們通常會依序拜訪時間序列上的每個元素,並在每個時間點決定要「記憶」或「遺忘」某些前面的資訊,並不斷往下累積下去。這樣的想法相當直觀,但如此一來,前面的元素顯然參照不到什麼過往的資訊。於是透過雙向 (Bidirectional) 的技巧,不只從頭到尾拜訪一次,也從尾到頭拜訪一次,使模型對整體資料都有充足的理解。
這樣的模型也有不少缺點,其一是容易梯度爆炸或消失,因此要將 RNN 疊到很多層,其難度是很高的。雖然 LSTM 與 GRU 能夠減緩梯度的問題,但因為時間相依的特性,導致他很難進行平行運算,因此在訓練效能上有很大的瓶頸。尤其是 Transformer 模型出現之後,在 NLP 領域就越來越少見到 RNN 相關的研究了。
然而 RNN 的做法並沒有因此死透,近期的 RWKV-LM 就是一種 RNN + Transformer 的做法。這種架構保留了兩者的優點,例如更好的上下文理解能力與無限的文本長度等,也減少了傳統 Transformer 帶來的超膨脹記憶體消耗。
然而這種架構是否能在語言模型領域穩固其地位,目前尚難下定論。考慮到 GPT 其實也經過了長時間的發展才達到今日的成就,且 RWKV 的優點確實解決了許多 Transformer 的痛點,因此筆者認為這是一個值得持續關注的架構。
現在語言模型的主流架構是 Transformer 模型,其架構乍看之下似乎很複雜,但筆者喜歡將 Transformer 比喻為把 Linear Layers 疊的很華麗的模型。因為構成 Transformer 模型裡面很重要的 Attention 機制,其實本質上就是幾個 Linear Layer 的運算。而 Transformer 就是透過一堆 Attention Layers 疊起來的,所以說 Transformer 的本質,就是一個疊的比較華麗 Linear 模型。
筆者將 Attention 機制比喻成大家所熟悉的 Python 字典 (dict) 類別,我們將資訊存成 (Key, Value) Pairs 來建構字典,然後在字典裡面根據 Query 尋找一樣的 Key 並得到對應的 Value,這是一個非常直觀的查表法。
但是 Python 的字典必須要 Query 與 Key 完全相符合,然而在 Attention 機制裡面 Query 與 Key 是否相符,是透過模型訓練學得的。因此我們可以將 Attention 機制視為一種比較華麗的查表法,在 Transformer 裡面,所有的元素就是在瘋狂互相查表。
這邊要特別注意,在 Python 的字典裡面,一個 Query 只會找到一個 Value。但是在 Attention 機制裡面,一個 Query 會找到一堆 Value,而且這些 Value 各自會有各自的權重,這些權重分佈代表的是這個 Query 需要放多少注意力在這個 Value 上面,注意力機制這個名稱也是因此而來。
注意這些 Value 的目的,其實就是為了理解上下文對語境的影響。以翻譯任務為例,假設 Query 只關注到 "Cats" 時,可能只會得到「貓」這個詞。但如果 Query 關注到 "It rains cats and dogs" 時,就會得到「下大雨」的結果。
這是筆者對於 Attention 機制與 Transformer 架構比較通俗的比喻,然而 Transformer 本身其實並非真的是單純的線性模型。實際上其運作原理還是涉及了很多複雜的機制,例如不同的 Activation, Normalization, Positional Embedding 等等,這些機制不僅考量了應用階段的可用性,也考量了訓練階段的可行性。若想要更進一步瞭解,非常推薦從 Attention Is All You Need 這篇論文開始研究起。
雖然 Transformer 模型在文字領域上達到很好的效果,但其架構也帶來相當巨量的 GPU 記憶體消耗。除了會與 Batch Size 成線性成長以外,因為 Attention 會算出一個二維注意力權重的關係,所以隨著模型輸入長度越長,其記憶體消耗會呈現平方性的成長。因此如何克服模型輸入長度與膨脹的記憶體消耗,也是 Transformer 語言模型相當重要的課題之一。
談到 Transformer LM 時,大家經常會將其分為以下三類:
這是一個較為粗淺的分類,也有許多研究在挑戰跳脫以上三種架構的語言模型,但現在主流常用的 GPT, Llama 主要是 Decoder-Only 的類型。以下大致介紹這三類語言模型架構上的不同,與實際的應用場景。
Encoder LM 專注於分類型任務,例如情感分類、意圖偵測或實體辨識等等。其語言建模方式主要為 Masked Language Modeling (MLM),使用雙向 Transformer 的架構,能夠對上下文進行充分的理解,然後進行分類等。在許多自然語言理解任務上,這類模型都有相當不錯的效果。以現今的硬體效能而言,也是非常有效率的分類器。
因此我們可以將 Encoder LM 視為一位分類專家。
談到 Encoder LM 就會經常提到他的建模方法 Masked Language Modeling (MLM),這種建模方法首先隨機遮蔽 (Mask) 文本中的文字,並要求模型預測該文字為何。這樣的作法其優點之一,就是可以達到非監督式訓練的效果。只要寫個程式隨機遮蔽幾個字就好,完全不需要人工標記,也能讓模型學出相當理想的語言資訊。
其他建模方法還有 Next Sentence Prediction (NSP) 與 Sentence Order Prediction (SOP) 等等,有興趣的話,推薦從 BERT 或 ALBERT 的論文開始看起。
Encoder-Decoder 是一種 Seq2Seq 的模型,利用了 Encoder 能夠充分理解上下文的優點,結合擅長文本生成的 Decoder 形成的架構。經常用於機器翻譯、自動摘要等任務上,以 Google 翻譯為例,左邊的原文會輸入到 Encoder 裡面,對整份原文有了充分理解後,在由右邊的 Decoder 來輸出譯文。
因此我們可以將 Encoder-Decoder LM 視為一位翻譯或摘要專家。
著名的 Encoder-Decoder 模型有 Google 的 T5 與當時還叫做 Facebook 的 BART 等,其建模方式大概都是 Encoder 與 Decoder 各自建模方法的混合。
Decoder-Only LM 是一種專注於文本生成的語言模型架構。現今最火紅的 ChatGPT 以及在各研究單位之間非常盛行的 Llama 等,就是使用這種架構。其建模方式為 Causal Language Modeling (CLM) 因果建模。請注意,是 Causal 而不是 Casual 隨意的意思,筆者直到現在都還是很常拼錯 ((淚奔
但也因為 CLM 實在是太單純了,單純到讓人覺得很隨意 (?) 才會容易拼錯 ((藉口
其實 CLM 就是 Next Token Prediction 建模法,在訓練期間,透過不斷要求模型去預測下一個字詞是什麼來建模。這也是一種非監督式學習,僅需要大量文本即可訓練。
因此我們可以將 Decoder LM 視為一位文字接龍專家。
可以說這世界上沒有人比他還要會玩文字接龍,當時 GPT-2 的 Demo 網頁其實就只有展示文字接龍的功能。可以寫寫小說、寫寫新聞,但產生的內容都並非真實的內容,也不具備聊天對答的能力。那 OpenAI 到底是怎麼走到 ChatGPT 今天這個地位呢?有待未來的章節做介紹。
註:筆者當時沉迷於 GPT-2 Demo 好幾天,網址我還留著 https://talktotransformer.com/
,但現在連過去已經不是原本的 Demo 了,而是被轉址到某個做文本生成的網站,請謹慎進入。
以上是神經網路語言模型的一個概覽,希望能讓大家有初步的了解。從傳統的 Word Embedding 和 RNN 模型,到現在百花齊放的 Transformer 模型,不同的模型與架構都有其適用的場景。隨著技術不斷的發展,這些模型也都在持續進步當中。因為本系列文主題為 LLM 大型語言模型,所以未來的章節主要著重在 Decoder LM 上面。接下來會透過 ChatGPT 這個模型,來探討文字接龍大師是如何一步步邁向全能型人工智慧之路的。
真的寫得好棒,很淺顯易懂、深入淺出。而且看得出來你長期的投入(內力深厚)。
希望日後我們有機會可以互相認識。
感謝青睞!大大的 LangChain 文章也令小弟受益匪淺~