ChatGPT(Chat Generative Pre-training Transformer) 是一個 AI 模型,屬於自然語言處理( Natural Language Processing , NLP ) 領域,NLP 是人工智慧的一個分支。所謂自然語言,就是人們日常生活中
接觸和使用的英語、中文、德語等等。自然語言處理是指,讓電腦來理解並正確地操作自然語言,完成人類指定的任務。 NLP 中常見的任務包括文本中的關鍵字抽取、文字分類、機器翻譯等等。
NLP 當中還有一個非常困難的任務:對話系統,也可被籠統稱為聊天機器人,正是 ChatGPT 所完成的工作。
自從1950 年代出現電腦以來,人們就已經開始著手研究讓電腦輔助人類理解、處理自然語言,這也是NLP 這一領域的發展目標,最著名的當屬圖靈測試。
1950年,電腦之父——艾倫·圖靈(Alan Turing)介紹了一項測試,以檢查機器是否能像人類一樣思考,這項測試稱為圖靈測試。它具體的測試方法和目前ChatGPT 的方式一模一樣,即構建一個電腦對話系統,一個人和被測試的模型互相進行對話,如果這個人無法辨別對方究竟是機器模型還是另一個人,就說明該模型通過了圖靈測試,電腦是智慧的。
長久以來,圖靈測驗都被學界認為是難以攀登的巔峰。正因如此,NLP 也被稱為人工智慧皇冠上的明珠。而 ChatGPT 所能夠做的工作,已經遠遠超出了聊天機器人這個範疇,它能夠根據用戶的指令寫文章,回答技術問題,做數學題,做外文翻譯,玩文字遊戲等等。所以,某種程度上,ChatGPT 已經摘下了這顆皇冠上的明珠。
ChatGPT 的工作形式非常簡單,使用者向 ChatGPT 提問任何一個問題,模型都會做出解答。
其中,使用者的輸入和模型的輸出都是文字形式。一次使用者輸入和一次模型對應的輸出,叫做一輪對話。我們可以把ChatGPT 的模型抽象化成如下流程:
此外,ChatGPT 也可以回答使用者的連續提問,也就是多輪對話,多輪對話之間是有資訊關聯的。其具體的形式也非常簡單,第二次使用者輸入時,系統預設把第一次的輸入、輸出資訊都拼接在一起,供 ChatGPT 參考上次對話的資訊。
如果使用者與 ChatGPT 對話的輪次過多,一般來講模型只會保留最近幾輪對話的訊息,此前的對話訊息將被遺忘。
ChatGPT 在接收到使用者的提問輸入後,輸出的文字並不是一口氣直接產生的,而是一個字、一個字產生的,這種逐字生成,即生成式(Generative) 。如下圖所示。
當使用者輸入問句:“你喜歡蘋果還是香蕉?”,ChatGPT 接收到資料之後,首先會產生一個“我”字,然後,模型會綜合使用者的問句和產生的「我」字,繼續產生下一個字「喜」。以此類推,直到產生一個完整的句子「我喜歡蘋果。」。
前面介紹了 ChatGPT 的建模形式,可以試想一下,如果讓你來實作一個 ChatGPT 模型,有哪些想法和方法呢?事實上,大致上有兩種策略,基於規則的 NLP 和基於統計的 NLP。自從 ChatGPT 開始,NLP 領域又進入了強化學習時代,也就是基於強化學習的 NLP。
基於規則的 NLP,是指使用手動編寫的規則來處理自然語言。這些規則通常是基於語法、語意和語用等方面的知識,可以用來解析和產生自然語言。例如,我們可以基於以下規則設計一個對話系統:
規則1:當模型接收到使用者的問句後,把問句中的「嗎」字去掉,「?」換成“。”
規則2:把“你”換成“我”,“我”字換成“你”
#由此,我們可以根據這些規則,製作一個對話模型,開啟對話模式了。
使用者:Hello。模型:Hello。使用者:你是 ChatGPT 嗎? 模型:是的,我是 ChatGPT。使用者:你喜歡掘金社群嗎?模型:我喜歡掘金社區。使用者:你有使用過jionlp工具包嗎? 模型:我曾使用過jionlp工具包。
以上是一個基於規則的非常粗淺的對話系統範例。其中存在的問題,相信讀者能夠輕易找出來。如果使用者問題太複雜了怎麼辦?問題中沒有加問號怎麼辦?我們需要不斷寫出各種規則來覆蓋上面的特殊情況。這說明基於規則有幾個明顯的缺點:
這就是 NLP 發展早期的方式方法:基於規則完成模型系統建構。在早期,一般也被稱為符號主義。
基於統計的 NLP 則是利用機器學習演算法從大量的語料庫中學習自然語言的規律特徵,在早期也被稱為連結主義。這種方法不需要人工編寫規則,規則主要透過學習語言的統計特徵,隱含在模型中。換句話說,基於規則的方法中,規則是顯性的,人工編寫的;基於統計的方法中,規則是隱形的,隱含在模型參數中,由模型根據資料訓練得到。
這些模型,在近年來發展迅速,ChatGPT 就是其中一種。除此之外,還有各式各樣不同形態構造的模型,其根基原理是相同的。它們的處理方式主要如下:
訓練模型=> 利用已訓練好的模型進行工作
在ChatGPT 中,主要採用預訓練( Pre-training ) 技術來完成基於統計的NLP 模型學習。最早,NLP 領域的預訓練是由 ELMO 模型(Embedding from Language Models)首次引進的,後續 ChatGPT 等各種深度神經網路模型廣泛採用了這種方式。
它的重點在於,根據大規模原始語料學習一個語言模型,而這個模型並沒有直接學習如何解決具體的某種任務,而是學習從語法、詞法、語用,到常識、知識等訊息,把它們融匯在語言模式中。直觀地講,它更像是知識記憶器,而非運用知識解決實際問題。
預訓練的好處很多,它已經成為了幾乎所有 NLP 模型訓練的必備步驟。我們將在後續章節展開講。
基於統計的方法遠遠比基於規則的方法受歡迎,然而它最大的缺點是黑盒不確定性,即規則是隱形的,隱含在參數中。例如,ChatGPT 也會給出一些模稜兩可、不知所雲的結果,我們無從以結果來判斷模型為何給出這樣的答案。
ChatGPT 模型是基於統計的,然而它又利用了新的方法,帶人工回饋的強化學習(Reinforcement Learning with Human Feedback,RLHF) ,以此取得了卓越的效果,把NLP 的發展帶入了一個新階段。
幾年前,Alpha GO 擊敗了柯潔。這幾乎可以說明,強化學習如果在適合的條件下,完全可以打敗人類,逼近完美的極限。目前,我們依然處在弱人工智慧時代,但侷限於圍棋這個領域,Alpha GO 是強人工智慧,它的核心就在於強化學習 。
所謂強化學習,就是一種機器學習的方法,旨在讓智能體(agent,在NLP 中主要指深度神經網路模型,就是ChatGPT 模型)透過與環境的互動來學習如何做出最優決策。
這種方式就像是訓練一隻狗(智能體)聽哨聲(環境)進食(學習目標)。
一隻小狗,當聽到主人吹哨後,就會被獎勵食物;而當主人不吹哨時,小狗隻能挨餓。透過反覆的進食、挨餓,小狗就能建立起相應的條件反射,實際上就是完成了一次強化學習。
而在 NLP 領域,這裡的環境要複雜得多。針對 NLP 模型的環境並非真正的人類語言環境,而是人為建構出來的語言環境模型。因此,這裡強調是帶人工回饋的強化學習。
基於統計的方式能夠讓模型以最大自由度去擬合訓練資料集;而強化學習就是賦予模型更大的自由度,讓模型能夠自主學習,突破既定的資料集限制。 ChatGPT 模型是融合統計學習方法和強化學習方法的,它的模型訓練流程如下圖所示:
這部分訓練流程將在第8-11 節展開講。
實際上,基於規則、基於統計、基於強化學習 這 三種方式,並不僅僅是一種處理自然語言的手段,而是一種思想。一個解決某一問題的演算法模型,往往是融合了這三種解決想法的產物。
如果把電腦比喻成小孩,自然語言處理就像是由人類來教育小孩成長。
基於規則的方式,就好比家長 100% 控制小孩,要求他按照自己的指示和規則行事,如每天規定學習幾小時,教會小孩每一題。整個過程,強調的是手把手教,主動權和重心都在家長身上。對 NLP 而言,整個過程的主動權和重心,都在編寫語言規則的程式設計師、研究員身上。
基於統計的方式,就好比家長只告訴小孩學習方法,而不教授具體每一題,強調的是半引導。對 NLP 而言,學習重心放在神經網路模型上,但主動權仍由演算法工程師控制。
基於強化學習的方式,則好比家長只對小孩制定了教育目標,比如,要求小孩能夠考試達到90 分,但並不去管小孩他是如何學習的,全靠自學完成,小孩擁有極高的自由度和主動權。家長只對最終結果做出相應的_獎勵或懲罰_,不參與整個教育過程。對 NLP 來說,整個過程的重點與主動權都在於模型本身。
NLP 的發展一直以來都在逐漸向基於統計的方式靠攏,最終由基於強化學習的方式取得完全的勝利,勝利的標誌,即 ChatGPT 的問世;而基於規則方式逐漸式微,淪為了一種輔助式的處理手段。 ChatGPT 模型的發展,從一開始,就在堅定不移地沿著讓模型自學的方向發展進步。
前面的介紹中,為了方便讀者理解,沒有提 ChatGPT 模型內部的具體構造。
ChatGPT 是一個大型的神經網絡,其內部結構是由若干層 Transformer 構成的,Transformer 是一種神經網路的結構。自從 2018 年開始,它就已經成為了 NLP 領域的一種通用的標準模型結構,Transformer 幾乎遍布各種 NLP 模型之中。
如果說,ChatGPT 是一棟房子的話,那麼,Transformer 就是建造 ChatGPT 的磚塊。
Transformer 的核心是自註意力機制(Self-Attention),它可以幫助模型在處理輸入的文字序列時,自動地關注與當前位置字元相關的其他位置字元。自註意力機制可以將輸入序列中的每個位置都表示為向量,這些向量可以同時參與計算,從而實現高效的平行計算。舉一個例子:
在機器翻譯中,在將英文句子"I am a good student" 翻譯成中文時,傳統的機器翻譯模型可能會將其翻譯成"我是一個好學生",但是這個翻譯結果可能不夠準確。英文中的冠詞“a”,在翻譯為中文時,需要結合上下文才能確定。
而使用 Transformer 模型進行翻譯時,可以得到更準確的翻譯結果,例如 "我是個好學生"。
這是因為 Transformer 能夠更好地捕捉英文句子中,跨越很長距離的詞彙之間的關係,解決文本上下文的長依賴。自註意力機制將在第 5-6 節展開介紹,Transformer 結構詳解將在第 6-7 節展開介紹。
以上是大家都懂ChatGPT第一章:ChatGPT 與自然語言處理的詳細內容。更多資訊請關注PHP中文網其他相關文章!