【ERNIE】深度剖析知識增強語義表示模型——ERNIE

  • 2019 年 12 月 23 日
  • 筆記

作者:張貴發 來自:AINLP

研究方向:自然語言處理


無監督文本的深度神經網路的出現,nlp領域又火了起來,深度神經網路大大提升了nlp任務的效果。雖然早期的網路也是基於上下文進行的向量建模,但是由於單向資訊流的弊端,效果上始終難以大幅度提升。Transformer中的多層self-attention的出現,推進了深度網路的發展。Google提出的BERT模型,通過掩蓋的term,利用多層的self-attention的雙向建模能力,橫掃了NLP比賽的各大排行榜。

前文介紹了bert,想詳細了解Bert請參見:一步步理解bert

什麼是語義表示

ERNIE是一個語言理解模型,最大的優點就是特別好的理解人類的語言。文字其實是概念背後的符號,更重要的其實是概念的本身。詞語是具有語義的,怎麼正確表示語義呢?語義的特點是什麼?語義上比較近的詞語真正的距離也是比較接近的,怎麼對這部分進行表達,就是詞向量,詞向量每個詞背後對應的是一個高維的向量,所以他們之間的距離是可以度量的。

靜態詞向量

如圖中所示:將文本資訊映射到數字空間,變成數字表示的向量,在這種表示上,保留了詞語間的距離資訊。在句子的空間結構上我們期望獲取更底層的之間的關係比如:

  • king和queen之間的關係相比與man與woman的關係大體應該相同的,那麼他們通過矩陣運算,維持住這種關係
  • Paris 和France之間的關係相比與Berlin與German的關係大體應該相同的,那麼他們通過矩陣運算,維持住這種關係

這種向量表示不僅僅可以進行距離的計算,還可以進行推斷,怎麼把這種詞向量給學好,出現了各種技術,最好的就是 深度學習的神經網路 ,NLM、skip-gram、cbow、這些都是學習詞向量比較有名的網路,為靜態詞向量,但是很難建模人類語言的複雜性,(一詞多義、多詞一意)帶有上下文,語義根據上下文會變化的。如: 詞向量的問題:無法解決歧義問題

word embeding 有個問題就是我們的詞通常有很多語義的,比如bank是銀行還是河岸,具體的意思要取決與上下文,如果我們強行用一個向量來表示語義的話,只能把這兩種語義都編碼在這個向量里,但實際一個句子中,一個詞只有一個語義,那麼這種編碼是有問題的。為了解決這種問題,出現了新的技術,動態詞向量,或者上下文詞向量,這個詞向量就建模了上下文。

動態詞向量(上下文詞向量)

在這裡插入圖片描述 如圖中展示,在進行映射的同時,編碼器還建模了上下文,保證詞向量的上下文資訊。這樣的詞向量中不僅保留了詞資訊,還保留了上下文資訊,基於上下文可以很好的預測。同時深度網路模型也不斷的發展,不斷取得大的進步。2017年Cove出現。2018年ELMo獲得了NAACL最佳論文,後來的BERT、ERNIE、XLNET等。 在這些網路的發展中,最終要的是注意力機制的應用,都是不斷的改進注意力機制,改變訓練任務。

隨著序列任務的發展,到Seq2Seq,接下來出現注意力機制,主要流行的注意力機制有兩種,是Luong Attention 和Bahdanau Attention。具體的注意力機制怎麼起作用的呢?可以參考https://zhuanlan.zhihu.com/p/40920384

如圖中是Luong Attention 和Bahdanau Attention兩種注意力機制的主要區別點,Luong Attention是計算當前時間節點也就是i時刻,而Bahdanau Attention則是計算上一時間點,也就是i-1時刻。實際應用中效果區別不大,只是Luong Attention 更容易理解。

位置編碼

後來的出現了掩蓋詞語的訓練任務,出現了位置的編碼資訊,對於針對位置的編碼,主要有以下幾種:

正玄位置編碼:

如:我在智聯招聘。智的映射為:

學習位置向量:把智所在的位置學習成為一個向量。

相對位置的表達,則是針對當前的位置資訊的相對位置,如當前智為0,左右兩邊term距離當前距離的數值,正負號表示方向。絕對位置可以保留更多的資訊,但是如bert中長度是512,如果一個句子是120,那麼後面的位置資訊全是0,過多的無用位置編碼無意義。transformer-xl對位置編碼改進為相對位置,引入了segment,不採用整個句子的,而是採用左右兩端固定segment個數的term作為上下文。

上述的各個模型都特別好,怎麼應用呢,進入了自然語言深度學習特別經典的預訓練和下游任務的微調的機制,我們可以通過大量的無監督語料去學習一些簡單的深度學習任務,就能得到一個很好的模型,比如bert 、ernie等等,這時候神經網路結構已經有了,它的神經網路的參數權重也有了,我們對下游的任務,比如說文本情感分析,哈爾濱是一個美麗的城市。判斷它是一個積極的情緒還是消極的情緒,小規模的標註數據,把網路結構、參數照搬,熱啟動,在做一個反向傳播的梯度更新,在這個任務里就能得到很好很好的效果,預訓練和微調的機制。如下圖:

ERNIE的原理介紹

上面簡單回顧了靜態詞向量與動態詞向量,以及其中重要的點,那麼ERNIE是怎麼工作,以及任務是怎麼訓練的呢?其實,ERNIE實在BERT的基礎上進行的改進,那麼將對比著BERT進行一步步剖析。

跟bert的缺陷進行對比,BERT訓練任務是隨機掩蓋住15%的詞進行預測,中文就是字,英文就是詞,蓋住之後去預測蓋住的部分是什麼樣子的,訓練任務叫做隱碼語言模型,這個使它得到很好的效果,這個任務也存在缺陷,強行掩蓋把詞與詞,字與字之間的關係給拆散了,比如說哈爾濱,再去訓練的時候把爾給蓋住了,ERNIE的隱碼語言模型蓋住的不是一個字而是詞或短語、命名實體,這樣去預測整體。兩者的主要區別如下:

  • BERT mask(sub-word) lm任務存在的問題
    • Word哈爾濱:sub-word 哈##爾##濱
    • Sub-word :預測可以通過word的 局部資訊完成
    • 模型缺乏全局建模資訊的能力
  • 針對BERT mask sub-word 任務存在的問題,百度提出基於知識增強的語義理解模型
    • ERNIE mask word & entity
    • 強迫模型通過全局資訊去預測mask掉的內容,學習序列里mask資訊里蘊含的知識

ERNIE學到全局的資訊,使它能學習到非常先驗的結果,已經進行了大量的自然語言處理的分詞模型,短語拼接的模型,命名實體識別的模型,能夠提前把這些詞或者短語給標註出來,標註出來之後再去學,這樣看它是基於已有的策略再去進行海量的數據上訓練出一個很好的模型。

ERNIE 1.0的效果圖:

針對bert的變種不斷更新迭代,以及XLNET的產生,都不再局限於某個詞,也是可以掩蓋住短語、實體等進行任務訓練,ERNIE也在不斷的更新迭代,出現了ERNIE 2.0。

2.0加入更多的任務,經過左邊各種各樣的自然語言處理的任務去設計一些自然語言處理的輔助任務,基於這些輔助任務讓ernie不斷的去學習,持續的學習各種各樣的多任務,效果不斷的提升,然後再去處理下游的任務,比如文本相似度、只能問答,文本匹配效果得到非常明顯的提升。

神經網路上的改造

上述所說各種各樣的任務,怎麼讓ernie區分,特別加入了最下面這行的taskid,叫做taskid embedding,對於上面的輸入是典型的ernie 1.0的輸入,每個詞的embedding,每個詞所在句子的embedding,以及詞在語料中位置的embedding,第四個呢就加上了任務的id embedding.讓每個任務有單獨的識別。

輔助任務

總共整理了7個任務,7個任務分位3類,一類是詞法層的任務,一類是語法類的任務,一類是語義類的任務,詞法層的任務 1.0的掩蓋短語、實體。典型的詞法任務就是句子排序,我們把三句話打亂順序的給擺正,3句話的所有組合的階乘,遍歷組合都遍歷一遍,讓ernie去判斷是這麼多可能的哪一個,就把排序問題變成了一個多分類的問題,這樣就很好的排序。語義層的關係:亂砍、亂伐,出現自然災害,因為所以的關係,還有如果就的關係。儘管 但是 轉折關係,或者並且這種並列關係,等等是語義的邏輯關係,大量的語料去學習這些關係,使得ernie能很好的提升自己的效果,

如下圖所示:

學習過程

有這麼多的輸入,那麼對於輸出怎麼學習呢?這些任務讓它很好的學習,關鍵看他的輸出,大致分為兩類,token_evel就是辭彙層次的任務,一類是sentence_level就是句子層次的任務,可以理解為填空題,判斷這個詞到底是哪一類 哪個詞 是敏感詞 還是非敏感詞,是關鍵詞還是非關鍵詞,另一部分呢就是句子輸出cls是a類還是b類是順序1還是順序2,來學習到句子級別的任務。那麼這部分神經網路是什麼樣的呢?

在這裡插入圖片描述 其實上述提到過,ERNIE是基於BERT的改進,內部網路的設計其實還是基於雙向的self-attention的encoder。

來自與all attention you need 這篇論文,tranfromer,總共有12層,然後每一層又包括自注意力機制、歸一化、又包括求和與歸一化、以及一些前饋神經網路的一些機制,最終構成了一個相對複雜的神經網路結構,這裡面最核心的是自注意力機制,能學會每個辭彙和詞之間的關係比如說:辭彙與辭彙之間的搭配,keep up we have 他們之間的關係線的粗細表示關係的強弱。在一步步理解bert中已經描述過,這裡不再過多的贅述。

我們訓練任何深度學習模型基本上包括三大部分:第一部分定義任務,一部分網路結構,第三部分呢設計你的優化演算法,前面大概介紹了任務和網路結構,接下來看一下優化演算法,它本身是一個多任務的學習,並不是一口氣學多個任務,都學好,很可能越學越差,相互之間不是促進而是促退, 那麼ERNIE是怎麼進行學習的呢?

ernie這裡採用了兩種機制,順序學習,一次學習一個任務,參數是不斷的遞進更新的,這樣的好處是比較容易但另一方面會有很大的問題,容易陷入到遺忘狀態,這種比較適合任務關係比較緊密的任務,同樣是隱碼語義模型,第一次學被蓋住的字,第二次學習被蓋住測詞,第三次學習被蓋住的句子是怎樣的,本質還是完型填空,但是填寫的內容不一樣,這樣是可以進行順序學習的。但是對於其他的任務可能就得同時的學習,比如每次迭代是一個batch,batch與batch之間的任務可以是不一樣的,而同一個batch裡面也可以學習不同的任務,batch內有多任務機制,batch內有多任務的機制,使得它能在不同的任務之間不斷的來回切換,使它記得學到不同任務的特點,使它不會陷入到之前的遺忘模式。 ERNIE的官方對比效果圖:

這裡XLNET沒有中文,只對比了bert的效果。

ERNIE的應用案例

ERNIE效果那麼好,怎麼應用到我們自己的場景中呢?

性能不敏感的場景:直接使用

度小滿的風控識別上:訓練完的ernie上直接進行微調,直接預測有沒有風險對應的結果,傳統的缺點:需要海量的數據,而這些數據也很難抓取到的,抓取這些特徵之後呢還要進行複雜的文本特徵提取,比如說挖掘簡訊中銀行的催收資訊,對數據要求的量很高,對數據人工的特徵的挖掘也很高。這兩項呢造成了大量的成本,如今只需ernie微調一下,當時直接在召回的排序上得到25%的優化。這種場景的特點是什麼?對於用戶的實時性的需求不是很強,不需要用戶輸入一個欄位就返回結果。只要一天把所有數據得到,跑完,得到結果就可以了,統一的分析就可以了,適合少數據的分析場景

  • 傳統方法
    • 傳統風控模型依賴於特徵挖掘
    • 有標註的用戶數據稀缺
  • 對比效果提升
    • ERNIE用戶風控模型,AUC提升顯著
    • 21.5%的用戶排序得到優化
    • ERNIE用戶風控模型應用於度小滿場景

ERNIE 的模型蒸餾案例:搜索問答Query識別和QP匹配

另外的一個場景需要非常高的性能優勢的,採用的解決方案就是模型蒸餾,是搜索問答query識別和qp匹配,輸入一個問題,得到答案,本質是文本匹配,實際是輸入問題,把資料庫中大量的候選答案進行匹配計算得分,把得分最高的返回。但是百度每天很多用戶,很快的響應速度,數據量大,要求響應速度還快,這時候要求不僅模型特別准,而且還要特別快,怎麼解決就是模型蒸餾,

把這個分成兩段,第一段判斷是不是真的問題可能有答案,過濾完是可能有答案的,再與資料庫中進行匹配,因為大部分輸入框的不一定是個問題,這樣過濾掉一部分,排除掉一部分後,在做匹配就能得到很大的提升,提升還是不夠 第一部分其實是文本分類,通過量的小規模的標註特徵數據進行微調,得到一個好的模型,同時日誌上是有很多沒有標註的數據,用ernie對這些數據進行很好的標註,用一個更好的模型去標註數據,用這些標註數據訓練相對簡單的模型,就實現了蒸餾,ernie處理速度慢,但是可以用題海戰術的方式訓練簡單的模型如simnet。

輸入的是問題,接著詞向量,然後是求和運算,然後是全連接,最後進行一個分類,這個模型比較簡單。其實就是將ernie模型的效果蒸餾到了簡單模型上, 同理,下面問題匹配也是,右邊也是query和答案,embedding,加權求和,全連接,最後計算他們之間的預選相似度,就是余玄。時召回提升7% 搜索場景,用戶的輸入是多變的,沒法窮盡所有的輸入,提前計算好。

離線推薦

推薦場景:是可以提前計算好,保存好的,可變的比較少,影片本身就是存好的,變化量不會很大,更新也不會特別頻繁,離線把相似度計算好,保存起來就可以,兩兩計算之間的相似度計算量是非常大的, 那麼怎麼減少計算量呢?使用了一個技術叫離線向量化,用ERNIE直接過一遍影片庫,simnet的倒數第二層保留向量的輸出。這樣減少實際ERNIE直接對兩兩影片進行計算