新年伊始,nlp技術在2023年大放異彩,bert,gpt-2,mass,elmo,ulmfit等預訓練+精調的思維路線開闢了新的方向,也給我們這一塊帶來新的希望!
作為工程技術人員,我們首要就是要將更好的技術應用於產品,獲取利潤,那麼可以在大佬的步伐下吃一波紅利,指導應用開發。本人也比較懶,總結做的不是很好,就拿他山之石來說吧,希望能夠給各位同行些許幫助。
摘錄裡面重要的一節:
實踐、觀點、總結
實踐與建議
雖然前面介紹的很多模型都能找到實現**。但從可用性來說,對於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%。
使用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中有一部分工作是在做人類知識或人類常識的結構化表示。有了結構化表示後,使用時再想辦法把這些表示注入到特定的使用場景中。比如知識圖譜的目標就是用結構化的語義網路來表達人類的所有知識。這種結構化表示理論上真的靠譜嗎?人類的知識真的能完全用結構化資訊清晰表示出來嗎?顯然是不能,我想這點其實很多人都知道,只是在之前的技術水平下,也沒有其他的方法能做的更好。所以這是個折中的臨時方案。
無監督預訓練技術的成功,說明語言的很多知識其實是可以以非結構化的方式被模型學習到並儲存在模型中的,只是目前整個過程我們並不理解,還是黑盒。相信以後很多其他方面的知識也能找到類似的非結構化方案。所以我估計知識圖譜這類折中方案會逐漸被替代掉。當然,這只是我個人的理解或者疑惑,僅供他人參考。
2023年的展望
2020新年伊始,需要做的事情總少不了回首過去,以及展望未來。回想自己在過去的五年多工作經驗,有期望,有淚水,有激情,有失望。起起伏伏的狀態一直在延續,如何讓自己成為更好的人?我想了想,總結,反思,規劃應該是很重要的乙個方式。於是我寫下了這篇部落格。part one 回首過去 part two展望往...
2023年總結 2023年展望
去年沒寫什麼新年安排,而現在正好剛和兄弟們打完遊戲,是靜下來的乙個人的時候,就來總結一下2019年,展望一下2020年吧。2019這一年,我經歷了很多的考試,學習了很多的知識,談了一場戀愛,考了一次年級第一二,過了四六級,轉了專業,從電氣工程轉到計算機了。這一年確實經歷了很多,也見識了很多。我談了一...
2023年總結, 2023年規劃
2019年年初寫了一篇,2018總結和2019規劃的文章,今天又回來做下新的一年的規劃.先看一下去年定下的目標完成的情況.2019年總結 2020年 我是乙個遊戲熱愛者,在畢業之前也就是大概6月份之前.1 我想完成魔獸世界博學者 已完成 2 我想通關大嫖客2,蜘蛛俠,美國末日,神秘海域4 刪除線格式...