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