劉群:預訓練語言模型研究進展和趨勢展望

  • 2020 年 12 月 1 日
  • AI

作者 | 戚路北
編輯 | 青暮
自2018年下半年開始,到現在為止,預訓練語言模型的發展基本呈現爆發趨勢,研究人員數目越來越多,研究方向也越來越廣。
近日,在第十九屆中國計算語言學大會(CCL2020)上,華為諾亞方舟實驗室語音語義首席科學家劉群介紹了預訓練語言模型研究進展和趨勢展望。
演講內容包括自然語言處理的預訓練方法的背景,預訓練語言模型的近期進展,華為課題組的成員們做的工作,以及目前的成就與未來的展望。
劉群是自然語言處理和機器翻譯領域的國際著名專家,研究方向包括多語言資訊處理、機器翻譯模型、方法與評價等。2012 年 7 月之前,劉群是中國科學院計算技術研究所的研究員和自然語言處理研究組負責人。2012 年 7 至 2018 年 6 月,劉群任都柏林城市大學教授、愛爾蘭 ADAPT 研究中心(前身 CNGL 研究中心)自然語言處理主題負責人。
2018 年 7 月開始,他正式加入華為諾亞方舟實驗室,任語音語義首席科學家,主導語音和自然語言處理領域的前沿研究和技術創新,除了語音、對話、翻譯、多模態以外,其實驗室也在重點布局預訓練語言模型。
以下是演講全文,AI科技評論進行了不改變原意的整理。

1

自然語言處理的預訓練方法的背景

自然語言處理的預訓練方法屬於自然語言的表示學習,自然語言表示學習的形成已經經過了長期的歷史發展。
首先,1948年N-gram分散式模型被提出來,這是最初的語言模型。1986年出現了分散式語義表示,即用一個詞的上下文來表示該詞的詞義。2003年神經語言模型被提出,開始使用神經網路來進行語言建模。
2013年word2vec的提出,標誌著神經網路方法開始在NLP領域獲得成功,word2vec將詞語從一個符號空間映射到了一個向量空間,使得NLP中大規模使用神經網路方法成為可能。到2018年,出現了預訓練語言模型。
不管是統計方法還是神經網路方法,都是一種基於數據的方法。如果數據不夠的話,模型就無法有效建立。但是現實生活中,數據永遠是一個很大的問題。在實際應用場景中,我們得到的很多數據都是無標註的,在這種情況下傳統模型就無法解決實際問題。
預訓練的思想是,在利用標註數據之前,先利用無標註的數據也就是純文本數據,去訓練一個模型,這個模型能夠學到一些潛在的跟標註無關的知識。然後在具體的任務上,預訓練模型就可以利用大量的無標註數據訓練所得到的知識。
第一代自然語言處理預訓練模型是詞向量模型。詞向量模型是把大量的無標註的文本送到一個比較簡單的神經網路裡面,經過訓練,每個詞都會被賦予一個靜態的向量。
詞的靜態向量在空間分布上有一個非常好的特點,即相似的詞會聚在一起。詞與詞之間的關係也會以一種向量的形式得到體現,從而實現了符號空間到向量空間的映射。
第二代自然語言處理的預訓練模型,就是我們今天研究和使用的預訓練語言模型。
預訓練語言模型是詞向量模型的進化,它的本質其實是有上下文的詞向量模型。預訓練語言模型的訓練過程是,首先給句子中的每個詞賦予一個靜態向量,然後它會跟句子的上下文詞進行交互,最後就得到了這個詞在句子中的變化的詞向量。這種特殊的詞向量模型我們叫做預訓練語言模型。
預訓練語言模型有一個很重要的特點,它既會給每一個句子賦予一個概率,同時還會給每個詞賦予一個表示或一些特徵。
利用預訓練語言模型的這個特點,就可以使用現實生活中幾乎無窮無盡的無標註文本,來訓練預訓練語言模型,然後就能把經過訓練的預訓練語言模型,用在任何的下游任務上。
這不僅可以使下游任務的性能得到非常大的提高,還可以大大降低下游任務所依賴的標註語料的規模。
實際上,預訓練語言模型的出現,幾乎使所有的下游任務的性能都得到了很大的提高,使得自然語言處理技術又上了一個台階,因此這是一個具有重大意義的突破。
在實際應用中,使用預訓練語言模型可以分成兩個過程,一個叫預訓練,一個叫微調。首先在大量的文本上訓練出一個預訓練語言模型,然後在下游的任務上,根據實際情況對得到的預訓練語言模型進行微調。
Transformer模型是預訓練語言模型的主要框架,它的主要特點就是詞與詞之間可以互相關注。
類似於卷積神經網路中具有多個卷積核,並且每個卷積核會自動去會分配不同的權重,Transformer的基本結構的每一層都由多頭的自注意力網路,以及一個前向的神經網路共同組成。
自注意力機制是預訓練語言模型中非常有趣的機制。通過一些可視化工具,我們可以看到不同的自注意力頭呈現出不同的特點或不同的關注結構,比如關注句子的第一個詞、相鄰的詞、中心詞甚至是句子結尾的標點符號。所有的關注資訊,或者說詞的注意力都可以在可視化圖裡看到。
預訓練語言模型出現以來發展得非常迅速,目前已經演化形成了一個家族。

2

預訓練語言模型的近期進展

預訓練語言模型的近期進展包括以下幾個方面:
1.更強大,也被戲稱為叫大力出奇蹟。
2.更小巧,即怎麼把做模型做的更小、更快。
3.更優秀、功能更多、性能更高、訓練更快的模型。
4.更聰明,即怎麼引入外部知識。
5.更能幹,即預訓練語言模型如何影響了自然語言處理以外的一些領域。
1.更強大
預訓練語言模型幾乎成為了大公司之間的軍備競賽,目前學術界還還很難參與這種軍備競賽。
很多大企業都將自己的預訓練語言模型做的越來越大,彷彿沒有終點,並且這種趨勢還在不斷加強。
預訓練語言模型的做大不僅僅是帶來量的提高,更帶來了模型使用性質的變化。
最早在詞向量模型時期,整個自然語言處理就被帶入了神經網路時代。在神經網路時代,單一的CPU已經不能滿足需求了。可以通過GPU,在不需要進行過多額外計算的情況下,做到在整個詞表上進行詞的選擇,這在以前的SMT上是不可想像的。正是有了GPU,我們才可以通過詞向量模型這類神經語言模型來完成這類工作。如果沒有GPU支援,或者用以前的統計方法,是難以想像的。
預訓練語言模型通過使用更大的GPU,更多的數據,也帶來了更大的變化,即微調的模式。微調為下游任務大致規定了幾種固定的模式,包括句子分類、句子關係的分類、詞語序列標註,以及QA任務中常見的句子片段的提取等。
以前解決每個NLP問題,都要先設計模型。現在通過微調這一簡單的模式,我們不再需要去為每個任務去設計特定的NLP模型,而可以將所有的NLP任務都納入幾個模式。
GPT-3有一個非常吸引人的地方,就是它幾乎無需做微調,並且它的演示效果也很好。
GPT-3給我們帶來了非常大的衝擊。這個模型有著極高的訓練成本,使得實際上絕大部分的企業和科研機構都無力承擔。它的1750億參數比BERT-base模型大了100倍,比 GPT-2大了10倍。它單次訓練需要1萬億單詞的訓練數據,以及1200萬美元的訓練成本,能夠承擔這種訓練成本的企業在世界範圍內也非常少。
雖然它的訓練成本如此之高,但是它的效果非常令人吃驚。以前我們解決特定的問題,都需要專門去找語料,做專門的訓練才能做。現在這個模型,只要是需要的功能都可以直接實現,基本不用訓練。
還有一些我們原來覺得很難做到的事情,GPT-3也能做到,例如算術計算、寫程式碼等等。它還能夠很細緻的區分56和49這兩個詞,甚至在數量上都能區分出來,如此的細膩度令人吃驚,這也給它的商業價值也帶來巨大的想像空間。
很多人都在想,大算力會不會成為預訓練語言模型的瓶頸?實際上,算力最終並不會成為瓶頸。上世紀90年代IBM提出統計機器翻譯模型的時候,大家幾乎都重複不了。但是99年以後,統計機器翻譯模型基本上變成普遍的、所有人都能用的模型了。
深度學習也是一樣,深度學習在GPU出現以前,也是曲高和寡,然而 GPU的出現,突破了算力瓶頸以後,也變成了一種普通的工具。那麼GPT-3這樣的模型,現在的成本雖然非常高,但是我們大家可以去憧憬一下,未來的某一天,它或許也會變成一種非常普遍的工具。
訓練大模型實際上是很困難的,它並不是在單一的CPU或者GPU上進行訓練,而是在多個硬體的組合結構上進行訓練。但同時,每引入一種更複雜的硬體結構,也會帶來更多的問題。上圖為一些常見的用來解決這些問題的技術。下面著重介紹三維並行訓練技術和稀疏注意力加速技術。
三維並行訓練技術,是指把數據和模型進行各種維度的切分,包括數據並行、pipeline並行和模型並行。模型並行又包括不同類型的模型變形,通過把整個數據和模型進行三維的切分,建立三維並行坐標和物理設備之間的映射,然後每一個區域運行一小塊的方法。
稀疏注意力加速技術也是一個被證明有效的技術,GPT-3就使用了這個技術。它的原理是把一個注意力矩陣分成兩個小型矩陣的乘積,這是一個可以有效處理更長注意力的機制,這也是目前為止被證明非常有效的辦法。
2.更小巧
目前的大型預訓練模型,不但訓練麻煩,而且推理時間也很長,因此只能用在雲端應用上,在設備端應用有明顯的局限性。因此訓練出更小的模型,實際上也具有非常大的應用價值。
就華為來說,華為目前的業務方向除了手機業務外,也在做大量的用於物聯網的小設備。既然希望將模型用到小設備上,我們就面臨將模型進行加速和壓縮的問題。
預訓練語言模型就形成了這兩種趨勢。一方面是人們把模型越做越大,去探索模型能力的邊界。另外一方面就是模型越做越小,讓它在各種下游任務上形成生產力,即在手機端等各種小設備上能夠單獨運行。
目前模型壓縮這一方面研究也非常多,主要包括三大類技術,一類是基於知識蒸餾的預訓練語言模型壓縮,另一類是基於剪枝的預訓練語言模型壓縮,還有一類是基於量化的預訓練語言模型壓縮。
基於剪枝的預訓練語言模型壓縮,就是基於一定的準則,去除掉參數矩陣的冗餘部分。比如在神經網路模型中,我們可以去掉一些冗餘的神經元節點,和神經元連接,使得模型變小一點。
基於量化的預訓練語言模型壓縮,就是減少數值表示所需要的比特值。目前我們使用的GPU都是用32位的浮點數計算,計算代價非常高。我們可以將它量化為8位的浮點數,甚至4位的浮點數、2位的浮點數,這樣運算過程就得到了簡化。
還有一些別的壓縮技術,比如矩陣參數分解、參數共享、模型架構設計與搜索。
矩陣參數分解就是將一個大矩陣,分解成兩個小矩陣的乘積。
參數共享有很多方式,比如Transformer有很多層,各層之間可以共享其中一些參數。而ALBERT,就是所有的層共享其中一層的參數。共享參數的好處就是參數量大大減少,但實際上在推理時間上並不能大幅度減少,所以它能帶來的好處還是有限。
模型架構設計與搜索這方面的發展,其實跟近年來自動機器學習的發展有關係,我們希望通過自動機器學習,能夠去搜索出更好的、更精簡的架構。
3.更優秀
目前看來Transformer模型架構確實非常優秀,當下也很難去做大的改動。真正做出一些影響力的工作是transformer XL,它的貢獻是引入了recurrent的思想,以及引入了相對位置編碼。而其它方面的話,大的改動很少。
另外就是試圖降低複雜度,因為attention機制是每兩個詞之間都要做一次 attention,這樣的話attention的計算數量就是一個句子長度的平方級。
在日常處理更長的文本的時候,都會面臨這樣的問題。目前我們需要的文本長度一般都不能超過1024,很多任務甚至只能用512或者256。很多研究工作速度希望把它的計算數量從平方量級降到線性量級,從而可以使語言模型處理更長的文本,所以目前這方面的研究也非常多。
除了去尋找更好的模型結構,我們還需要訓練更複雜的任務。現在BERT訓練的過程實際上並不高效,它的訓練時間很長,很多學者就試圖在這方面去改進,提出更好的訓練任務。
Baseline是基礎的預訓練語言模型的訓練,包括LM、MLM和NSP等訓練任務。除此之外,大家也提出了各種各樣的新的訓練任務來進行改進。
BERT就提出了幾種新的訓練方法,一種叫做next sentence prediction(NSP),就是根據前文預測下一個句子。
另一種叫做whole word masking,這跟BERT的設計有關係。因為BERT里很多詞都被拆分成一個個小單位,這樣單獨預測其中一個subword難度就比較小。通過把小單位合起來,加大訓練難度,預測效果就會更好一點。
以下還列舉了其它模型的一些訓練任務。
replaced token prediction:也就是將一個詞給換掉,然後來預測這個詞是換掉之後的詞還是原來的詞。
Sentence order prediction:將兩個句子的順序給顛倒,來檢測哪種順序是正確的。
Denoising Autoencoder:這個是更複雜的訓練任務,它是對一個句子進行插入、刪除、替換等操作之後,再將它還原出來。
Multi-task Learning:它同時使用了多種訓練任務。
Generator and discriminator:它是用一個生成器去替換一些詞,然後由判別器來判斷每個詞是否替換。它的好處在於一個句子中的所有詞都可以做錯誤的反向傳播,所有詞都能被我們使用,而BERT一個句子只能利用15%的詞。這樣我們就能加快它的訓練速度。
另外我們還在追求更多的功能,比如多語言預訓練語言模型,像mBERT和XLM,另外還有一些想法就是把GPT和BERT這一類模型給綜合起來,像UniLM和PMLM。
4.更聰明
現在,人們都意識到語言模型缺乏知識,那麼是否可以融入一些外部知識呢?知識這個話題很大,目前也有一些爭議,但是相關研究還是很多的。
圖中是劉知遠團隊跟華為合作的早期工作,就是試圖把採用TransE預訓練得到的知識空間的向量表示嵌入到語言模型裡面去。
這是劉知遠團隊改進後的工作叫KEPLER,也就是將知識圖譜融入到語言模型中,像這一類的工作還有很多。
還有一種更簡單的想法,Span知識融入:就是讓實體或者關係對應著句子中的一個span,通過利用span的方式來把知識嵌入。
圖中是趙海團隊做的SemBERT, 這種方法是將語義角色標記這種更複雜的句法語義的知識融入到語言模型。
5.更能幹
目前在預訓練語言模型中,有很多想法都非常好,而且在自然語言處理方面取得了成功。因此很多人都在想,能不能將這種思路應用到別的領域?這個想法很好,做起來很困難,但最終也取得了一些喜人的成果。
比如說在語音識別領域, Facebook提出了 wave2vec,它就是通過使用大量沒有標註的、純語音的數據,去預訓練一個模型,然後利用這個模型,在一個少量文本標註的語料上進行語音識別,最終取得了非常好的效果。
那麼最近在影像上面,包括影像分類、目標檢測等任務,都有一些預訓練的相關研究。其中,DETR是用了transformer模型,但不算預訓練。
資訊檢索也已經開始用預訓練語言模型,並取得了非常好的效果。在這方面目前大概有兩類模型,一類採用sparse索引,它是使用傳統的搜索引擎的前提下,去改進傳統倒排表的方法。另一類採用dense索引,這種方法不需要建立傳統的倒排表,而是直接用dense向量去對文本進行資訊檢索。

3

我們的工作

接下來我將介紹一下華為諾亞方舟實驗室在這方面所取得的成果。首先,我們開發了一個自研的預訓練語言模型叫哪吒。其次,我們在模型壓縮方面做的工作非常多,華為TinyBERT模型被壓縮的非常小,小到可以用在端側。
如今的預訓練語言模型太多了,但我們還是希望有自主開發的模型,然後兼收並蓄,融合好的技術,並且把新技術也結合,然後訓練好用的模型。同時我們也把它開源,大家可以去網上下載。目前我們已經推出了不同的版本,另外還有生成模型和TinyBERT,也都開源了。
哪吒的性能也是非常強的,我們在目前中文的CLUE排行榜上是第二名,僅次於human模型,事實上在之前很長時間內我們都是第一名。
另外在英文的排行榜SUPERGLUE,我們現在已經排到第二名,第一名的是目前在規模上大哪吒十倍的T5模型。
哪吒在華為產品的落地,包括華為雲,華為手機小藝,以及華為的 HMS。
哪吒在華為產品落地的技術,包括基礎的演算法和模型,對話系統,還有推薦搜索等。
TinyBERT是我們目前取得成就最多的一個模型,接下來我著重講一下TinyBERT的原理。
TinyBERT知識蒸餾的基本流程包括兩步,第一步叫做general distillation,即使用一個大的預訓練語言模型,訓練一個小的預訓練語言模型。
第二步叫做task-specific distillation,即使用一個大的預訓練語言模型,去對一個小的預訓練語言模型進行微調。在這裡我們引入了一個新的技術,叫做數據增強,這個技術非常重要,如果沒有這個技術的話,整個模型的性能會下降很多。
TinyBERT知識蒸餾的損失函數中一個比較重要的就是,讓中間層去學習隱藏狀態和attention向量。
TinyBERT知識蒸餾的選層策略就是,我們用4層或者6層的學生模型,去學習12層的教師模型。但是讓哪一層去學習哪一層,這就是一個有關映射的策略的問題了。我們最早提出的是一個均勻映射模型,即用小模型的1,2,3,4層,去依次學習大模型的3,6,9,12層。
後來我們就在想,是否可以讓每一層都自動去搜索一個最合適的層次學習?我們就引入了進化學習演算法。然後我們發現,對小模型來說,最好的學習層次是0,0,5,10。即小模型的第一層,第二層不要去學習,最好直接使用自動反向傳播去調。用第3層去學大模型的第5層,第4層去學大模型的第10層,這樣效果最好。6層的學生模型我們學到的是0,5,0,0,0,10。通過選層策略可以發現,選擇好的層次的話就可以提高整體的效果。
TinyBERT知識蒸餾數據增強是一個非常有效的技術。因為下游任務一般數據都比較少,那麼我們在蒸餾小模型的時候,數據的數量經常是不足的。
我們採取的辦法,就是把用於下游任務的數據進行增強。數據增強實際上就是利用了BERT本身的特點,它的每個詞都是可以替換成別的詞的。我們採用一種替換策略,就是把每個詞都去做一些替換,這樣的話就會生成很多的跟原來的句子很相似的句子,比如10個詞的句子換掉2個或者3個詞,去生成增強的語料。
最後,我們發現大概增強20倍的時候,即將原來的一個句子替換生成20個左右相似的句子,用來做下游任務的蒸餾的效果最好。
這是我們的實驗結果,我們看到在4層的模型,在GLUE上面,總的分數大概降低了2.5,從79.5降到77。6層的TinyBERT基本上是跟12層的沒有什麼變化。
在參數量方面,BERT-base有109M,而4層的模型只有14.5M,只有原模型的13.3%。6層的模型只降到了原來的一半。
在速度方面,我們也可以看到4層的模型提速了9.4倍,提速非常高。
並且我們現在模型空間非常小,參數量是14.5M的模型大小只有50M左右,完全可以放入手機之中,並且它的推理速度比原來快將近快10倍。目前我們這個模型已經大量的運用在華為的設備與應用之中。
我們還做了一個工作,在華為自研的BOLT深度學習加速庫下,利用了底層的硬體再一次進行壓縮和加速,使得TinyBERT最終的推理速度,可以達到1.3毫秒。
我們的TinyBERT在中文的CLUE小模型排行榜上一直是第一名。然後我們參加了 NLPCC的小模型評測比賽,也是獲得了第一名。

4

總結與展望

從歷史角度來講,模型越來越大。GPT-3已經這麼大了,我們還能做得更大嗎?當然如果未來計算設備的硬體的問題解決了,可以更大,但是近期內呢?
更大的模型應該是什麼樣子?我設想的一種方式就是分散式,把模型分布到很多機器上計算,就像搜索引擎一樣。
像BERT這一類模型如何再把它訓練的更大?現在最大的幾個預訓練語言模型都是GPT類的,BERT這一類模型很難做得更大,一些工程上的問題目前還是很難解決的。那麼未來我們是否可能訓練更大的BERT類的模型?
小模型相反, BERT這類模型可以壓縮的很小,GPT模型就很難壓縮。BERT這個模型的壓縮是不是還有潛力可以挖掘?
另外知識融入是一個很有意思的問題。知識融入人們做了很多工作,實際上我是不太滿意的。因為很多工作只是在解決知識類的問題效果比較好, 一般的 NLP的問題,知識融入的作用並不是那麼大,所以希望知識融入能夠解決一般的 NLP的問題。
還有就是知識應該如何表示?現在大部分人認為知識都是三元組,我覺得這個是存在爭議的,三元組實際上能夠表達的知識其實非常有限。比如序列關係、空間關係、集合關係、數值關係等等關係知識都是很難學到的。
關於搜索引擎,我希望以後預訓練語言模型可以和搜索引擎結合起來,預訓練語言模型就是個能夠回答任何問題的搜索引擎。
最後就是多模態預訓練,希望將來它能帶來無限的想像空間。

點擊閱讀原文,直達EMNLP小組!