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