最近ChatGPT可以說是火遍了全世界,作為由知名人工智能研究機構OpenAI于2022年11月30日發布的一個大型語言預訓練模型,他的核心在于能夠理解人類的自然語言,并使用貼近人類語言風格的方式來進行回復。模型開放使用以來,在人工智能領域引起了巨大的轟動,也成功火出了技術圈。從數據上看,ChatGPT用戶數在5天內就達到了100萬,2個月就達到了1億;另外,在很多非人工智能領域,已經有機構在嘗試用ChatGPT去做一些智能生成的事。例如財通證券發布了一篇由ChatGPT生成的行業研報,從研報的可讀性和專業性上來看,雖然在細節上有很多需要推敲的地方,但是整體框架內容已經比較成熟。對于其他內容生產者來說,應用ChatGPT也能夠提升個人的生產效率。
ChatGPT的強大能力是顯而易見的,但對于人工智能領域不太熟悉的人,對這種黑盒的技術仍然會擔憂或者不信任。恐懼通常來自于不了解,因此本文將為大家全面剖析ChatGPT的技術原理,盡量以簡單通俗的文字為大家解惑。
通過本文,你可以有以下收獲:
1、知道ChatGPT是什么
2、ChatGPT有哪些核心要素
3、ChatGPT能做哪些事
4、ChatGPT不能做哪些事
ChatGPT是什么?
上文說到ChatGPT實際上是一個大型語言預訓練模型(即Large Language Model,后面統一簡稱LLM)。什么叫LLM?LLM指的是利用大量文本數據來訓練的語言模型,這種模型可以產生出強大的語言關聯能力,能夠從上下文中抽取出更多的信息。其實語言模型的研究從很早就開始了,隨著算力的發展和數據規模的增長,語言模型的能力隨著模型參數量的增加而提升。下圖分別展示了LLM在參數量和數據量上的進化情況,其中數據量圖例展示的是模型在預訓練過程中會見到的token數量,對于中文來說一個token就相當于一個中文字符。
https://www.vinayiyengar.com/2022/08/04/the-promise-and-perils-of-large-language-models/
https://babylm.github.io/
為什么語言模型的參數量和數據量會朝著越來越大的方向發展呢?在早些時間的一些研究已經證明,隨著參數量和訓練數據量的增大,語言模型的能力會隨著參數量的指數增長而線性增長,這種現象被稱為Scaling Law(下圖左例)。但是在2022年之后,隨著進來對大模型的深入研究,人們發現當模型的參數量大于一定程度的時候,模型能力會突然暴漲,模型會突然擁有一些突變能力(Emergent Ability,下圖右例),如推理能力、零樣本學習能力等(后面均會介紹)。
https://franxyao.github.io/blog.html
ChatGPT真正強大的地方在于他除了能夠充分理解我們人類的問題需求外,還能夠用流暢的自然語言進行應答,這是以前的語言模型不能實現的。下面,本文將ChatGPT一分為二,分別從GPT和Chat兩個維度來介紹ChatGPT的機理。值得說明的是:當前OpenAI并未放出ChatGPT相關的訓練細節和論文,也沒有開源代碼,只能從其技術BLOG上獲取其大致的訓練框架和步驟,因此本文介紹的內容將根據后續實際發布的官方細節而更新。
GPT
GPT全稱Generative Pre-training Transformer,由Google在2018年提出的一種預訓練語言模型。他的核心是一個Transformer結構,主要基于注意力機制來建模序列中不同位置之間的關聯關系,最后可用于處理序列生成的任務。通過使用大量的文本數據,GPT可以生成各種各樣的文本,包括對話、新聞報道、小說等等。上面提到了很多次語言模型,這里簡單給出語言模型主要的涵義:
給定已知的token序列N_t(對中文來說是字符,對英文來說可能是單詞或者詞根),通過語言模型來預測t+1位置上的token是什么。實際上模型輸出的是所有token在t+1位置上的概率向量,然后根據概率最大的準則選擇token。大家在使用ChatGPT的時候,一定有發現機器人在生成回復的時候是一個字一個字的順序,背后的機制就是來自于這邊。
cs224n(https://web.stanford.edu/class/cs224n/slides/cs224n-2023-lecture11-prompting-rlhf.pdf)
對語言模型來說,可能大家之前更熟悉的是BERT,BERT是Google在2018年發布的一種雙向語言模型,發布后,其在不同語言理解類任務(如文本分類,信息抽取,文本相似度建模)中都達到了當期時間節點的最好效果。BERT與上述語言模型的機理有所不同,其訓練任務相當于讓模型去做完形填空任務(官方稱為Masked Language Model任務,下文簡稱MLM),并不是遵循文本一個接一個預測的順序,其模型機制與人類溝通表達的習慣不太符合。圖中左半部分是BERT的示意圖,右半部是GPT的示意圖,Trm為一個Transformer模型組件,E為輸入的token序列,T為模型生成的token序列。其中,實線部分為該位置的Trm能夠看到哪些其他位置token的上下文知識。可以看到,對于BERT來說,每個位置上的Trm都能看到任意位置的上下文知識,因此其在具體的自然語言理解任務上會有不錯的效果。而GPT則是遵循傳統語言模型的模式,例如index=1位置的Trm是無法看到index>1的知識的,因此它在自然語言理解任務上的效果不如BERT,但是在生成任務上會更符合人類的直覺。業界把BERT中的MLM模式稱為自編碼形式(auto-encoding),把GPT的模式稱為自回歸形式(auto-regressive)。
https://arxiv.org/abs/2302.09419
大家從BERT和GPT的對比中可以看到,BERT在語言理解上似乎更具優勢,那為何現在ChatGPT的模型基座是GPT呢?這就涉及到最近兩年逐漸清晰的NLP任務大一統趨勢了。
NLP任務大一統
基于MLM訓練范式得到的BERT模型雖然在很多語言理解類任務上有不錯的效果下游任務,之后整個業界在處理NLP任務的時候通常會遵循預訓練模型→下游任務finetune的流程:
這種方式與傳統的training from scratch相比,對下游任務數據的需求量更少,得到的效果也更優。不過,上述方式還是存在一些問題:
處理一個新的任務就需要標注新的語料,對語料的需求比較大,之前已經做過的任務語料無法高效利用。即使是信息抽取下面的不同任務(如實體識別和關系抽取兩個任務)也無法通用化。
處理一個新的任務需要針對任務特性設計整體模型方案,雖然BERT模型的底座已經確定,但還是需要一定的設計工作量。例如文本分類的任務和信息抽取的任務的模型方案就完全不同。
對于要走向通用人工智能方向的人類來說,這種范式很難達到通用,對每個不同任務都用單獨的模型方案和數據來訓練顯然也是低效的。因此,為了讓一個模型能夠盡量涵蓋更多的任務,業界嘗試了幾種不同的路徑來實現這個目標。
對BERT中的MLM進行改造,如引入一些特殊的Mask機制,使其能夠同時支持多種不同任務,典型的模型如UniLM(https://arxiv.org/abs/1905.03197)
引入額外的Decoder,將BERT優化改造成能做生成式的模型,典型的工作有BART(https://arxiv.org/abs/1910.134611),T5(https://arxiv.org/pdf/1910.10683.pdf3.pdf333),百度的UIE(將任務設計生成text-to-structure的形式實現信息抽取的大一統 )。我對T5比較熟悉,之前也寫過相關的分析,這個工作算是比較早地嘗試將不同任務通過文本生成的方式進行大一統。如圖所示,T5訓練時直接輸入了不同下游NLP任務的標注數據,通過在原始文本的前端添加任務的提示文本,來讓模型學習不同任務的特性。如翻譯任務可以是”translate English to German”,分類任務可以是跟具體分類目標有關如”cola sentence”,也可以是一種摘要任務”summarize”。
怎么樣,是不是覺得跟ChatGPT的模式有相似的地方?
這種方式可以同時利用多種NLP任務相關的公開數據集,一下子就把預訓練任務從語言模型擴展到了更多任務類型中,增強了模型的通用性以及對下游任務的理解能力。
T5數據構建實例
除了上面兩種方式外,還有其他改造BERT的方法就不窮舉了,如蘇神通過Gibbs采樣來實現BERT模型的文本生成等。(https://kexue.fm/archives/8119)
雖然有很多大一統的路徑,但是OpenAI一直堅持著GPT的方向不斷演化著,2019年他們發布了GPT2,這個模型相對于GPT來說,主要是擴大了參數量,擴大了訓練語料,在構建語料的時候隱式地包含了multitask或者multidomain的特質,最后在二階段驗證模型的時候并不是直接做有監督的finetune,而是繼續用下游數據做無監督的訓練,最后的效果居然還不錯,證明了只要模型夠大,就能學到足夠的知識用于處理一些下游任務。從它的論文名字就可以看出來與其核心思想:Language models are unsupervised multitask learners 。不過彼時,BERT及其各種變種在領域中的應用還是更廣的,真正讓GPT系列模型驚艷眾人的工作還是要數2020年發布的GPT-3模型。(https://arxiv.org/abs/2005.141655)
GPT-3
首先,說幾個跟GPT-3相關的數字:
OpenAI訓練初版的GPT-3,比GPT-2整整用了15倍的語料,同時模型參數量擴展了100多倍。這么多資源的投入,使得GPT-3成為了一個“龐然巨物”,其產生的效果也是驚人的。除了在很多NLP的任務上有著很不錯的指標外,其本身也產生了一種前所未有的能力——In-context learning。
何為In-context learning?
簡單來說,就是模型在不更新自身參數的情況下,通過在模型輸入中帶入新任務的描述與少量的樣本,就能讓模型”學習”到新任務的特征,并且對新任務中的樣本產生不錯的預測效果。這種能力可以當做是一種小樣本學習能力。可以參考下圖的例子來理解:其中,task description和examples用來幫助模型學習新任務,最后的Prompt用來測試模型是否學會了。
與傳統的小樣本學習范式還是有所不同,之前主流的小樣本學習范式以Meta-learning為主,通過將訓練數據拆成不同的小任務進行元學習。在學習的過程中,模型的參數是一直在變化的,這是最大的一個不同點。
那不更新參數的小樣本學習有什么好處呢?
對于大模型來說,這可是極佳的特性。因為大模型的微調成本通常都極為龐大,很少有公司能夠具備微調訓練的資源。因此,如果能夠通過In-context learning的特性,讓大模型快速學習下游任務,在相對較小的成本下(對大模型進行前向計算)快速完成算法需求,可以大大提升技術部門的生產力。
In-context learning的效果固然驚艷,但是對于一些包含復雜上下文或者需要多步推理的任務仍然有其局限性,這也是業界一直以來致力于讓人工智能擁有的能力——推理能力。那么大模型具有推理能力嗎?對于GPT-3來說,答案是可以有,但有一定的限制。我們先來看看它有的部分。
還記得文章開頭提到的大模型的涌現能力吧,In-context正是屬于當模型參數量達到一定程度后,突然出現的能力之一。那么除此以外,還有什么能力是涌現的呢?答案就是——Chain-of-thought,即思維鏈能力。
怎么理解In-context learning?
GPT-3擁有的In-context learning能力可以說有很大程度來自于其龐大的參數量和訓練數據,但是具體能力來源仍然難以溯源。不過,最近已經有一些論文專門針對其進行了研究,如清華大學、北京大學和微軟的研究員共同發表了一篇論文:https://arxiv.org/abs/2212.105599,探索了GPT作為一個語言模型,可以視作是一個元優化器,并可將In-context learning理解為一種隱性的微調。
何為Chain-of-thought(COT)?
實際上是對輸入的Prompt采用Chain-of-thought的思想進行改寫。傳統的Prompt中,對于一個復雜或者需要多步計算推導的問題樣例,會直接給出答案作為In-context learning的學習范例與新任務的測試樣例輸入到大模型中。這樣做往往不能得到正確的結果,如圖所示:(https://arxiv.org/pdf/2205.11916.pdf6.pdf)
然而,當我們將上述問題范例中的答案再細化一些,對推到出答案的每一個步驟都寫出來,再將測試樣例一起輸入到模型中,此時模型居然能夠正確回答了,而且也能夠參照范例中的樣例進行一定的推理,如圖所示:
上述的模型輸入中,還帶有可參考的問題范例,還屬于小樣本的范疇。詭異的是,有人使用了一種匪夷所思的方法,讓其具備了零樣本的推理能力:在問題樣例的答案中增加一句Let’s think step by step. 然后模型居然能夠回答出之前不能回答的問題。
當然,上圖中模型并未直接給出一個簡潔的答案,而是給出了推導答案的步驟,論文中則是將上述output與輸入模型的Prompt拼在一塊,再次輸入模型,最終得到了簡潔的答案輸出:
既然大模型具備了COT的特性,那么就能說明它具備了推理能力了嗎?答案是不確定的。因為在更多的復雜邏輯推理類任務或者計算任務上,大模型還是無法回答。簡單來說就是他可以做一些簡單的小學應用題,但是稍微復雜一點的問題它就是在瞎猜了。具體的例子可以參考這篇論文中的分析:https://arxiv.org/abs/2208.050511
Chain-of-Thought能力來自于哪兒?
上一小節在介紹COT特性的時候,都是統一用GPT-3來代表。其實,**原始的GPT-3版本中并沒有顯著地發現其具備COT特性。**對于大眾來說,像是chatGPT突然就有了這樣的能力。其實,在chatGPT出來之前,openAI對GPT-3做了很多迭代優化工作。而GPT-3的COT特性就是在這些迭代優化中逐漸展現。但不可否認的是,目前仍然沒有確定性的結論說明COT特性來自于具體哪些迭代優化。有些觀點說是通過引入強化學習,有些觀點則是說通過引入了指令微調的訓練方式,也有些觀點說是通過引入龐大的代碼預訓練語料,使得模型從代碼邏輯中學習到了相應知識。推測的方式則是根據不同時間節點上的模型版本能力差進行排除法,雖然目前我們受限于技術能力只能從這些蛛絲馬跡中去發現一些端倪,但仍然具有一定的借鑒意義。具體的推理過程本文不會重復,感興趣的可以參考如下博客:https://franxyao.github.io/blog.html.html。
Instruction-Tuning與RLHF技術
雖然對于大模型突變能力的來源還不能輕易下結論,但是在其迭代優化過程中,引入的一些技術確實提升了(更準確得說是激活)大模型的能力。根據OpenAI的技術博客所述,ChatGPT的訓練方式主要參考了InstructGPT(https://arxiv.org/abs/2203.021555),而InstructGPT主要涉及了兩個核心的技術實現:指令微調(Instruction-Tuning)以及基于人工反饋的強化學習(Reinforcement learning from Human Feedback),下面將對其進行介紹。
Instruction-Tuning
Instruction-Tuning(下稱指令微調)技術,最早來自于谷歌Deepmind的Quoc V.Le團隊在2021年發表的論文《Finetuned Language Models Are Zero-Shot Learners》(https://arxiv.org/abs/2109.016522)。在說指令微調前,必須得先介紹下21年初開始業界開始關注的Prompt-learning范式。2021年4月,我在InfoQ的架構師大會上做了一次技術演講,分享了我們在Prompt上的一些研究實踐,如下圖所示:
Prompt-learning最早來自于論文《Exploiting Cloze Questions for Few Shot Text Classification and Natural Language Inference》(https://arxiv.org/abs/2001.076766),當時把里面的范式簡稱為PET(Pattern-exploiting Training)。其核心思想為將不同類型的自然語言理解任務與BERT預訓練中的掩碼語言模型任務進行轉化靠攏。例如對于圖中的實體情感分類任務,本身其分類標簽是一個三維的空間。我通過設置一個prompt提示文本模板:由此可見,英偉達的輿情是{},同時設計一個錨點,將原始分類目標的空間映射到語言模型中的子空間{正/負/中},通過預測錨點位置的token間接得到情感標簽。這種方式的優點在于能夠將下游任務與語言模型在預訓練任務中的訓練范式達成一致,減少下游任務在模型學習遷移過程中的知識損失,在小樣本的場景下比普通的Finetune模式會有更好的效果。Prompt-learning實際上是一種語言模型能夠股泛化不同任務的方式,從廣義層面上來看,可以有多種實現方式,例如上面的PET,本文之前提到的T5模型,以及初版的GPT-3等。指令微調實際上也可以算作是廣義Prompt-learning中的一種實現方式(個人愚見)。它的核心思想是盡可能收集不同類型的自然語言處理任務(包括理解和生成),并使用自然語言設計對應的任務指令,讓模型試圖理解不同任務的指令與特性,最終通過語言模型生成的方式完成不同任務的訓練,指令微調實例如下圖所示:
那么指令微調與BERT、T5、GPT-3等Prompt方式有什么區別呢?
BERT類的Prompt設計與掩碼語言模型任務相關,Prompt模板和錨點要與任務對應,需要一定量的標注樣本進行小樣本訓練。
T5的Prompt更像是在預訓練時對不同語言任務的數據打上了不同的標記,讓模型對語言任務有了初步的理解,但是不夠深入,無法應用在零樣本的場景。
GPT-3的Prompt中,會基于在模型訓練過程中見過的數據,更像是讓模型將Prompt中的文本進行續寫。這種方式可以幫助模型更好地理解用戶輸入的內容,并產生更準確和自然的輸出。但其在零樣本場景下效果仍然不佳。
指令微調技術使用Prompt來為模型提供一系列指令或者命令,這些指令或命令會告訴模型應該如何進行特定任務的處理。與GPT-3中的Prompt不同,指令微調中的Prompt是針對特定任務和特定的模型進行設計的,相當于是指導模型如何完成任務。指令微調技術提升了模型的零樣本學習能力。模型對于未見過的任務也能夠理解并嘗試處理。在GPT-3后續的迭代版本中,加入了指令微調后,即使在Prompt中不引入帶標注的樣本,模型也能夠比較好的理解需求并得到不錯的效果。
目前公開開源的模型FLAN T5就是在T5模型基礎上進行了指令微調的訓練,相較于那些動輒幾百億、幾千億參數的大模型來說,這個模型的參數量已經足夠親民,可以作為個人研究或者業務實現的strong baseline
在ChatGPT公開后,各種五花八門的Prompt層出不窮。有讓其作為一個linux終端的,有讓其作為一個二次元貓娘的,也有讓他寫武俠小說的。感覺上ChatGPT可以做任何事情,只要你的腦洞足夠大。這種通才特質有很大一部分要歸功于指令微調。只要我們設計的Prompt指令足夠清晰完整,模型總能夠理解我們要干什么,并盡量按照我們的需求去完成任務。我認為這是其有別于過往大模型的重要特性之一。
深度強化學習簡述
指令微調技術固然強大,但是其本身也存在一定的缺點:
一些開放性的生成性語言任務并不存在固定正確的答案。因此在構建指令微調的訓練集時,就無法覆蓋這些任務了。
語言模型在訓練的時候,對于所有token層面的錯誤懲罰是同等對待的。然而在文本生成時,有些token生成錯誤是非常嚴重的,需要加權懲罰。換句話說,語言模型的訓練任務目標與人類的偏好存在gap。
綜上,我們需要模型能夠學習如何去滿足人類的偏好,朝著人類滿意的更新模型參數。因此,我們就需要引入人類對模型的獎懲方法(Reward)作為模型的引導,簡稱?
(?)∈?R(s)越高,模型的就越能滿足人類偏好。很自然的,我們就能將最大化
即R的期望。一般來說,對于神經網絡的訓練來說,需要設計一個可微的目標函數,這樣才能應用梯度下降法來對模型進行參數更新學習。然而,人類的R一般很難設計成可微的,因此不能直接用于神經網絡的訓練中,因此就有了強化學習的誕生。近年來,強化學習領域也在飛速發展,有了alphaGo系列的驚艷效果,有很多研究都將強化學習開始與深度學習進行了結合。比較典型的研究為Policy Gradient methods(基于策略的梯度方法)。基于上述的訓練目標函數,我們仍然應用梯度計算來進行參數更新:
對于這個公式有兩個問題:
如何估計R(*)的期望函數?
如果R(*)是一個不可微的函數,該如何計算梯度?
Policy Gradient methods就是用來解決上述問題的。通過一系列的公式變換(過程就不放了,大家可以參考斯坦福cs224n),可以得到以下式子:
我們將梯度計算移到了計算期望的式子內。雖然我們不能直接計算期望,但是可以采用蒙特卡洛采樣的方法,去采樣得到目標梯度的無偏估計。
將上式重新代入梯度更新的式子中,得到:
此時,在梯度更新時候我們會有兩種趨勢:
當R為正的時候,說明對當前策略選擇 Si??有獎勵,因此我們需要讓梯度沿著最大化???(??)
的方向更新
當R為負的時候,說明對當前策略選擇 Si??有懲罰,因此我們需要讓梯度沿著最小化???(??)
的方向更新
通過這種方式,我們就讓模型逐漸逼近R所期望的方向學習。
ChatGPT也將強化學習的技術進行了應用集成,通過人機結合,成功讓模型學會了人類的偏好。這種技術就是Reinforcement learning from Human Feedback,以下簡稱RLHF。
因為本人對強化學習領域不太熟悉,所以不足以完全解釋其中的原理機制。因此主要參考斯坦福cs224n課程系列中對于該部分的宏觀層面講解。
RLHF
有了上面的強化學習技術,我們現在能夠對一些不可微的函數進行梯度學習,我們就能引入一些符合人類期望的獎勵函數作為模型訓練目標。但是,這套工作流程讓然存在一些問題:
整個訓練過程需要人工不斷對模型的策略選擇進行獎懲的判斷,訓練的時間成本陡然上升。
為了降低訓練成本,先標注適量的數據集,讓人先給出偏好標注。然后,我們基于這個數據訓練一個獎勵模型???(?),用來自動生成人類對一個數據的偏好回答。
人本身會存在主觀偏差,因此對數據的標注或者模型策略的評價也會有偏差。
為了能夠對人類的主觀偏差有一定的魯棒性,不直接給出一個具體的好壞答復,而是采用一種Pairwise Comparison的方式,當生成一個文本輸出時,人類可以對其進行成對比較,以指出其中更好或更合適的內容。例如,在文本摘要任務中,人類可以比較兩個不同版本的摘要,并選擇更好的那一個。這些成對比較可以幫助 InstructGPT 學習到人類的喜好和優先級,從而更好地生成高質量的文本輸出。為了實現 Pairwise Comparison,需要設計一些有效的算法和策略,以便生成不同版本的文本輸出,并對它們進行比較。具體來說,可以使用類似于基于排序的學習方法的算法來訓練模型,并優化生成策略和模型參數,以便更好地滿足人類反饋的需求:
圖中,w和l分別代表兩個不同的模型生成結果,從人類的視角看w的結果更優,因此w的分數應該也要大于l。
最后我們將RLHF的核心步驟串聯起來:
InstructGPT中的RLHF
下圖為目前最常見的InstructGPT訓練流程。
ChatGPT中的RLHF
根據OpenAI發布的技術博客所述,ChatGPT的訓練方式與InstructGPT幾乎相同,僅在收集數據的時候采用了不同的方式,具體細節并沒有公布,只提到他們讓人工的標注人員同時扮演對話過程中的用戶與機器人,并通過一系列準則規范指導他們如何編排對話中的回復,最終生成了對話場景的訓練數據。最終,他們將其與InstructGPT的數據集進行的融合,并統一轉化為對話的形式。另外,在訓練Reward模型時,他們通過讓人工標注人員與對話機器人進行對話來產生會話語料,并從中選擇一個模型生成的消息,通過采樣的方式生成多個不同的補全文本,并由標注人員進行打分排序,形成Pairwise Comparison數據。
ChatGPT訓練的工程難度
至此,本文將ChatGPT相關的技術要點已經做了一個整體的介紹,通過上文描述,我們可以看到OpenAI在研發ChatGPT的過程中投入了非常多的成本與研發精力,另外要訓練出這樣一個體量的模型,對于工程化的要求也是非常高的,包括對數據的清洗、大規模分布式訓練的工程化以及大模型大數量下的訓練穩定性技術等。就我個人而言,之前有研究并實施過BERT-LARGE模型的預訓練,其參數量肯定不能與ChatGPT相比,但在訓練中,也遇到過loss飄飛、訓練中斷卡殼的情況。因此,這樣一個成果是算法與工程緊密結合的產物,其效果之好也就不奇怪了。
ChatGPT的能與不能
當前,伴隨著ChatGPT的接口開放,已經涌現出了很多有趣的應用。我按照自己的觀察,總結了ChatGPT擅長做的以及不擅長做的事。
ChatGPT的能
ChatGPT雖然以對話機器人的產品形態提供服務,但是其本質上還是基于語言模型的能力。在應用層面上,他有三個強大的特質:
對人類輸入的需求理解能力特別強。
善于進行知識的檢索與整合。
生成能力很強,在長距離生成過程中不會有重復、不通順、機械等傳統生成模型固有的問題。
因此,適合其大展身手的場景可包括:
基于搜索的問答
目前最典型的場景就是繼承了ChatGPT的New Bing。ChatGPT本身存在知識信息無法自更新的缺點,導致產生的回復無法緊跟時代。因此,將搜索引擎與ChatGPT進行集成就顯得水到渠成了。據了解,微軟通過一種稱為“普羅米修斯”的模型機制,將搜索與ChatGPT的生成能力進行了整合。以最近比較火的“硅谷銀行破產”事件為例,我們有如下提問:
可以看到New Bing回答得還不錯。從New Bing的回復方式可以去猜測其運行機制:先通過搜索引擎召回與問題相關的網絡實時信息,并提取其中的文本。然后將所有相關文本構造成Prompt輸入到ChatGPT中,要求其生成完整的回答。另外,在回答中還會標識出答案內容的來源。
除了New Bing之外,基于文檔的輔助閱讀也是非常典型的場景。最近比較火的ChatPDF能夠上傳論文等PDF文件,并支持對文檔的QA問答。這實際上也是一種問答搜索。
處理各種基礎的NLP任務
我們可以將他包裝成一個通用的NLP工具平臺,處理各種任務,包括但不限于文本分類、信息抽取、文本摘要、機器翻譯等。通過上述章節的介紹可知,GPT-3系列模型支持小樣本和零樣本學習的能力,因此應用他來做NLP任務可以降低人工標注的成本,并得到一個強大的baseline。我們嘗試了對文檔進行信息抽取的任務,如研報公告中的財務經營指標抽取:
可以看到上面我采用的是零樣本的模式,但是ChatGPT以幾乎100%的準確率將所有指標抽了出來。不過,抽取出來的數據沒有單位,我們還可以讓他做個修正:
與其他組件的整合
基于ChatGPT強大的理解能力,我們可以把它作為一個人類與其他場景工具進行溝通的中間橋梁,大大提升個人的生產力。
例如日常辦公涉及到的OFFICE全家桶,目前已經有了很多集成的產品,例如ChatBCG,通過輸入文字需求,就能自動生成PPT大綱以及每頁的大致內容(當然,還不能自動生成多樣的背景樣式);ChatExcel,通過輸入文字需求,能夠讓其實現表格的基本處理、函數計算、分組過濾排序等復雜操作。
2023年3月17日,微軟宣布在OFFICE全家桶中集成GPT-4。打工人的生產力一下子就提升數倍!
另外,還可以與其他模態的模型工具進行整合,例如OpenAI開放的API中就包括了Whisper,一個語音識別的模型,人們可以通過Whisper將語音轉文本,最終將文本送到GPT-3的接口中。另外,ChatGPT也可以與圖像視覺的大模型進行結合,提供文生圖的功能,例如今年大熱的stable diffusion模型。之前圖像生成非常依賴輸入的Prompt質量。我們可以讓ChatGPT輔助生成一個高質量的Prompt,然后輸入到stable diffusion中,就能產生更符合需求的圖像。
實際上,Meta在2月份就發表了一篇論文ToolFormer(https://arxiv.org/abs/2302.047611),研究了如何使用自監督的方式,讓大模型如何決定什么時候調用外部的API來幫助其完成任務。可以預見,后面會有越來越多的產品出來,我倒是希望能有一款根據文本要求自動畫流程圖的工具,畢竟受苦與畫圖很久了 .
文字創作
作為一個生成式大模型,創作能力可以說是他的看家本領。ChatGPT的創作場景格外豐富,只有你想不到,沒有他做不到:
合并撰寫工作周報與工作小結、小說創作、電影劇本創作等。但對于專業度和準確性比較高的場景,就不太能勝任了,例如金融場景中的研報生成,即使是將具體的財務數據連同要求一起輸入模型,最后生成的結果中也會有一些事實性的數據錯誤,這種錯誤是無法容忍的。
可以作為一個AI輔助訓練工具。當受限于成本無法使用ChatGPT直接提供AI能力時,不妨可以將ChatGPT視作一個數據增強器,生成任務所需要的訓練語料,再輔以少量的人工進行核驗,就能以較低的成本獲得高質量的語料。
上述提到的RLHF訓練流程也可以通過引入ChatGPT來減少人工的投入。具體來說就是將Human feedback替換為 ChatGPT feedback。早在2022年12月就有相關的論文介紹了這種思路:[2212.08073] Constitutional AI: Harmlessness from AI Feedback (arxiv.org)
其實ChatGPT的應用場景還有很多,礙于篇幅,就不窮舉出來了,大家可以自行關注相關媒體網站。
ChatGPT的不能
ChatGPT目前的應用非常廣泛,看似是一個能干的多面手,但他也有目前無法勝任的場景。比較典型的就是推理分析。雖然在引入了代碼以及其他迭代優化后,chatGPT初步具備了一定的推理能力,但對于復雜的推理分析計算類任務,他回答錯誤的概率仍然非常大。這里特別推薦知乎上看到一個關于ChatGPT能力探索的博文:https://www.zhihu.com/question/582979328/answer/2899810576
79328/answer/289981057作者通過設計了一系列縝密的實驗,來不斷探索ChatGPT的能力。從結果上可以看到機器的能力在某些場景上還是無法模仿人類的思維能力。
另外,在ChatGPT的訓練過程中,使用了RLHF來引導模型按照人類偏好進行學習。然而,這種學習方式也可能導致模型過分迎合人類的偏好,而忽略正確答案。因此大家可以看到ChatGPT經常會一本正經的胡說八道。在專業領域,我們需要他知之為知之,不知為不知,不然我們就必須要引入人工來審核他的答案。
最后,應用大模型時繞不過的一個問題就是數據隱私安全。無論是ChatGPT,還是國內即將推出的大模型,由于B端客戶很少有硬件資源能夠匹配上,很難進行私有化本地部署,通常是以LaaS的形式提供服務。而且目前大模型在專業垂直領域的效果還是未知的,因此通常需要使用領域語料進行微調,這就意味著數據要流出到模型服務提供方。一般大型公司對于數據的流出是非常慎重的,因此如何在安全合規的條件下,完成這一條鏈路的流轉,是目前亟需解決的問題。
額外提一個應用:代碼生成。這個場景既是能也是不能。他在python語言的編碼能力上確實不錯,甚至能生成一段textcnn的實現;但是在java或者其他編程語言上,他的生成質量就相對較差了,而且生成的代碼質量也不如一個經驗豐富的工程師,在代碼執行性能上暫時還無法滿足需求。
關于大模型的可研究方向
關于ChatGPT的內容到這也就基本寫完了。作為一名NLP領域的從業者,我也跟其他人一樣,被其強大的能力所震驚,同時也在思考自己未來還能在這個領域做哪些事情,大概想了一些方向,歡迎共同討論:
用更少的參數量,達到更好的效果。無論是之前DeepMind的 Chinchilla(70B),還是最近Meta的 LLaMA(65B), 亦或是3月14日智譜團隊剛發布的ChatGLM(6B),他們的參數量都小于GPT-3(175B),但是其模型效果都能夠匹配上GPT-3。在LLaMA的論文中,Meta表示他們用了更多的語料token來訓練,這有可能意味著目前大模型的參數對知識的利用率還有很大的上升空間。我們可以通過精簡參數,擴大語料規模來提升大模型的能力。
上面提到大模型應用時的數據隱私問題,目前也有一些可行的方法來解決。比如通過隱私計算的方式,讓數據在流出時處于加密的狀態。另外,也有一些學者在研究其他方法保護數據的隱私,例如Offsite-Tuning(https://arxiv.org/pdf/2302.04870v1.pdf0v1.pdf),這種方法的核心思想是設計了一個adapter(可以理解為一個由神經網絡構成的組件)與仿真器(可以理解為大模型的一個壓縮版本)并提供給用戶,用戶在仿真器的幫助下使用領域數據對adapter參數進行微調,最后將微調好的adapter組件層插入到大模型上組成了一個完整的新模型用于提供服務:
高效設計與應用ChatGPT的Prompt范式。例如我們可以設計一個工具平臺,將不同類型的NLP任務包裝成一種配置式的產品。用戶針對自己的任務需求,只需要提供需求的詳細描述,以及問題的樣例,就能快速得到一個能力實例,并應用在自己的場景中;另外,我們還可以研究如何高效地設計一個Prompt來解決復雜的場景問題。如Least-to-Most(https://arxiv.org/abs/2205.106255)這篇論文所述,對于一個復雜問題,我們可以幫助LLM先自己拆解問題,形成為了解決問題X,需要先解決問題Y1,Y2...的形式,然后讓模型分別去解決子問題,最后將所有子問題的解決過程拼在一塊送到模型中,輸出答案。這種方式可以有機結合COT的特性,可以用于處理一些比較復雜的問題。
結束語
在本文的最后來一些雞湯吧:時代的車輪是不斷向前的,技術的更迭也會給這個時代帶來不可估量的影響。雖然ChatGPT的出現可能會對業界帶來不小的沖擊,但我們應該將目光放到更廣闊的天地,在那兒將有更多豐富的未知世界等著我們去探索。
以此自勉!
審核編輯 :李倩
-
人工智能
+關注
關注
1791文章
46867瀏覽量
237590 -
語言模型
+關注
關注
0文章
508瀏覽量
10245 -
ChatGPT
+關注
關注
29文章
1548瀏覽量
7495
原文標題:最全ChatGPT技術匯總
文章出處:【微信號:zenRRan,微信公眾號:深度學習自然語言處理】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
評論