2020年NLP領域展望與規划


新年伊始,NLP技術在2019年大放異彩,BERT,GPT-2,Mass,ElMo,ULMFit等預訓練+精調的思維路線開辟了新的方向,也給我們這一塊帶來新的希望!

作為工程技術人員,我們首要就是要將更好的技術應用於產品,獲取利潤,那么可以在大佬的步伐下吃一波紅利,指導應用開發。本人也比較懶,總結做的不是很好,就拿他山之石來說吧,希望能夠給各位同行些許幫助。

 信息來源:bert 時代與后時代的nlp,地址:http://www.360doc.com/content/19/0528/09/7673502_838692247.shtml(版本太多,姑且它了。感謝作者)

摘錄里面重要的一節:

實踐、觀點、總結
實踐與建議
雖然前面介紹的很多模型都能找到實現代碼。但從可用性來說,對於NLU類型的問題,基本只需考慮ELMo,ULMFiT和BERT。而前兩個沒有中文的預訓練模型,需要自己找數據做預訓練。BERT有官方發布的中文預訓練模型,很多 深度學習框架也都有BERT的對應實現,而且BERT的效果一般是較好的。但BERT的問題是速度有點慢,使用12層的模型,對單個句子(30個字以內)的預測大概需要100~200毫秒。如果這個性能對你的應用沒問題的話,建議直接用BERT。
 
對於分類問題,如果特定任務的標注數據量在幾千到一兩萬,可以直接精調BERT,就算在CPU上跑幾十個epoches也就一兩天能完事,GPU上要快10倍以上。如果標注數據量過大或者覺得訓練時間太長,可以使用特征抽取方式。先用BERT抽取出句子向量表達,后續的分類器只要讀入這些向量即可。
 
我們目前在很多分類問題上測試了BERT的效果,確實比之前的模型都有提升,有些問題上提升很明顯。下圖給出了一些結果示例。

 
愛因互動作為企業對話機器人服務提供商,我們會處理很多的QA (Query Answer)和QQ (Query Question)匹配任務。比如在常用的檢索機器人FAQBot中,用戶的一個query來了,FAQBot首先從標准問答庫中檢索出一些候選問題/答案,然后排序或匹配模塊再計算query跟每個候選問題/答案的匹配度,再按這些匹配度從高到低排序,top1的結果返回給用戶。上圖中給出了一個QQ 匹配的結果,原始模型的准確度為83.5%,BERT精調后的模型准確度提升到88.3%。
 
BERT當然可以直接用來計算兩個句子的匹配度,只要把query和每個候選句子拼起來,然后走一遍BERT就能算出匹配度。這樣做的問題是,如果有100個候選結果,就要算100次,就算把它們打包一起算,CPU上的時間開銷在線上場景也是扛不住的。但如果使用Siamese結構,我們就可以把候選句子的BERT向量表達預先算好,然后線上只需要計算query的BERT向量表達,然后再計算query和候選句子向量的匹配度即可,這樣時間消耗就可以控制在200ms以內了。

 
使用Siamese這種結構理論上會降低最終的匹配效果,之前也有相關工作驗證過在一些問題上確實如此。我們目前在自己的三個數據上做了對比實驗(見下圖),發現在兩個問題上效果確實略有下降,而在另一個問題上效果基本保持不變。我估計只要后續交互層設計的合理,Siamese結構不會比原始BERT精調差很多。
 

觀點
按理ELMo的想法很簡單,也沒什么模型創新,為什么之前就沒人做出來然后引爆無監督模型預訓練方向?BERT的一作Jacob Devlin認為主要原因是之前使用的數據不夠多,模型不夠大。無監督預訓練要獲得好效果,付出的代價需要比有監督訓練大到1000到10w倍才能獲得好的效果。之前沒人想到要把數據和模型規模提高這么多。
 
為了讓預訓練的模型能對多種下游任務都有幫助,也即預訓練模型要足夠通用,模型就不能僅僅只學到帶背景的詞表示這個信息,還需要學到很多其他信息。而預測被mask的詞,就可能要求模型學到很多信息,句法的,語義的等等。所以,相對於只解決某個下游特定任務,預訓練模型要通用的話,就要大很多。目前發現只要使用更多(數量更多、質量更好、覆蓋面更廣)的無監督數據訓練更大的模型,最終效果就會更優。目前還不知道這個趨勢的極限在什么量級。
 
BERT雖然對NLU的各類任務都提升很大,但目前依舊存在很多待驗證的問題。比如如何更高效地進行預訓練和線上預測使用,如何融合更長的背景和結構化知識,如何在多模態場景下使用,在BERT之后追加各種任務相關的模塊是否能帶來額外收益等等。這些機會我在第一部分已經講到,就不再贅述了。
 
總結和一點感(敢)想
最后,簡單總結一下。
 
無監督預訓練技術已經在NLP中得到了廣泛驗證。BERT成功應用於各種NLU類型的任務,但無法直接用於NLG類型的任務。微軟最近的工作MASS把BERT推廣到NLG類型任務,而UNILM既適用於NLU也適用於NLG任務,效果還比BERT好一點點。
 
相信未來NLP的很多工作都會圍繞以下這個流程的優化展開:

 
在這個過程中,我們還收獲了諸多副產品:
 
相對於biLSTM,Transformers在知識抽取和存儲上效果更好,潛力還可發掘。它們之間的具體比較,推薦俊林老師的“放棄幻想,全面擁抱Transformer:自然語言處理三大特征抽取器(CNN/RNN/TF)比較”,里面介紹的很清楚。
 
目前無監督模型預訓練常用以下幾種目標函數:
一般的LM。基於token的交叉熵。
Masked LM。相比於一般的LM,masked LM能夠使用雙向tokens,且在模型訓練和預測時的數據使用方式更接近,降低了它們之間的gap。
Consecutive masked LM。Mask時不僅隨機mask部分離散的token,還隨機mask一些連續的tokens,如bi-grams、tri-grams等。這種consecutive mask機制是否能帶來普遍效果提升,還待驗證。
 
Next Sentence Prediction。預測連續的兩個句子是否有前后關系。
精調階段,除了任務相關的目標函數,還可以考慮把LM作為輔助目標加到目標函數中。加入LM輔助目標能降低模型對已學到知識的遺忘速度,提升模型收斂速度,有些時候還能提升模型的精度。精調階段,學習率建議使用linear warmup and linear decay機制,降低模型對已學到知識的遺忘速度。如果要精調效果,可以考慮ULMFiT中引入的gradual unfreezing和discriminative fine-tuning:機制。
 
使用數量更多、質量更好、覆蓋面更廣的無監督數據訓練更大的模型,最終效果就會更優。目前還不知道這個趨勢的極限在什么地方。
 
最后說一點自己的感想。
 
NLP中有一部分工作是在做人類知識或人類常識的結構化表示。有了結構化表示后,使用時再想辦法把這些表示注入到特定的使用場景中。比如知識圖譜的目標就是用結構化的語義網絡來表達人類的所有知識。這種結構化表示理論上真的靠譜嗎?人類的知識真的能完全用結構化信息清晰表示出來嗎?顯然是不能,我想這點其實很多人都知道,只是在之前的技術水平下,也沒有其他的方法能做的更好。所以這是個折中的臨時方案。
 
無監督預訓練技術的成功,說明語言的很多知識其實是可以以非結構化的方式被模型學習到並存儲在模型中的,只是目前整個過程我們並不理解,還是黑盒。相信以后很多其他方面的知識也能找到類似的非結構化方案。所以我估計知識圖譜這類折中方案會逐漸被替代掉。當然,這只是我個人的理解或者疑惑,僅供他人參考。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM