導讀 本次分享介紹我們最近在NLP預訓練的探索,并在下游任務的一些實踐。主要又一種適用于低資源的預訓練方式,以及在自然語言理解、自然語言生成、向量表示的零樣本推理應用。
(相關資料圖)
全文目錄:
1. 要不要預訓練
2. 如何預訓練
3. 實驗效果
4. 結(jié)語
分享嘉賓|薛昌熵 百度 NLP算法工程師
出品社區(qū)|DataFun
01
要不要預訓練
預訓練的效果是直接的,需要的資源常常令人望而卻步。如果有這樣一種預訓練方法,它需要算力、數(shù)據(jù)、人工的資源很少,低到單人單卡原始語料就可以啟動。經(jīng)過無監(jiān)督的數(shù)據(jù)處理,完成一次遷移到自己領域的預訓練之后,就能獲得零樣本的NLG、NLG和向量表示推理能力,其他向量表示的召回能力超過BM25,那么你有興趣嘗試嗎?
要不要做一件事,需要衡量投入產(chǎn)出來決定。預訓練是大事,需要一些前置條件和資源,也要又充足的預期收益才會實行。通常所需要的條件有:充足的語料庫建設,通常來說質(zhì)量比數(shù)量更難得,所以語料庫的質(zhì)量可以放松些,數(shù)量一定要管夠;其次是具備相應的人才儲備和人力預算,相較而言,小模型訓練更容易,障礙更少,大模型遇到的問題會多些;最后才是算力資源,根據(jù)場景和人才搭配,豐儉由人,最好有一塊大內(nèi)存顯卡。預訓練帶來的收益也很直觀,遷移模型能直接帶來效果提升,提升幅度跟預訓練投入和領域差異直接相關,最終收益由模型提升和業(yè)務規(guī)模共同增益。
在我們的場景中,數(shù)據(jù)領域跟通用領域差異極大,甚至需要大幅度更替詞表,業(yè)務規(guī)模也已經(jīng)足夠。如果不預訓練的話,也會為每個下游任務專門微調(diào)模型。預訓練的預期收益是確定的。我們的語料庫質(zhì)量上很爛,但是數(shù)量足夠。算力資源很有限,配合相應的人才儲備可彌補。此時預訓練的條件都已經(jīng)具備。
直接決定我們啟動預訓練的因素是需要維護的下游模型太多了,特別占用機器和人力資源,需要給每個任務都要準備一大堆數(shù)據(jù)訓練出一個專屬模型,模型治理的復雜度急劇增加。所以我們探索預訓練,希望能構(gòu)建統(tǒng)一的預訓練任務,讓各個下游模型都受益。我們做這件事的時候也不是一蹴而就的,需要維護的模型多也意味著模型經(jīng)驗多,結(jié)合之前多個項目經(jīng)驗,包括一些自監(jiān)督學習、對比學習、多任務學習等模型,經(jīng)過反復實驗迭代融合成形的。
上圖是傳統(tǒng)的nlp流水線范式,基于已有的通用預訓練模型,在可選的遷移預訓練完成后,為每個下游任務收集數(shù)據(jù)集,微調(diào)訓練,并且需要諸多人工和顯卡維護多個下游模型和服務。
下圖是我們提出的新范式,在遷移到我們領域繼續(xù)預訓練時候,使用聯(lián)合語言建模任務和對比學習任務,使得產(chǎn)出模型具備零樣本的NLU、NLG、向量表示能力,這些能力是模型化的,可以按需取用。如此需要維護的模型就少了,尤其是在項目啟動時候可以直接用于調(diào)研,如果有需要再進一步微調(diào),需要的數(shù)據(jù)量也大大降低。
02
如何預訓練
這是我們的預訓練模型架構(gòu),包括Transformer的編碼器、解碼器和向量表示頭。
預訓練的目標包括語言建模和對比表示,損失函數(shù)為Total Loss = LM Loss + α CL Loss,采用語言建模任務與對比表示任務聯(lián)合訓練,其中α表示權重系數(shù)。語言建模采用掩碼模型,類似于T5,只解碼掩碼部分。對比表示任務類似于CLIP,在一個批次內(nèi),有一對相關訓練正樣本,其他未負樣本,對于每一條樣本對(i,I)中的i,有一個正樣本I,其他樣本為負樣本,使用對稱交叉熵損失,迫使正樣本的表示相近,負樣本的表示相遠。采用T5方式解碼可以縮短解碼長度。一個非線性向量表示頭加載編碼器上方,一是向量表示場景中要求更快,二是兩個所示函數(shù)作用遠離,防止訓練目標沖突。那么問題來了,完形填空的任務很常見,不需要樣本,那相似性樣本對是怎么來的呢?
當然,作為預訓方法,樣本對一定是無監(jiān)督算法挖掘的。通常信息檢索領域采用挖掘正樣本基本方法是逆完形填空,在一篇文檔中挖掘幾個片段,假定他們相關。我們這里將文檔拆分為句子,然后枚舉句子對。我們采用最長公共子串來判定兩個句子是否相關。如圖取兩個正負句對,最長公共子串長到一定程度判定為相似,否則不相似。閾值自取,比如長句子為三個漢字,英文字母要求多一些,短句子可以放松些。
我們采用相關性作為樣本對,而不是語義等價性,是因為二者目標是沖突的。如上圖所示,貓抓老鼠跟老鼠抓貓,語義相反卻相關。我們的場景搜索為主,更加側(cè)重相關性。而且相關性比語義等價性更廣泛,語義等價更適合在相關性基礎上繼續(xù)微調(diào)。
有些句子篩選多次,有些句子沒有被篩選。我們限制句子入選頻次上限。對于落選句子,可以復制作為正樣本,可以拼接到入選句子中,還可以用逆向完型填空作為正樣本。
傳統(tǒng)的掩碼方式如SpanBert,采用幾何分布采樣掩碼長度,短掩碼概率高,長掩碼概率低,適用于長句子。但我們的語料是支離破碎的,當面對一二十個字的短句子時,傳統(tǒng)傾向掩碼兩個單字勝過遮蔽一個雙字,這不符合我們期望。所以我們改進了這個分布,讓他采樣最優(yōu)長度的概率最大,其他長度概率逐次降低,就像一個駱駝的駝峰,成為駝峰幾何分布,在我們短句富集的場景中更加健壯。
03
實驗效果
我們做了對照實驗。包括GUR-FULL,用到了語言建模和向量對比表示;UR-LCS的樣本對沒有經(jīng)過LCS篩選過濾;UR-CL沒有對比表示學習,相當于傳統(tǒng)的語言模型;GUR-LM只有向量對比表示學習,沒有語言建模學習,相當于為下游任務專門微調(diào);NLPC是百度場內(nèi)的一個word2vec算子。
實驗從一個T5-small開始繼續(xù)預訓練。訓練語料包括維基百科、維基文庫、CSL和我們的自有語料。我們的自有語料從物料庫抓來的,質(zhì)量很差,質(zhì)量最佳的部分是物料庫的標題。所以在其他文檔中挖正樣本時是近乎任意文本對篩選,而在我們語料庫中是用標題匹配正文的每一個句子。GUR-LCS沒有經(jīng)過LCS選,如果不這樣干的話,樣本對太爛了,這么做的話,跟GUR-FULL差別就小多了。
我們在幾個檢索任務中評測模型的向量表示效果。左圖是幾個模型在召回中的表現(xiàn),我們發(fā)現(xiàn)經(jīng)過向量表示學習的模型表現(xiàn)都是最好的,勝過BM25。我們還比較了排序目標,這回BM25扳回一局。這表明密集模型的泛化能力強,稀疏模型的確定性強,二者可以互補。實際上在信息檢索領域的下游任務中,密集模型和稀疏模型經(jīng)常搭配使用。
上圖是在不同訓練樣本量的NLU評測任務,每個任務有幾十到幾百個類別,以ACC得分評估效果。GUR模型還將分類的標簽轉(zhuǎn)化為向量,來為每個句子找到最近的標簽。上圖從左到右依據(jù)訓練樣本量遞增分別是零樣本、小樣本和充足微調(diào)評測。右圖是經(jīng)過充足微調(diào)之后的模型表現(xiàn),表明了各個子任務的本身難度,也是零樣本和小樣本表現(xiàn)的天花板。可見GUR模型可以依靠向量表示就可以在一些分類任務中實現(xiàn)零樣本推理。并且GUR模型的小樣本能力表現(xiàn)最突出。
這是在NLG的零樣本表現(xiàn)。我們在做標題生成和query擴展中,挖掘優(yōu)質(zhì)流量的標題,將關鍵詞保留,非關鍵詞隨機掩碼,經(jīng)過語言建模訓練的模型表現(xiàn)都不錯。這種自動prompt效果跟人工構(gòu)造的目標效果差不多,多樣性更廣泛,能夠滿足大批量生產(chǎn)。經(jīng)過語言建模任務的幾個模型表現(xiàn)差不多,上圖采用GUR模型樣例。
04
結(jié)語
本文提出了一種新的預訓練范式,上述對照實驗表明了,聯(lián)合訓練不會造成目標沖突。GUR模型在繼續(xù)預訓練時,可以在保持語言建模能力的基礎上,增加向量表示的能力。一次預訓練,到處零原樣本推理。適合業(yè)務部門低成本預訓練。
上述鏈接記載了我們的訓練細節(jié),參考文獻詳見論文引用,代碼版本比論文新一點。希望能給AI民主化做一點微小貢獻。大小模型有各自應用場景,GUR模型除了直接用于下游任務之外,還可以結(jié)合大模型使用。我們在流水線中先用小模型識別再用大模型指令任務,大模型也可以給小模型生產(chǎn)樣本,GUR小模型可以給大模型提供向量檢索。
論文中的模型為了探索多個實驗選用的小模型,實踐中若選用更大模型增益明顯。我們的探索還很不夠,需要有進一步工作,如果有意愿的話可以聯(lián)系laohur@gmail.com,期待能與大家共同進步。
▌2023數(shù)據(jù)智能創(chuàng)新與實踐大會
4大體系,專業(yè)解構(gòu)數(shù)據(jù)智能
16個主題論壇,覆蓋當下熱點與趨勢
70+演講,兼具創(chuàng)新與最佳實踐
1000+專業(yè)觀眾,內(nèi)行人的技術盛會
歡迎大家點擊下面鏈接報名 :
關鍵詞: