大模型系统和应用——自然语言处理大模型基础
引言
最近在公眾號(hào)中了解到了劉知遠(yuǎn)團(tuán)隊(duì)退出的視頻課程《大模型交叉研討課》,看了目錄覺(jué)得不錯(cuò),因此拜讀一下。
觀看地址: https://www.bilibili.com/video/BV1UG411p7zv
目錄:
基礎(chǔ)與應(yīng)用
自然語(yǔ)言處理的目的是讓計(jì)算機(jī)理解人類(lèi)所說(shuō)的語(yǔ)言。在人工智能的最開(kāi)始階段,圖靈提出了圖靈測(cè)試,是判斷機(jī)器智能的一個(gè)重要手段。
簡(jiǎn)單來(lái)說(shuō),就是讓人類(lèi)與機(jī)器對(duì)話,讓人類(lèi)判斷對(duì)面是否為機(jī)器人。而機(jī)器只有非常好地理解人類(lèi)語(yǔ)言并能生成合理地回應(yīng)之后,才能讓人類(lèi)無(wú)法判斷出對(duì)面是機(jī)器人還是人類(lèi)。
Advances in Natural Language Processing是一個(gè)非常好的自然語(yǔ)言處理綜述介紹,是2015年發(fā)布的。
下面我們來(lái)看一下自然語(yǔ)言處理的基本任務(wù)和應(yīng)用。
基本任務(wù)和應(yīng)用
包括詞性標(biāo)注(Part of speech)、命名識(shí)別識(shí)別(Named entity recognition)、共指消解(Co-reference)和依存關(guān)系(Basic dependencies):
還有一些和語(yǔ)言相關(guān)的任務(wù),比如中文里面的中文分詞。
如果完成了上面的這些任務(wù)后,那么可以應(yīng)用到非常多不同的任務(wù)中。
自然語(yǔ)言處理與結(jié)構(gòu)化知識(shí)有密切的關(guān)系,如何從文本中抽取結(jié)構(gòu)化知識(shí)來(lái)更好地支持我們獲取相關(guān)信息,常用的技術(shù)是知識(shí)圖譜。
知識(shí)圖譜需要自動(dòng)地從大規(guī)模的文本中挖掘,這里就涉及到另一個(gè)非常重要的技術(shù),機(jī)器閱讀理解。
自然語(yǔ)言處理還可以實(shí)現(xiàn)智能助理,比較有名的是鋼鐵俠電影中的賈維斯,盡管我們現(xiàn)在還無(wú)法實(shí)現(xiàn)這么智能。商業(yè)化的產(chǎn)品像小度、Siri有著非常廣泛的應(yīng)用。
此外還有一個(gè)經(jīng)典的任務(wù),機(jī)器翻譯,現(xiàn)在比較厲害的應(yīng)用Google翻譯,幾乎離不開(kāi)它。
有時(shí)我們想知道一句話的情感,也可以應(yīng)用自然語(yǔ)言處理的技術(shù),情感分析。
還可以利用自然語(yǔ)言來(lái)分析人類(lèi)的心理狀態(tài)。
我們看到了很多的應(yīng)用,下面我們簡(jiǎn)單了解一下自然語(yǔ)言處理的基本問(wèn)題,即詞的表示問(wèn)題。
詞表示
詞表示(Word representation):把自然語(yǔ)言中最基本的語(yǔ)言單位——詞,轉(zhuǎn)換成機(jī)器能理解的表示的過(guò)程。即讓機(jī)器理解單詞的意思。
那如何做到這件事呢?我們要想清楚有了詞表示后,那么計(jì)算機(jī)可以做什么。
- 計(jì)算單詞相似度
- 知道單詞語(yǔ)義關(guān)系
- 比如北京和中國(guó)是首都和國(guó)家的關(guān)系
同義詞和上位詞
在過(guò)去如何去表示一個(gè)詞的詞義呢,有一個(gè)非常簡(jiǎn)單的做法,用一組相關(guān)詞(比如同義詞)來(lái)表示當(dāng)前詞。
比如用"Good"有關(guān)的近義詞和反義詞來(lái)表示它的詞義;或者說(shuō)用"NLP"相關(guān)的上位詞來(lái)表示它的詞義。
這是非常直觀的一種表示方案,但是這樣做有一些問(wèn)題:
- 丟失細(xì)微差別
- 比如"proficient"與"good"只在某些情況下是同義詞
- 丟失單詞的新意
- 比如"Apple"除了有蘋(píng)果的意思,還是一家公司
- 主觀性問(wèn)題
- 數(shù)據(jù)稀疏問(wèn)題
- 需要大量人工構(gòu)建維護(hù)詞典
One-hot表示
實(shí)際上對(duì)于計(jì)算機(jī)來(lái)說(shuō),最常用的還是將詞表示成獨(dú)立的符號(hào),比如獨(dú)熱表示。
即任何一個(gè)詞都可以用詞表一樣大小維度的向量來(lái)表示,只有一個(gè)維度為1,其他都是0。
這種表示方式,比較適用于計(jì)算文檔之間的相似度,因?yàn)閮善臋n理論上相同的單詞越多,證明越相似。
但是在表示詞的時(shí)候就會(huì)存在問(wèn)題,因?yàn)樗僭O(shè)詞之前的向量都是正交的。
上下文表示
為了解決one-hot的問(wèn)題,上下文分布表示被提出來(lái),這里有一句名言"ou shall know a word by the company it keeps."。即我們可以利用詞的上下文詞來(lái)知道這個(gè)詞的意思,或來(lái)表示這個(gè)詞。
比如上面的例子,為了表示詞"stars",我們可以選取經(jīng)常出現(xiàn)的上下文詞"shining"、"cold"和"bright"等來(lái)表示這個(gè)詞。
利用這種方式我們就可以用一個(gè)向量,它的長(zhǎng)度也和詞典長(zhǎng)度一樣,但里面的每一維度表示該詞的上下文它出現(xiàn)了多少次。這樣任何一個(gè)詞,都可以用它上下文出現(xiàn)的頻度來(lái)進(jìn)行表示,從而得到每個(gè)詞的稠密向量。
然后可以利用該稠密向量計(jì)算兩個(gè)詞的相似度。
這樣的方法很好,但還是有問(wèn)題,它有什么問(wèn)題呢?
- 存儲(chǔ)需求隨著詞表大小增長(zhǎng)
- 需要大量存儲(chǔ)空間
- 對(duì)于頻率特別少的詞,存在稀疏問(wèn)題
- 導(dǎo)致該詞的表示效果不好
詞嵌入
針對(duì)上面的問(wèn)題,深度學(xué)習(xí)或大模型所做的工作就是詞嵌入(Word Embedding)。
詞嵌入是一種分布式表示
- 從大規(guī)模文本中建立一個(gè)低維稠密向量空間
- 學(xué)習(xí)方法:比如Word2Vec
語(yǔ)言模型
自然語(yǔ)言處理的另外一個(gè)知識(shí)點(diǎn)是語(yǔ)言模型(Language Model)。
語(yǔ)言模型的任務(wù)就是根據(jù)前文來(lái)預(yù)測(cè)下一個(gè)單詞。
該任務(wù)是讓計(jì)算機(jī)去掌握語(yǔ)言能力的非常重要的一個(gè)任務(wù)。一旦計(jì)算機(jī)掌握了這種預(yù)測(cè)能力,那么它就掌握了如何更好地理解一句話、如何根據(jù)某句話生成后面的回復(fù)等工作。
語(yǔ)言模型主要完成兩個(gè)工作,一是計(jì)算一個(gè)單詞序列稱(chēng)為一個(gè)合理語(yǔ)句的(聯(lián)合)概率:
P(W)=P(w1,w2,?,wn)P(W) = P(w_1,w_2,\cdots,w_n) P(W)=P(w1?,w2?,?,wn?)
另一個(gè)是根據(jù)前面的話來(lái)預(yù)測(cè)下一個(gè)詞的(條件)概率:
P(wn∣w1,w2,?,wn?1)P(w_n|w_1,w_2,\cdots,w_{n-1}) P(wn?∣w1?,w2?,?,wn?1?)
那么如何完成這兩個(gè)工作呢?
這里有一個(gè)語(yǔ)言模型的基本假設(shè)——未來(lái)的詞只受到前面詞的影響。這樣我們就可以把句子的聯(lián)合概率,拆解成條件概率的乘積:
所以語(yǔ)言模型可以寫(xiě)成:
P(w1,w2,?,wn)=∏iP(wi∣w1,w2,?,wi?1)P(w_1,w_2,\cdots,w_n) = \prod_i P(w_i|w_1,w_2,\cdots,w_{i-1}) P(w1?,w2?,?,wn?)=i∏?P(wi?∣w1?,w2?,?,wi?1?)
一個(gè)句子的聯(lián)合概率等于句子中每個(gè)詞基于它前面已經(jīng)出現(xiàn)的詞的條件概率之積。
那現(xiàn)在的問(wèn)題是如何構(gòu)建語(yǔ)言模型呢?
N-Gram
在過(guò)去,一個(gè)非常典型的做法叫N-Gram語(yǔ)言模型。它統(tǒng)計(jì)前面出現(xiàn)幾個(gè)詞之后,后面出現(xiàn)的那個(gè)詞的頻率是怎樣的,比如以4-gram為例:
P(wj∣too?late?to)=count(too?late?towj)count(too?late?to)P(w_j|\text{too late to}) = \frac{\text{ count} ( \text{too late to} \, w_j )}{\text{ count} ( \text{too late to})} P(wj?∣too?late?to)=?count(too?late?to)?count(too?late?towj?)?
N-Gram遵循了馬爾科夫假設(shè),即一個(gè)句子出現(xiàn)的聯(lián)合概率,只考慮單詞前面幾個(gè)有限的詞:
P(w1,w2,?,wn)≈∏iP(wi∣wi?k,?,wi?1)P(w_1,w_2,\cdots,w_n) \approx \prod_i P(w_i|w_{i-k},\cdots,w_{i-1}) P(w1?,w2?,?,wn?)≈i∏?P(wi?∣wi?k?,?,wi?1?)
上面的公式表示只考慮前面kkk個(gè)詞。
因此根據(jù)前面i?1i-1i?1個(gè)詞來(lái)預(yù)測(cè)第iii個(gè)詞出現(xiàn)的概率,可以通過(guò)前面kkk個(gè)詞來(lái)簡(jiǎn)化:
P(wi∣w1,w2,?,wi?1)≈P(wi∣wi?k,?,wi?1)P(w_i|w_1,w_2,\cdots,w_{i-1}) \approx P(w_i|w_{i-k},\cdots,w_{i-1}) P(wi?∣w1?,w2?,?,wi?1?)≈P(wi?∣wi?k?,?,wi?1?)
但N-Gram的問(wèn)題是
- 需要存儲(chǔ)所有可能的n-gram,所以一般應(yīng)用較多的是bi-gram或tri-gram
- 沒(méi)有捕獲到詞之間的相似性
神經(jīng)語(yǔ)言模型
在深度學(xué)習(xí)出現(xiàn)之后,就產(chǎn)生出了神經(jīng)語(yǔ)言模型,即基于神經(jīng)網(wǎng)絡(luò)取學(xué)習(xí)詞的分布式表示,可以
- 將詞與分布式向量關(guān)聯(lián)起來(lái)
- 基于特征向量計(jì)算詞序列的聯(lián)合概率
- 優(yōu)化詞特征向量(嵌入矩陣EEE)和損失函數(shù)的參數(shù)(映射矩陣WWW)
基本思路是,要預(yù)測(cè)詞wtw_twt?,需要考慮前文。這里前文就是固定大小窗口內(nèi)的詞。假設(shè)窗口大小為3,那么就考慮該詞前面的三個(gè)詞。具體地,根據(jù)這三個(gè)詞的索引根據(jù)嵌入矩陣得到它們的特征向量,即分布式表示。然后拼接這幾個(gè)向量,形成一個(gè)維度更大的上下文向量。然后經(jīng)過(guò)非線性轉(zhuǎn)換(tanh),之后通過(guò)Softmax函數(shù)來(lái)計(jì)算概率出概率最大的下一個(gè)詞。
因?yàn)樗械念A(yù)測(cè)工作,都是基于對(duì)上下文的表示來(lái)完成的,可以想象由于每個(gè)詞的向量,和整個(gè)匹配的預(yù)測(cè)過(guò)程,都是基于神經(jīng)網(wǎng)絡(luò)可學(xué)習(xí)的參數(shù)來(lái)完成,所以我們就可以利用大規(guī)模的數(shù)據(jù)來(lái)自動(dòng)地學(xué)習(xí)這些詞向量,自動(dòng)地去更新神經(jīng)網(wǎng)絡(luò)的權(quán)重(嵌入矩陣)。
大模型之旅
可以看到,從2013年之后,隨著深度學(xué)習(xí)技術(shù)的發(fā)展,整個(gè)自然語(yǔ)言處理的發(fā)展也受到了很大地影響。從13年的Word2Vec,到14年的RNN,到18年的ELMo,以及同年出現(xiàn)的BERT,之后預(yù)訓(xùn)練模型就被大量使用。
為什么大模型非常重要
首先在應(yīng)用了大模型之后,它整個(gè)的表現(xiàn)有了突飛猛進(jìn)的提升。以GLUE為例,該指標(biāo)的結(jié)果有了非常顯著的提升。
除了自然語(yǔ)言理解中,在自然語(yǔ)言生成里面,比如對(duì)話系統(tǒng),也取得了非常好的結(jié)果。
所以,自18年之后,大家的目光都集中于如何得到一個(gè)更好的預(yù)訓(xùn)練語(yǔ)言模型,以及如何把預(yù)訓(xùn)練語(yǔ)言模型用在更多的任務(wù)上。
總地來(lái)說(shuō),預(yù)訓(xùn)練語(yǔ)言模型的發(fā)展有三個(gè)趨勢(shì):
- 不斷地增大它的參數(shù)
- 不斷地增大數(shù)據(jù)量
- 不斷地增大計(jì)算量
最后大家發(fā)現(xiàn)對(duì)預(yù)訓(xùn)練語(yǔ)言模型來(lái)說(shuō)很重要的一個(gè)趨勢(shì)就是,增加參數(shù)量和數(shù)據(jù)量之后,訓(xùn)練模型會(huì)變得更加有效,并且能顯著提升各種任務(wù)的表現(xiàn)。
圍繞這一點(diǎn),可以發(fā)現(xiàn),從18年之后,模型參數(shù)的增長(zhǎng)速度是非常快的。
基本以每年十倍的速度往上增長(zhǎng),伴隨著模型參數(shù)量增大的同時(shí),它們使用的數(shù)據(jù)規(guī)模也在不斷地增大,相應(yīng)地所需要的計(jì)算量也不斷變大。這就是大模型發(fā)展的整體趨勢(shì)。
然后其實(shí)模型大到一定程度之后,我們會(huì)從中發(fā)現(xiàn)模型掌握了大量知識(shí)。比如從GPT-3中,我們會(huì)發(fā)現(xiàn)它具有一定程度地對(duì)世界的認(rèn)知、常識(shí)以及邏輯推理。
如果我們把它應(yīng)用到各種各樣的NLP任務(wù)上,那勢(shì)必就會(huì)產(chǎn)生很好的效果。
大模型的另外一方面,或者說(shuō)一種能力,它具有很強(qiáng)的零樣本或少次學(xué)習(xí)(zero/few-shot learning)的能力。
我們知道深度學(xué)習(xí)需要大量的標(biāo)注數(shù)據(jù)去支撐的,但是GPT-3讓我們看到了另外一面,即可以在大規(guī)模無(wú)標(biāo)注數(shù)據(jù)上進(jìn)行模型學(xué)習(xí),學(xué)完后讓模型具備很多知識(shí)。然后在解決具體任務(wù)時(shí),就不需要很多的樣本,只需要少量的樣本去告訴模型要做什么任務(wù),同時(shí)引導(dǎo)模型把它與任務(wù)相關(guān)的知識(shí)摘取出來(lái),去解決這個(gè)問(wèn)題。
比如說(shuō)上圖框出來(lái)的機(jī)器翻譯,以往我們需要大量的平行語(yǔ)料。但是對(duì)于GPT-3,在無(wú)標(biāo)簽數(shù)據(jù)訓(xùn)練后,哪怕只給出一些少量的翻譯樣本,該模型也能做出比較好的機(jī)器翻譯效果。
還有,在GPT-3中,很多復(fù)雜的任務(wù),比如編程或下國(guó)際象棋,也能轉(zhuǎn)換為基于預(yù)訓(xùn)練語(yǔ)言模型的動(dòng)作序列生成任務(wù)。
同時(shí)從預(yù)訓(xùn)練模型出來(lái)后,對(duì)于語(yǔ)言模型的關(guān)注度也在突然上漲。
大模型背后的范式
- 在預(yù)訓(xùn)練階段,預(yù)訓(xùn)練語(yǔ)言模型會(huì)從大規(guī)模無(wú)標(biāo)注的數(shù)據(jù)中捕獲豐富的知識(shí)
- 接著,通過(guò)引入任務(wù)相關(guān)的數(shù)據(jù)進(jìn)行微調(diào)來(lái)調(diào)整預(yù)訓(xùn)練模型
即預(yù)訓(xùn)練-微調(diào)范式。這種范式可以溯源到遷移學(xué)習(xí)。
遷移學(xué)習(xí)使用一個(gè)“預(yù)訓(xùn)練然后微調(diào)”的框架來(lái)完成“知識(shí)獲取然后知識(shí)遷移”的工作。
特征表示遷移和參數(shù)遷移都被用于后續(xù)預(yù)訓(xùn)練模型的工作。
詞嵌入(Word Embeddings)可以看成是簡(jiǎn)單的預(yù)訓(xùn)練語(yǔ)言模型,比如CBOW和Skip-Gram。
詞嵌入從無(wú)標(biāo)簽數(shù)據(jù)中通過(guò)自監(jiān)督學(xué)習(xí)的范式學(xué)習(xí),然后可以當(dāng)成下游任務(wù)的輸入。
這是特征表示遷移。
但這種詞嵌入技術(shù)有兩個(gè)主要問(wèn)題:
- 無(wú)法處理多義詞
- I go to bank(銀行) for money deposit
- I go to bank(河岸) for fishing
- 無(wú)法處理反義詞
- I love this movie. The movie is so bad
- I don’t love this movie. The movie is so good
后來(lái)帶有上下文信息的詞嵌入被提了出來(lái)。
比較有代表性的就是ELMo模型
- 利用RNN在大規(guī)模無(wú)標(biāo)簽數(shù)據(jù)上進(jìn)行語(yǔ)言建模
- 使用該預(yù)訓(xùn)練的RNN取生成任務(wù)特征的帶上下文的詞嵌入
說(shuō)到這種技術(shù),不得不提的一個(gè)是Transformer,可以說(shuō)是一個(gè)劃時(shí)代的技術(shù)。
基于Transformer,一系列深度預(yù)訓(xùn)練模型被開(kāi)發(fā)出來(lái):
大模型的典型案例
首先是GPT,把語(yǔ)言建模看成一個(gè)預(yù)訓(xùn)練任務(wù)。
L1(C)=?∑ilog?P(wi∣w1w2?wi?1)L_1(C) = -\sum_i \log P(w_i|w_1w_2\cdots w_{i-1}) L1?(C)=?i∑?logP(wi?∣w1?w2??wi?1?)
既可以用在下游生成任務(wù)(作為解碼器),也可以用在下游語(yǔ)言理解任務(wù)(作為編碼器)。
另外一個(gè)是BERT,它基于兩個(gè)任務(wù)學(xué)習(xí)。
掩碼語(yǔ)言模型(Masked language model, MLM):
下一句預(yù)測(cè)(Next sentence prediction,NSP)
實(shí)際上這是一個(gè)分類(lèi)任務(wù)。
BERT在微調(diào)不同的下游任務(wù)時(shí)會(huì)增加不同的特殊符號(hào):
總結(jié)
以上是生活随笔為你收集整理的大模型系统和应用——自然语言处理大模型基础的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 深延科技:基于深度学习的智能OCR识别技
- 下一篇: 【冈萨雷斯的数字图像处理1~6章复习考试