安俊秀,蔣思暢
(成都信息工程大學(xué) 軟件工程學(xué)院,四川 成都 610225)
自然語言處理主要研究實現(xiàn)人與計算機之間用自然語言進行有效通信的理論方法及應(yīng)用,它的一般流程如圖1所示。
圖1 NLP的一般流程
語言的數(shù)據(jù)稱為語料庫(Corpus),特征工程指的就是將自然語言轉(zhuǎn)換成詞的特征向量(簡稱詞向量)的處理過程,因為詞是自然語言中表示語義的最小單位。詞向量的好壞直接決定了任務(wù)模型的性能高低,因此NLP的特征工程是關(guān)鍵的一步,為此構(gòu)建、訓(xùn)練針對詞向量的模型是最優(yōu)解法。
詞向量的發(fā)展過程大致分為“規(guī)則-統(tǒng)計-深度學(xué)習(xí)”三個階段[1]。20世紀(jì)50至70年代,學(xué)者們用電腦模擬人腦,結(jié)果是一無所獲。70年代后,研究者們重新審視這個問題,提出了基于統(tǒng)計和數(shù)學(xué)模型的方法,加之機器學(xué)習(xí)的快速發(fā)展,NLP領(lǐng)域終于有了實質(zhì)性的突破。進入21世紀(jì)后,Bengio等人[2]在2003年提出的NNLM模型首次采用了神經(jīng)網(wǎng)絡(luò)來訓(xùn)練詞向量,為研究者們打開了新的思路。Hinton等人[3]在2006年首次提出了深度學(xué)習(xí)的概念,將人工智能領(lǐng)域的研究推向了高潮,隨后一系列經(jīng)典的詞向量模型被陸續(xù)提出,尤其是預(yù)訓(xùn)練技術(shù)成為主流的2018年,其訓(xùn)練出的詞向量在大多數(shù)NLP的下游任務(wù)中都表現(xiàn)出了優(yōu)異的性能,為后續(xù)發(fā)展帶來了更多可能性。
預(yù)訓(xùn)練技術(shù)來源于遷移學(xué)習(xí)[4],最初應(yīng)用在計算機視覺(Computer Vision,CV)領(lǐng)域,大獲成功后被應(yīng)用到NLP領(lǐng)域。其本質(zhì)是利用海量數(shù)據(jù)通過無監(jiān)督學(xué)習(xí),更準(zhǔn)確地說是自監(jiān)督學(xué)習(xí)的方式去訓(xùn)練一個模型,得到數(shù)據(jù)的通用特征,然后通過微調(diào)(Fine Tune)詞向量模型的參數(shù)以便應(yīng)用于不同的任務(wù)模型。因此,詞向量模型、任務(wù)模型越來越多地被稱為預(yù)訓(xùn)練模型、下游任務(wù)。
針對語義問題,Harris[5]提出了分布假說:“上下文相似的詞,其語義也是相似的”,Firth[6]提出了語言學(xué)概論,完善了這一假說,指出“詞的語義由其上下文決定”。針對編碼稀疏、維數(shù)災(zāi)難[7]問題,Hinton[8]提出了分布式表示方法,指將高維稀疏向量嵌入(也稱映射)到低維稠密向量中,該方法將信息分布在向量的各個維度上(即值不為0),此時詞向量也稱為詞嵌入(Word Embedding),具有更強的表示能力。
為了解決語義和維度這兩個問題,Bengio等人借鑒了基于統(tǒng)計的N元模型[9](N-Gram Model)的思想,提出了神經(jīng)網(wǎng)絡(luò)(概率)語言模型(Neural Network (Probabilistic) Language Model,NNLM)。
語言模型指在給定若干個詞的情況下預(yù)測下一個詞。假設(shè)S是某個句子,由詞w1,w2,…,wn組成,其中n表示句子長度。S出現(xiàn)的概率等于每個詞出現(xiàn)的條件概率的乘積,計算式表示為:
P(S)=P(w1,w2,…,wn)=
P(w1)…P(wn|w1,w2,…,wn-1)
(1)
式(1)的缺點很明顯,位置越靠后的詞的概率越難計算,涉及到的變量太多。N元模型為了簡化問題,利用了N-1階馬爾可夫假設(shè),即某個詞wi出現(xiàn)的概率僅與它前面的N-1個詞有關(guān),計算式表示為:
(2)
N的取值一般為1,2,3,對應(yīng)的語言模型分別稱為一元模型(Unigram)、二元模型(Bigram)、三元模型(Trigram),N取更大的值時,性能提升并不顯著,卻對資源的耗費愈發(fā)嚴(yán)重,因此N>3的情況極少。因此上下文的跨度不能太大,否則會出現(xiàn)長距離依賴[10](Long Distance Dependency)問題。
NNLM將深度學(xué)習(xí)的思想融入語言模型中,其結(jié)構(gòu)依次為輸入層(Input Layer)、嵌入層(Embedding Layer)、隱含層(Hidden Layer)、輸出層(Output Layer)。模型訓(xùn)練好后,詞向量就是輸入與嵌入矩陣的乘積。這直接啟發(fā)了后來的研究。與N元模型不同的是,NNLM中N可以取更大的值,減小了長程依賴性的影響。
NNLM所產(chǎn)生的詞向量,其語義只是基于上文,沒有包含下文,同時定長向量使得計算復(fù)雜度并不低,Google團隊對此提出了Word2Vec[11-12],包含兩種模型,結(jié)構(gòu)依次為輸入層、隱含層、輸出層。連續(xù)詞袋模型(Continuous Bag-of-Words,CBOW)的思想是通過上下文詞去預(yù)測中心詞,跳元模型(Skip-Gram)的思想與之相反,通過中心詞去預(yù)測上下文詞。上下文詞的數(shù)量需要人為設(shè)置。
為了減小損失函數(shù)的計算復(fù)雜度O(|V|)(|V|指詞表中詞的數(shù)量),Google提出了兩種訓(xùn)練方式:負(fù)采樣(Negative Sampling)和層次(Hierarchical)Softmax。負(fù)采樣指的是將預(yù)測的詞w0記為正例,然后根據(jù)詞頻和概率從詞表中抽取K個詞wi(i=1,2,…,K)作為負(fù)例,訓(xùn)練目標(biāo)就成了最大化似然函數(shù),如式(3)所示。
(3)
其中,context(w0)表示詞w0的上下文詞,P()是Sigmoid函數(shù)。這使得計算復(fù)雜度O(|V|)降到了O(K)。
層次Softmax指根據(jù)詞頻對詞表構(gòu)建哈夫曼樹(Huffman Tree),每個葉節(jié)點表示一個單詞,且從根節(jié)點到葉節(jié)點只有一條路徑,因此不再需要像普通的Softmax去遍歷詞表,而是計算從根到對應(yīng)葉的路徑的概率,計算復(fù)雜度便從O(|V|)降到了O(log|V|)。
需要注意的是,在應(yīng)用時,CBOW模型使用上下文詞向量作為詞表示,而Skip-Gram模型使用中心詞向量作為詞表示。
Facebook團隊在Word2Vec的基礎(chǔ)上提出了基于CBOW的FastText模型[13]和基于Skip-Gram的FastText模型[14](分別簡寫為CBOW-FT,SG-FT)。CBOW-FT的網(wǎng)絡(luò)結(jié)構(gòu)與CBOW的網(wǎng)絡(luò)結(jié)構(gòu)是相似的,但訓(xùn)練任務(wù)是對文檔進行分類,屬于監(jiān)督學(xué)習(xí)。在模型中,文檔的所有詞都會作為輸入,并且增加了詞級的N-Gram輸入(以“I am fine”的Bigram為例,會增加“I am”、“am fine”兩個輸入)。輸入層會對兩者都進行嵌入處理,考慮到N-Gram的數(shù)據(jù)量龐大以及存在重復(fù)的情況,作者做了哈希處理。
SG-FT的網(wǎng)絡(luò)結(jié)構(gòu)和訓(xùn)練任務(wù)與Skip-Gram是一樣的。輸入層除了獨熱編碼的詞向量以外,還增加了字符級的N-Gram嵌入(也稱子詞嵌入(Subword Embedding))輸入(以“word”的Trigram為例,會增加“
作者為了減小損失函數(shù)的計算復(fù)雜度,同樣采用了層次Softmax的訓(xùn)練方式。
FastText模型遇到未知的詞時能夠直接使用N-gram嵌入向量的和去表示該詞,提高了容錯能力,這是Word2Vec所不具備的。另外一點,FastText,正如其名,速度非常快,通常能夠?qū)⒑臅r單位為小時甚至是天的訓(xùn)練時間大幅縮短到分鐘之內(nèi)。
對于語義問題,Word2Vec與FastText僅利用了窗口范圍內(nèi)的局部上下文的信息,Pennington在此基礎(chǔ)上將語料庫中關(guān)于詞的全局共現(xiàn)統(tǒng)計信息考慮進來,提出了GloVe[15](Global Vectors for Word Repre-sentation)。需要注意的是,該模型不屬于神經(jīng)網(wǎng)絡(luò)語言模型,而是基于矩陣分解的方式。
作者用詞的共現(xiàn)矩陣來表示全局信息,假設(shè)矩陣為X,那么Xij表示詞wj出現(xiàn)在詞wi的上下文的次數(shù),Xi=ΣkXik表示所有詞出現(xiàn)在詞wi的上下文的次數(shù)。對于詞wj出現(xiàn)在詞wi的上下文的概率,用式子表示為:
P(wj|wi)=Xij/Xi
(4)
計算該矩陣需要遍歷一次語料庫,雖然計算量較大,但這僅是一次性的前期投入成本。
在Skip-Gram模型中,詞wj出現(xiàn)在詞wi的上下文的概率是以Softmax的方式計算的,如式(5)所示。
(5)
其中,W表示詞的數(shù)量。
結(jié)合式(4)與式(5),作者提出了最小二乘法的損失函數(shù),用式子表示為:
(6)
為了降低計算復(fù)雜度,作者用了3種方法:丟棄計算概率用的歸一化因子;對概率取對數(shù);引入權(quán)重函數(shù),如式(7)所示。
(7)
其中,α,xmax為超參數(shù)。
最終的損失函數(shù)如式(8)所示。
(8)
其中,bi,bj是偏置項。
26歲賺到人生第一桶金之后,他決定收權(quán),將加盟改為直營,收權(quán)的方式則是“一刀切”,想留下來的,產(chǎn)權(quán)全部回購,否則走人。
全局對數(shù)雙線性回歸模型的名稱便是由此而來。GloVe模型結(jié)合了矩陣分解和Word2Vec的優(yōu)勢,能夠充分利用全局統(tǒng)計信息和局部上下文信息,訓(xùn)練速度更快,且詞向量擁有了更豐富的語義信息。
Word2Vec,FastText,GloVe模型在語義上還存在一個缺陷:一個詞只有一種詞向量,即僅能表示詞的一種含義。由此這些模型又被稱為靜態(tài)詞向量模型。為了使多義詞在不同的語境下能夠擁有對應(yīng)的詞向量,學(xué)者們將研究重點放在了動態(tài)詞向量模型上,Peters等人提出的EMLo[16](Embeddings from Language Models)便是一個典范,其網(wǎng)絡(luò)結(jié)構(gòu)依次為輸入層、隱含層、輸出層。
輸入層是預(yù)訓(xùn)練的靜態(tài)詞向量,一般使用上文介紹的模型,但作者用的是Char-CNN與LSTM相結(jié)合的模型[17]。隱含層的雙向LSTM用來從前后兩個方向去“閱讀”文本(即綜合上下文的信息),其層數(shù)為2L(L是超參數(shù))。正向LSTM的任務(wù)是給定前文,預(yù)測下一個詞,反向LSTM的任務(wù)是給定后文,預(yù)測上一個詞,兩者目標(biāo)都是最大化預(yù)測概率,如式(9)所示。
(9)
為了降低計算復(fù)雜度,作者對概率取了對數(shù)。ELMo的思想體現(xiàn)在輸出層,該層會對雙向LSTM所訓(xùn)練出的隱含輸出(hidden output,簡寫為h)和輸入層進行組合得到詞向量,如式(10)所示。
(10)
其中,hi,0是輸入層的詞向量,hi,j(j≠0)是雙向LSTM的h拼接起來的向量。對于不同的下游任務(wù),作者認(rèn)為可以再有針對性地微調(diào)詞向量Ti,如式(11)所示。
(11)
其中,Θtask表示模型參數(shù),stask是歸一化的Softmax權(quán)重,γtask是縮放系數(shù)。
可以看出,ELMo的本質(zhì)其實就是根據(jù)完整的文本信息對靜態(tài)詞向量做調(diào)整,使詞向量能夠準(zhǔn)確反映出當(dāng)前語境下的含義,這便有效地解決了一詞多義的問題。在自然語言處理領(lǐng)域的6個典型下游任務(wù)的數(shù)據(jù)集上全面刷新了最優(yōu)成績。
ELMo使用大規(guī)模無監(jiān)督語料進行預(yù)訓(xùn)練和在下游任務(wù)中微調(diào)的做法為詞向量模型的研究提供了全新思路,成功證明了預(yù)訓(xùn)練和微調(diào)的可行性?;诖怂枷?NLP領(lǐng)域的學(xué)者大展身手,提出了更加優(yōu)秀的動態(tài)詞向量模型,尤其是OpenAI團隊的GPT[18](Generative Pre-Training)與Google團隊的BERT(Bidirectional Encoder Representations from Transfor-mers[19])。兩模型都是基于Transformer[20]改進得來的。
1.6.1 GPT
GPT是基于Transformer的解碼器改進而來的,屬于自回歸(Auto-Regressive)語言模型,也稱單向語言模型,即只能利用上文的信息去生成下文。這類模型適合自然語言生成類(Natural Language Generation,NLG)的下游任務(wù),如問答系統(tǒng)。
在預(yù)訓(xùn)練階段,GPT的目標(biāo)是最大化預(yù)測概率,如式(12)所示。
(12)
其中,N表示某文檔中詞的數(shù)量,k表示窗口大小。
在微調(diào)階段,GPT的目標(biāo)仍是最大化預(yù)測概率,不同的是此時的數(shù)據(jù)是有標(biāo)簽的,如式(13)所示。
(13)
其中,x表示文檔中的詞,共有m個,y表示對應(yīng)的標(biāo)簽。
為了更好地適應(yīng)遷移學(xué)習(xí),GPT對輸入和輸出做了精簡和通用的設(shè)計。對于輸入,會添加首尾標(biāo)記和分隔標(biāo)記;對于輸出,只需要接入全連接層或其它簡單結(jié)構(gòu)。
得益于Transformer強大的表征能力,GPT在公布的結(jié)果中,一舉刷新了自然語言處理領(lǐng)域的9項典型任務(wù)。但GPT的不足在于單向,利用不了下文的信息,無法發(fā)揮出Transformer的最佳效果。但讓人驚奇的是,GPT可以實現(xiàn)一些零樣本學(xué)習(xí)(Zero-Shot Learning[21])的任務(wù)。隨后為了進一步研究零樣本學(xué)習(xí),并加強GPT的泛化能力,OpenAI團隊提出了GPT-2[22]。進而為了繼續(xù)增強泛化能力,聚焦于更通用的模型,OpenAI團隊提出了規(guī)模更加龐大的GPT-3[23],該模型嘗試用更少的領(lǐng)域數(shù)據(jù),且不再進行微調(diào),訓(xùn)練好后直接應(yīng)用于下游任務(wù)。
GPT,GPT-2,GPT-3的模型結(jié)構(gòu)都是基于Transformer改進而來,創(chuàng)新性并不高,但證明了規(guī)模越來越大的語言模型是可行的,只要算力足夠強,性能還會不斷提升。
1.6.2 BERT
BERT是基于Transformer的編碼器改進而來的,屬于自編碼(Auto-Encoder)語言模型,也稱雙向語言模型,即能夠同時利用上下文的信息。這類模型適合自然語言理解類(Natural Language Understanding,NLU)的任務(wù),比如文本分類。
BERT在模型結(jié)構(gòu)上并無大的改進,其創(chuàng)新性體現(xiàn)在預(yù)訓(xùn)練上,不再是之前的模型那樣根據(jù)上文或下文去預(yù)測下一個詞,而是掩碼語言模型(Masked Language Model,MLM)和預(yù)測下一句(Next Sentence Prediction,NSP)兩個任務(wù)。MLM如同英語考試中的完型填空,模型會預(yù)先對15%的詞做掩碼處理,訓(xùn)練目標(biāo)便是預(yù)測這些詞。NSP的提出是為了更高層次地去理解文本,訓(xùn)練目標(biāo)是判斷兩個句子的關(guān)系,連貫的或是隨機的。
BERT將無監(jiān)督的預(yù)訓(xùn)練和有監(jiān)督的微調(diào)應(yīng)用到深層的雙向結(jié)構(gòu)中,彌補了GPT單向的不足,在自然語言處理領(lǐng)域的11項基本任務(wù)上都獲得了顯著的效果提升。BERT可謂是集前期研究大成之作,極大地推動了自然語言處理的發(fā)展,成為一個里程碑事件,自此預(yù)訓(xùn)練和微調(diào)的方法成為了主流。
大規(guī)模的預(yù)訓(xùn)練語言模型都存在參數(shù)量、數(shù)據(jù)量過大的問題,從而導(dǎo)致極大的資源消耗。對此,目前主要的輕量化方法有兩種:剪枝(Pruning[24])和知識蒸餾(Knowledge Distillation[25])。
剪枝技術(shù)是指通過減少神經(jīng)網(wǎng)絡(luò)中的冗余部分,從而達到壓縮模型的目的?;贐ERT,McCarley等人[26]為提升問答系統(tǒng)的速度,在保證精確度損失最小的情況下裁剪了隱含層和全連接層的參數(shù),另外又研究了針對Transformer的冗余結(jié)構(gòu)的剪枝方法;Michel等人[27]受到門控機制的啟發(fā),通過裁剪注意力頭加快了BERT約17.5%的速度,且性能在機器翻譯和自然語言推理任務(wù)上幾乎沒影響;Gordon等人[28]不同程度地去除掉接近零的參數(shù),發(fā)現(xiàn)30%~40%的裁剪程度不會影響精確度;Lan等人[29]提出了ALBERT,對每個注意力層使用同樣的權(quán)重矩陣,將參數(shù)減少至BERTlarge的1/18,速度加快了1.7倍。
知識蒸餾是指將強力的大模型所包含的知識,蒸餾到輕量的小模型中,使得后者能擁有前者的能力,就像教師對學(xué)生傳道授業(yè)解惑,因此大小模型又分別稱為教師(Teacher)模型、學(xué)生(Student)模型?;贐ERT,Sanh等人[30]提出了更小、更快、更廉價、更輕量的DistilBERT,它的規(guī)模只是BERT的40%左右,但語言理解能力依然強悍,并且速度加快了約60%;Jiao等人[31]在預(yù)訓(xùn)練和微調(diào)兩個階段都進行蒸餾,實現(xiàn)了TinyBERT,它不僅掌握到了通用知識,還學(xué)到了特定任務(wù)的知識;Sun等人[32]只在輸出層進行蒸餾,并提取出教師模型的中間層的知識輸入給學(xué)生模型,最終只損失了些許性能。
為了使模型學(xué)習(xí)出更準(zhǔn)確的語義表示,除了所給文本的上下文語境之外,加入外部知識是必要的。對此,百度團隊提出了ERNIE[33]、清華大學(xué)團隊提出了ERNIE(THU)[34],兩模型的結(jié)構(gòu)與BERT基本一致,區(qū)別在于BERT是對字進行掩碼,而ERNIE是對詞進行掩碼,并且在預(yù)訓(xùn)練階段將知識圖譜的信息實體整合到模型中,要求模型同時匯聚上下文和先驗知識的信息;Liu等人[35]提出了K-BERT模型,將各個領(lǐng)域的下游任務(wù)的知識整合起來進行預(yù)訓(xùn)練;Peters等人[36]提出了KnowBERT模型,一種將先驗知識嵌入到模型中的通用方法。
對GPT-3進行改進和優(yōu)化得到GPT-3.5后,進一步地,受InstructGPT[37]的啟發(fā),OpenAI團隊通過專業(yè)的人工標(biāo)注訓(xùn)練數(shù)據(jù)和來自人類反饋的強化學(xué)習(xí)方法(Reinforcement Learning from Human Feedback,RLHF)調(diào)整模型參數(shù),讓GPT-3.5具備了更加逼真、自然的語言能力?;贕PT-3.5開發(fā)的ChatGPT,代表著自然語言生成領(lǐng)域的巨大突破,使得計算機能夠與人類進行自然語言交互,任何領(lǐng)域的問題都可以解答,類似于百科全書,還能實時學(xué)習(xí)新的知識。一經(jīng)推出便引起了全社會的極大關(guān)注,具有革命性的意義,讓人們不得不重新思考人工智能的發(fā)展及其影響。
在ChatGPT之后,學(xué)術(shù)界、工業(yè)界迅速意識到了通用大模型的主流趨勢,紛紛加入到了對該方向的研究。大模型的有復(fù)旦大學(xué)的MOSS、清華大學(xué)的ChatGLM、百度的文心一言、阿里的通義千問、亞馬遜(Amazon)的Titan等,小工具的有ChatPDF,ChatDOC,ChatPPT,ChatExcel,ChatPaper,各種AI問答機器人等。
遵循GPT,GPT-2,GPT-3和GPT-3.5的研究路徑,OpenAI團隊提出了更加復(fù)雜和強大的GPT-4[38]。與ChatGPT相比,GPT-4具有以下優(yōu)勢:接受圖像作為輸入,具有多模態(tài)能力;能夠處理超過25 000個詞的超長文本;實際應(yīng)用中更具創(chuàng)造性和技術(shù)性;引入了更多的人工反饋并實時監(jiān)控,保證安全性。
從20世紀(jì)50年代,自然語言處理取得了長足的發(fā)展,該文概述了主要成果,并介紹了近些年的擴展、改進和應(yīng)用現(xiàn)狀。當(dāng)前存在的挑戰(zhàn)在于語料、規(guī)模和安全三方面:獲取大規(guī)模且高質(zhì)量的語料非常困難,數(shù)據(jù)標(biāo)注是必需的;規(guī)模不斷增大,模型更加復(fù)雜和黑盒化,訓(xùn)練和部署需要耗費大量的能源和資源,其預(yù)測結(jié)果和內(nèi)部決策過程也難以解釋;科研人員需要及時維護以嚴(yán)防惡意攻擊和惡意內(nèi)容,同時需要遵循相關(guān)法律和標(biāo)準(zhǔn),避免產(chǎn)生危害。
未來的研究既會致力于解決語料、規(guī)模、安全的問題,也會加快實踐多模態(tài)的思想,并結(jié)合其它領(lǐng)域共同發(fā)展,單模態(tài)、單領(lǐng)域信息的局限性無法避免,將圖像、文本、語音、視頻等信息綜合起來學(xué)習(xí),勢必會取得更大進展。