閱讀大概需要16分鐘
跟隨小博主,每天進步一丟丟
作者:張貴發(fā)
來自:AINLP
研究方向:自然語言處理
無監(jiān)督文本的深度神經(jīng)網(wǎng)絡的出現(xiàn),nlp領域又火了起來,深度神經(jīng)網(wǎng)絡大大提升了nlp任務的效果。雖然早期的網(wǎng)絡也是基于上下文進行的向量建模,但是由于單向信息流的弊端,效果上始終難以大幅度提升。Transformer中的多層self-attention的出現(xiàn),推進了深度網(wǎng)絡的發(fā)展。Google提出的BERT模型,通過掩蓋的term,利用多層的self-attention的雙向建模能力,橫掃了NLP比賽的各大排行榜。
前文介紹了bert,想詳細了解Bert請參見:一步步理解bert
ERNIE是一個語言理解模型,最大的優(yōu)點就是特別好的理解人類的語言。文字其實是概念背后的符號,更重要的其實是概念的本身。詞語是具有語義的,怎么正確表示語義呢?語義的特點是什么?語義上比較近的詞語真正的距離也是比較接近的,怎么對這部分進行表達,就是詞向量,詞向量每個詞背后對應的是一個高維的向量,所以他們之間的距離是可以度量的。
king和queen之間的關系相比與man與woman的關系大體應該相同的,那么他們通過矩陣運算,維持住這種關系
Paris 和France之間的關系相比與Berlin與German的關系大體應該相同的,那么他們通過矩陣運算,維持住這種關系
后來的出現(xiàn)了掩蓋詞語的訓練任務,出現(xiàn)了位置的編碼信息,對于針對位置的編碼,主要有以下幾種:
上述的各個模型都特別好,怎么應用呢,進入了自然語言深度學習特別經(jīng)典的預訓練和下游任務的微調的機制,我們可以通過大量的無監(jiān)督語料去學習一些簡單的深度學習任務,就能得到一個很好的模型,比如bert 、ernie等等,這時候神經(jīng)網(wǎng)絡結構已經(jīng)有了,它的神經(jīng)網(wǎng)絡的參數(shù)權重也有了,我們對下游的任務,比如說文本情感分析,哈爾濱是一個美麗的城市。判斷它是一個積極的情緒還是消極的情緒,小規(guī)模的標注數(shù)據(jù),把網(wǎng)絡結構、參數(shù)照搬,熱啟動,在做一個反向傳播的梯度更新,在這個任務里就能得到很好很好的效果,預訓練和微調的機制。如下圖:
上面簡單回顧了靜態(tài)詞向量與動態(tài)詞向量,以及其中重要的點,那么ERNIE是怎么工作,以及任務是怎么訓練的呢?其實,ERNIE實在BERT的基礎上進行的改進,那么將對比著BERT進行一步步剖析。
BERT mask(sub-word) lm任務存在的問題
Word哈爾濱:sub-word 哈##爾##濱
Sub-word :預測可以通過word的 局部信息完成
模型缺乏全局建模信息的能力
針對BERT mask sub-word 任務存在的問題,百度提出基于知識增強的語義理解模型
ERNIE mask word & entity
強迫模型通過全局信息去預測mask掉的內容,學習序列里mask信息里蘊含的知識
ERNIE學到全局的信息,使它能學習到非常先驗的結果,已經(jīng)進行了大量的自然語言處理的分詞模型,短語拼接的模型,命名實體識別的模型,能夠提前把這些詞或者短語給標注出來,標注出來之后再去學,這樣看它是基于已有的策略再去進行海量的數(shù)據(jù)上訓練出一個很好的模型。
ERNIE 1.0的效果圖:
上述所說各種各樣的任務,怎么讓ernie區(qū)分,特別加入了最下面這行的taskid,叫做taskid embedding,對于上面的輸入是典型的ernie 1.0的輸入,每個詞的embedding,每個詞所在句子的embedding,以及詞在語料中位置的embedding,第四個呢就加上了任務的id embedding.讓每個任務有單獨的識別。
總共整理了7個任務,7個任務分位3類,一類是詞法層的任務,一類是語法類的任務,一類是語義類的任務,詞法層的任務 1.0的掩蓋短語、實體。典型的詞法任務就是句子排序,我們把三句話打亂順序的給擺正,3句話的所有組合的階乘,遍歷組合都遍歷一遍,讓ernie去判斷是這么多可能的哪一個,就把排序問題變成了一個多分類的問題,這樣就很好的排序。語義層的關系:亂砍、亂伐,出現(xiàn)自然災害,因為所以的關系,還有如果就的關系。盡管 但是 轉折關系,或者并且這種并列關系,等等是語義的邏輯關系,大量的語料去學習這些關系,使得ernie能很好的提升自己的效果,
如下圖所示:
有這么多的輸入,那么對于輸出怎么學習呢?這些任務讓它很好的學習,關鍵看他的輸出,大致分為兩類,token_evel就是詞匯層次的任務,一類是sentence_level就是句子層次的任務,可以理解為填空題,判斷這個詞到底是哪一類 哪個詞 是敏感詞 還是非敏感詞,是關鍵詞還是非關鍵詞,另一部分呢就是句子輸出cls是a類還是b類是順序1還是順序2,來學習到句子級別的任務。那么這部分神經(jīng)網(wǎng)絡是什么樣的呢?
ERNIE效果那么好,怎么應用到我們自己的場景中呢?
傳統(tǒng)方法
傳統(tǒng)風控模型依賴于特征挖掘
有標注的用戶數(shù)據(jù)稀缺
對比效果提升
ERNIE用戶風控模型,AUC提升顯著
21.5%的用戶排序得到優(yōu)化
ERNIE用戶風控模型應用于度小滿場景
另外的一個場景需要非常高的性能優(yōu)勢的,采用的解決方案就是模型蒸餾,是搜索問答query識別和qp匹配,輸入一個問題,得到答案,本質是文本匹配,實際是輸入問題,把數(shù)據(jù)庫中大量的候選答案進行匹配計算得分,把得分最高的返回。但是百度每天很多用戶,很快的響應速度,數(shù)據(jù)量大,要求響應速度還快,這時候要求不僅模型特別準,而且還要特別快,怎么解決就是模型蒸餾,
把這個分成兩段,第一段判斷是不是真的問題可能有答案,過濾完是可能有答案的,再與數(shù)據(jù)庫中進行匹配,因為大部分輸入框的不一定是個問題,這樣過濾掉一部分,排除掉一部分后,在做匹配就能得到很大的提升,提升還是不夠
第一部分其實是文本分類,通過量的小規(guī)模的標注特征數(shù)據(jù)進行微調,得到一個好的模型,同時日志上是有很多沒有標注的數(shù)據(jù),用ernie對這些數(shù)據(jù)進行很好的標注,用一個更好的模型去標注數(shù)據(jù),用這些標注數(shù)據(jù)訓練相對簡單的模型,就實現(xiàn)了蒸餾,ernie處理速度慢,但是可以用題海戰(zhàn)術的方式訓練簡單的模型如simnet。
輸入的是問題,接著詞向量,然后是求和運算,然后是全連接,最后進行一個分類,這個模型比較簡單。其實就是將ernie模型的效果蒸餾到了簡單模型上,
同理,下面問題匹配也是,右邊也是query和答案,embedding,加權求和,全連接,最后計算他們之間的預選相似度,就是余玄。時召回提升7%
搜索場景,用戶的輸入是多變的,沒法窮盡所有的輸入,提前計算好。
推薦場景:是可以提前計算好,保存好的,可變的比較少,視頻本身就是存好的,變化量不會很大,更新也不會特別頻繁,離線把相似度計算好,保存起來就可以,兩兩計算之間的相似度計算量是非常大的,
那么怎么減少計算量呢?使用了一個技術叫離線向量化,用ERNIE直接過一遍視頻庫,simnet的倒數(shù)第二層保留向量的輸出。這樣減少實際ERNIE直接對兩兩視頻進行計算