王海寧/WANG Haining
(英特爾(中國)有限公司,中國北京100013)
自然語言處理(NLP)是基于自然語言理解和自然語言生成的信息處理技術。這里的自然語言是指任何一種人類語言,例如中文、英語、西班牙語等,并不包括形式語言(如Java、Fortran、C++等)。
自然語言處理的歷史可以追溯到17世紀。那時萊布尼茨等哲學家對跨越不同語言的通用字符進行探索,認為人類思想可以被歸約為基于通用字符的運算。雖然這一觀點在當時還只是理論上的,但卻為自然語言處理技術的發展奠定了基礎。
作為人工智能的一個重要領域,當代自然語言處理技術與人工智能技術的興起和發展是一致的。1950年,圖靈提出了著名的基于人機對話衡量機器智能程度的圖靈測試。這不僅是人工智能領域的開端,也被普遍認為是自然語言處理技術的開端。20世紀50年代至90年代,早期自然語言處理領域的發展主要基于規則和專家系統,即通過專家從語言學角度分析自然語言的結構規則,來達到處理自然語言的目的。
從20世紀90年代起,伴隨著計算機運算速度、存儲容量的快速發展,以及統計學習方法的成熟,研究人員開始使用統計機器學習方法來處理自然語言任務。然而,此時自然語言的特征提取仍然依賴人工,同時受限于各領域經驗知識的積累。
深度學習算法于2006年被提出之后,不僅在圖像識別領域取得了驚人的成績,也在自然語言處理領域得到了廣泛應用。不同于圖像的標注,自然語言的標注領域眾多并具有很強的主觀性。因此,自然語言處理領域不容易獲得足夠多的標注數據,難以滿足深度學習模型訓練對大規模標注數據的需求。
近年來,GPT、BERT等預訓練語言模型可以很好地解決上述問題?;陬A訓練語言模型的方法本質上是一種遷移學習方法,即通過在容易獲取、無需人工標注的大規模文本數據基礎上依靠強大算力進行預先訓練,來獲得通用的語言模型和表示形式,然后在目標自然語言處理任務上結合任務語料對預訓練得到的模型進行微調,從而在各種下游自然語言處理任務中快速收斂以提升準確率。因此,預訓練語言模型自面世以來就得到了迅速發展和廣泛應用,并成為當前各類自然語言處理任務的核心技術。
自然語言處理涉及眾多任務。從流水線的角度上看,我們可以將這些任務劃分為3類:完成自然語言處理之前的語言學知識建設和語料庫準備任務;對語料庫開展分詞、詞性標注、句法分析、語義分析等基本處理任務;利用自然語言處理結果完成特定目標的應用任務,如信息抽取、情感分析、機器翻譯、對話系統、意圖識別等。其中,將自然語言轉變為計算機可以存儲和處理的形式(即文本的表示)是后續各類下游自然語言處理任務的基礎和關鍵。
字符串是最基本的文本表示方式,即符號表示。這種表示方式主要應用在早期基于規則的自然語言處理方式中。例如,基于預定義的規則對句子進行情感分析:當出現褒義詞時,句子表達正向情感;當出現貶義詞時,句子表達負向情感。顯然,這種使用規則的方式只能對簡單的語言進行分析處理,在遇到矛盾的情況下系統很可能無法給出正確的結論。
以向量的形式表示詞語,即詞向量,是廣泛應用于目前自然語言處理技術中的表示方式。詞向量的表示有多種方式。其中,最簡單的是基于詞出現次數統計的獨熱表示和詞袋表示。這類表示方式的主要缺點在于,不同的詞需要用完全不同的向量來表示,維度高并且缺乏語義信息的關聯,同時存在數據稀疏問題。
另外一大類詞向量表示是基于分布式語義假設(上下文相似的詞,其語義也相似)的分布式表示。這種詞向量表示具體又可以分為3類:
(1)基于矩陣的詞向量表示。該方法基于詞共現頻次構建體現詞與上下文關系的(詞-上下文)矩陣。矩陣每行表示一個詞向量w。第j個元素w的取值可以是w與上下文的共現次數,也可以由基于其共現概率進行的點互信息(PMI)、詞頻-逆文檔頻率(TF-IDF)、奇異值分解(SVD)等數學處理來獲得。這種方法更好地體現了高階語義相關性,可解決高頻詞誤導計算等問題。其中,上下文可以是整個文檔,也可以是每個詞。此外,我們也可以選取w w附近的N個詞作為一個N元詞窗口。
(2)基于聚類的詞向量表示。這類方法通過聚類手段構建詞與上下文之間的關系。例如,布朗聚類是一種基于N-gram模型和馬爾可夫鏈模型的自底向上的分層聚類算法。在這種算法中,每個詞都在且僅在唯一的一個類中。在初始的時候,每個詞均被獨立分成一類,然后系統將其中的兩類進行合并,使得合并之后的評價函數(用以評估n個連續的詞序列能否組成一句話的概率)達到最大值。系統將不斷重復上述過程,直至獲得期望的類數量為止。
(3)基于神經網絡的語言模型,也稱為詞嵌入表示。這類方法將詞向量中的元素值作為模型參數,采用神經網絡結合訓練數據學習的方式來獲得語言模型參數值。基于神經網絡的語言模型具體又包括靜態語言模型和動態語言模型。這兩種語言模型的區別在于:靜態語言模型通過一個給定的語料庫得到固定的表示,不隨上下文的變化而變化,例如Word2vec、GloVe和Fasttext模型;動態語言模型由上下文計算得到,并且隨上下文的變化而變化,例如CoVe、ELMo、GPT和BERT模型。其中,基于神經網絡的語言模型充分利用了文本天然的有序性和詞共現信息的優勢,無需人工標注也能夠通過自監督學習從文本中獲取語義表示信息,是預訓練語言模型的重要基礎,也是目前詞表示研究與應用的熱點。
2003年,Y.BENGIO首次提出神經網絡語言模型。2017年之前,在進行自然語言處理時人們常用多層感知機(MLP)、卷積神經網絡(CNN)和循環神經網絡(RNN),包括長短期記憶(LSTM)網絡,來構建神經網絡語言模型。由于每層都使用全連接方式,MLP難以捕捉局部信息。CNN采用一個或多個卷積核依次對局部輸入序列進行卷積處理,可以比較好地提取局部特征。由于適用于高并發場景,較大規模的CNN模型經過訓練后可以提取更多的局部特征。然而,CNN卻難以捕獲遠距離特征。RNN將當前時刻網絡隱含層的輸入作為下一時刻的輸入。每個時刻的輸入經過層次遞歸后均對最終輸出產生影響,這就像網絡有了歷史記憶一樣。RNN可以解決時序問題和序列到序列問題,但是這種按照時序來處理輸入的方式使得RNN很難充分利用并行算力來加速訓練。LSTM是一種特殊的RNN,它對隱含層進行跨越連接,減少了網絡的層數,從而更容易被優化。
2017年,來自谷歌的幾位工程師在不使用傳統CNN、RNN等模型的情況下,完全采用基于自注意力機制的Transformer模型,取得了非常好的效果。在解決序列到序列問題的過程中,他們不僅考慮前一個時刻的影響,還考慮目標輸出與輸入句子中哪些詞更相關,并對輸入信息進行加權處理,從而突出重要特征對輸出的影響。這種對強相關性的關注就是注意力機制。Transformer模型是一個基于多頭自注意力機制的基礎模型,不依賴順序建模就可以充分利用并行算力處理。在構建大模型時,Transformer模型在訓練速度和長距離建模方面都優于傳統的神經網絡模型。因此,近年來流行的GPT、BERT等若干超大規模預訓練語言模型基本上都是基于Transformer模型構建的。Transformer模型整體架構如圖1所示。

圖1 Transformer模型架構[7]
自注意力機制的本質是學習序列中的上下文相關程度和深層語義信息。然而,隨著輸入序列長度的增加,學習效率會降低。為了更好地處理長文本序列,Transformer模型又衍生出一些“變種”,例如Transformer-XL。Transformer-XL采用段級循環和相對位置編碼的優化策略,將Transformer中固定長度的輸入片段進一步聯系起來,具備更強的長文本處理能力。
廣義預訓練語言模型泛指經過提前訓練得到的語言模型。各類神經網絡語言模型在理論上都可以做預訓練處理。而目前自然語言處理領域常涉及的預訓練語言模型,通常是指一些參數數量過億甚至超千億的大規模語言模型。這些模型的訓練依賴強大算力和海量數據。典型的大規模預訓練語言模型包括GPT系列、BERT、XLNet等。此外,這些模型的各種改進模型也層出不窮。
2.2.1 GPT系列
2018年6月,OpenAI公司提出初代GPT模型,開啟了具有“基于大量文本學習高容量語言模型”和“對不同任務使用標注數據來進行微調”兩個階段的自然語言處理預訓練模型大門。GPT模型基于12層Transformer基礎模型構建了單向解碼器,約有1.17億個參數。具體解碼器結構、訓練目標和針對不同下游任務的輸入轉換如圖2所示。

圖2 Transformer解碼器結構和訓練目標(左)及針對不同下游任務的輸入轉換(右)[4]
OpenAI公司在2019年2月進一步提出GPT模型的升級版本,即GPT-2。由于擔心該技術可能會被惡意利用,研究團隊并沒有對外發布預訓練好的GPT-2模型,而是發布了一個小規模模型。GPT-2保留了GPT的網絡結構,直接進行規模擴張,即堆疊更多層的Transformer模型,并使用10倍于GPT模型的數據集進行訓練,參數數量超過15億。隨著規模的增加,GPT-2也獲得了更好的泛化功能,包括生成前所未有的高質量合成文本功能。雖然在部分下游任務上尚未超過當時的最優水平,但是GPT-2證明了大規模預訓練詞向量模型在遷移到下游任務時,可以超越使用特定領域數據進行訓練的語言模型,并且在擁有大量(未標注)數據和具備足夠算力時,使下游任務受益于無監督學習技術。
GPT-3模型于2020年5月被提出,是目前最強大的預訓練語言模型之一。GPT-3在GPT-2的基礎上進一步進行了規模擴張,使用高達45 TB的數據進行訓練,參數數量高達1 750億。正是這樣巨大的網絡規模,才使得GPT-3模型在不進行任何微調的情況下,可以僅利用小樣本甚至零樣本就能在眾多下游任務中超越其他模型。OpenAI公司雖未開源GPT-3模型,但是提供了多種應用程序接口(API)服務以供下游任務調用。
2.2.2 BERT
BERT是由谷歌公司于2018年10月提出的。與單向的GPT模型不同,BERT基于Transformer模型構建了多層雙向編碼器。
BERT模型包括兩個訓練任務:一個是掩碼語言模型(MLM),另一個是下一句預測(NSP)。MLM可以很好地解決雙向建模時逆序信息泄露的問題;NSP則可以很好地理解兩段文本之間的關系,適用于完成閱讀理解或文本蘊含類任務。BERT的每個下游任務都采用相同的預訓練模型架構并使用預訓練模型的參數來進行初始化。BERT的預訓練和微調過程如圖3所示。

圖3 BERT的預訓練和微調過程[5]
BERT的設計團隊按照模型規模的大小將BERT分為含有1.1億個參數的BERT和含有3.4億個參數的BERT,并與其他模型(包括GPT)進行對比。對比結果表明,BERT模型在GLUE、SQuAD、SWAG的 11項NLP任務評估中全面刷新了最佳成績紀錄,甚至在SQuAD測試中超越了人類。
BERT模型是近年來NLP領域發展的一大里程碑。BERT陸續衍生出了許多優化的模型。例如,顯著增強了長文本理解能力的XLNet、占用更少存儲空間的ALBERT、具備更強大文本生成能力的BART、能夠學習視頻知識的VideoBERT等。這些模型推動了NLP的快速發展。
2.2.3 XLNet
由于在預訓練的輸入數據中人為地引入了掩碼,BERT模型忽略了被掩碼信息之間的依賴性。這將導致預訓練數據與微調階段使用的真實數據之間產生微小差異。針對上述問題,卡內基梅隆大學和谷歌公司于2019年6月進一步提出了一種基于Transformer-XL的自回歸語言模型,即XLNet模型。
通過置換語言建模(PLM),XLNet對序列中輸入信息進行排列重組,可實現雙向上下文的建模,并形成雙流自注意力機制,以解決由PLM重新排列所引入的位置信息混淆問題。如圖4所示,XLNet用內容流和查詢流兩種不同的掩碼矩陣來進行預測。其中,內容流用于保留詞的語義信息,可以看到詞本身;查詢流不能看到詞本身,用于保留詞的位置信息,僅在預訓練階段使用。

圖4 XLNet雙流自注意力機制[14]
此外,由于XLNet使用Transformer-XL來替代Transformer,并將其作為特征提取器,因此XLNet擁有比BERT更強的長文本理解能力。
預訓練語言模型在各類NLP任務中的效果是顯而易見的。隨著參數規模的擴大和訓練數據的增加,預訓練語言模型可以獲得更好的準確性和泛化性。然而,這是以巨大算力支持為前提的,只有少數大公司才能夠承擔起這種高昂的算力成本。這個問題在GPT-3模型的研發過程中表現得尤為突出。據報道,為了訓練GPT-3模型,微軟在Azure云上構建了一個包含1萬個GPU、28.5萬個CPU內核和400 Gbit/s網絡連接的超級計算系統。其中,GPT-3訓練一次的費用約為460萬美元。在這種情況下,進一步發現、驗證和解決模型的潛在問題都非常困難。對此,微軟研發團隊也認為,當系統出現Bug時,他們也無法對模型進行再訓練。
相應地,預訓練模型在應用時也需要較大算力和內存支持,往往需要多塊高端人工智能芯片或者服務器集群來支撐模型的部署。為了降低預訓練模型的部署門檻,業界往往采用量化、剪枝、蒸餾等方法對模型進行壓縮,以形成更加輕量化的預訓練模型。
(1)量化是指將模型參數轉換為更少比特數來存儲和運算,即將模型的精度降低。雖然量化損失了一定的精度,但是它在可接受的準確率范圍內能大大提升模型的訓練和推理速度。例如,BF16是一種專為加速深度學習訓練而設計的16位數字精度格式,在保留FP32(32位浮點數)指數位數的同時減少了16位尾數位。將模型參數從FP32轉換為BF16后,模型可以在維持相近準確率的同時實現訓練速度的數倍提升。
(2)剪枝是指去掉模型參數中冗余或者不重要的部分,即減少模型參數。具體來說,剪枝包括元素剪枝和結構剪枝兩種方式。其中,元素剪枝是指去掉單個絕對值過小或者對模型影響過小的參數;結構剪枝是指去掉整塊模型結構,例如減少多頭注意力的數量,或者減少堆疊的Transformer塊數量等。
(3)蒸餾是指較小規模的模型(稱為學生模型)從較大規模的模型(稱為教師模型)中學習知識,并替代學生模型從訓練數據中學習知識的過程。典型的蒸餾模型包括DistilBERT、TinyBERT、MobileBERT等。這些模型與BERT模型的對比如表1所示。

表1 蒸餾模型效果對比
在上述優化方法中,量化和剪枝是比較常用的方法。此外,還有其他比較成熟的優化工具,例如TensorFlow Model Optimization、TensorFlow Lite、TensorRT、OpenVINO、PaddleSlim等。由于蒸餾的壓縮比更大,它可以和量化、剪枝疊加使用。
自然語言處理技術經歷了近百年的發展。機器翻譯、智能客服、信息檢索與過濾、情感分析和文本生成等,在教育、醫療、司法、互聯網等行業中得到了廣泛的應用。近年來,預訓練語言模型的提出和算力的快速提升,將自然語言處理技術的發展推向了新的高度,使自然語言處理技術在某些領域達到甚至超越了人類水平。然而,目前大規模預訓練語言模型仍需要極大的算力支持,訓練模型所需的成本仍然較高,能源消耗和碳排放也并不經濟,距離落地應用尚有距離。因此,研發出更加輕量的預訓練語言模型,是未來重要的發展方向。