一区二区三区三上|欧美在线视频五区|国产午夜无码在线观看视频|亚洲国产裸体网站|无码成年人影视|亚洲AV亚洲AV|成人开心激情五月|欧美性爱内射视频|超碰人人干人人上|一区二区无码三区亚洲人区久久精品

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

如何利用機器學(xué)習(xí)思想,更好地去解決NLP分類任務(wù)

深度學(xué)習(xí)自然語言處理 ? 來源:深度學(xué)習(xí)自然語言處理 ? 作者:JayLou婁杰 ? 2020-08-28 10:02 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

在2020這個時間節(jié)點,對于NLP分類任務(wù),我們的關(guān)注重點早已不再是如何構(gòu)造模型、拘泥于分類模型長什么樣子了。如同CV領(lǐng)域當(dāng)前的重點一樣,我們更應(yīng)該關(guān)注如何利用機器學(xué)習(xí)思想,更好地去解決NLP分類任務(wù)中的低耗時、小樣本、魯棒性、不平衡、測試檢驗、增量學(xué)習(xí)、長文本等問題。

本文以QA形式探討了以下問題:

NLP分類任務(wù)我們每個NLPer都異常熟悉了,其在整個NLP業(yè)務(wù)中占據(jù)著舉足輕重的地位,更多領(lǐng)域的子任務(wù)也常常轉(zhuǎn)化為一個分類任務(wù),例如新聞分類、情感識別、意圖識別、關(guān)系分類、事件類型判斷等等。構(gòu)建一個完整的NLP分類任務(wù)主要包含4部分:標(biāo)簽定義、數(shù)據(jù)構(gòu)建、算法策略、測試部署。本文的組織架構(gòu),如下圖所示。

聲明:文中觀點謹(jǐn)代表筆者個人立場,盲目搬運有風(fēng)險~

Q1: 如何科學(xué)地構(gòu)建分類標(biāo)簽體系?

分類標(biāo)簽的定義至關(guān)重要,面對復(fù)雜的標(biāo)簽問題,最為關(guān)鍵的一點就是要緊密貼合業(yè)務(wù)、和專家共同設(shè)定,而不是靠“蠻力”去解決。這里給出筆者曾涉及到的一些標(biāo)簽定義方法:

長尾標(biāo)簽:某些分類標(biāo)簽下的樣本天然就很少,可以把這一類標(biāo)簽設(shè)置「其他」,然后在下一層級單獨對這些長尾標(biāo)簽進一步處理。

易混淆標(biāo)簽:一些標(biāo)簽下的樣本表現(xiàn)形式不易區(qū)分,首先需要思考這類標(biāo)簽是否可以直接合并;如果不可以,可以先將這類標(biāo)簽進行統(tǒng)一,然后在下一層級進行規(guī)則處理。

多標(biāo)簽:一些場景下的標(biāo)簽設(shè)置可能達到幾百個,可以設(shè)置多層級的標(biāo)簽體系進行處理。例如,先構(gòu)建標(biāo)簽大類、再構(gòu)建標(biāo)簽小類;也可以設(shè)置多個二分類,適用于標(biāo)簽分類相對獨立,并且經(jīng)常需要新增修改的場景,能做到相互獨立、便于維護。

未知標(biāo)簽:業(yè)務(wù)冷啟動時,如果尚不清楚設(shè)置哪些標(biāo)簽合適,可以嘗試通過文本聚類方式初步劃分標(biāo)簽,再輔以專家介入共同設(shè)定,這也是一個循環(huán)迭代的過程。

對于上述的「長尾標(biāo)簽」和「易混淆標(biāo)簽」,當(dāng)然也可在模型層面進行優(yōu)化,這往往涉及樣本不平衡和hard example的處理問題,我們在下文詳細(xì)闡述。

Q2: 標(biāo)注是「人工」智能的精髓所在,如何省成本、魯棒、高效地構(gòu)建任務(wù)數(shù)據(jù)集?

標(biāo)簽定義好后,就需要構(gòu)建分類任務(wù)數(shù)據(jù)集。數(shù)據(jù)集構(gòu)建,是日常工作的重要一環(huán)。既要省成本、也要魯棒,更要高效。構(gòu)建數(shù)據(jù)集的主要流程包括以下4步:

構(gòu)建初始數(shù)據(jù)集:為每個標(biāo)簽生產(chǎn)約100個樣本,具體的措施可以采取關(guān)鍵詞匹配等規(guī)則手段,再結(jié)合人工check進行。

「主動學(xué)習(xí)+遷移學(xué)習(xí)」降低標(biāo)注規(guī)模:1)主動學(xué)習(xí)旨在挖掘高價值樣本:即通過構(gòu)建較少的樣本就可以滿足指標(biāo)要求。根據(jù)初始構(gòu)建的數(shù)據(jù)集,可以train一個base model,然后挑選一些不確定性程度高(熵最大)+代表性高(非離群點)的樣本進行人工標(biāo)注。2)遷移學(xué)習(xí)降低對數(shù)據(jù)的依賴:遷移學(xué)習(xí)中預(yù)訓(xùn)練語言模型的成功,可以使其在較少的標(biāo)注樣本上finetune就可達到目標(biāo)指標(biāo)。

擴充標(biāo)注規(guī)模,數(shù)據(jù)增強最為關(guān)鍵:在標(biāo)注規(guī)模較小的少樣本場景下,可以通過文本增強方式擴充數(shù)據(jù)集,撬動數(shù)據(jù)杠桿。在《NLP中的少樣本困境問題探究》一文中我們對有關(guān)的文本增強技術(shù)進行了詳細(xì)探究。

清洗數(shù)據(jù)噪音,讓模型更加魯棒:對于標(biāo)注質(zhì)量問題要嚴(yán)格把關(guān),標(biāo)志質(zhì)量除了人工核查,也可以下面的方法自動化構(gòu)建降噪系統(tǒng):1)人工規(guī)則清洗:可以配置關(guān)鍵詞信息在內(nèi)的黑白名單進行強規(guī)則清洗。2)交叉驗證:可以通過對訓(xùn)練集進行交叉驗證,對那些標(biāo)簽不一致的樣本進行去除或者人工糾正。3)置信學(xué)習(xí):本質(zhì)上是對交叉驗證的進一步推廣,構(gòu)建置信度混淆矩陣并引入rank機制過濾噪聲樣本?!秳e讓數(shù)據(jù)坑了你!用置信學(xué)習(xí)找出錯誤標(biāo)注》一文中有詳細(xì)介紹。4)深度KNN過濾:KNN中的最近鄰度量,使其在魯棒學(xué)習(xí)中更加有效?!禗eep k-NN for Noisy Labels》一文表明:即使深度模型在含噪數(shù)據(jù)上進行訓(xùn)練,而將模型中間層表示適配于KNN進行噪聲樣本過濾,效果提升也很明顯。

在構(gòu)建數(shù)據(jù)集時,除了上述4步外,也要注重一些細(xì)節(jié)和原則問題:

針對少樣本問題,不能盲目追求前沿算法的變現(xiàn)落地。很多時候,我們總想寄托于某種方法能夠通用地解決低資源問題,但現(xiàn)實往往是策略調(diào)研的時間過長,指標(biāo)增益還沒有直接人工補標(biāo)數(shù)據(jù)來得快。筆者發(fā)現(xiàn),絕大數(shù)少樣本問題,必要的人工標(biāo)注不可少,多策略組合+“有計劃、有策略”的人工標(biāo)注也許是解決少樣本問題的最佳方式。

智能標(biāo)注是否是一個偽命題?智能標(biāo)注的本質(zhì)是高效,但主動學(xué)習(xí)往往并不高效。主動學(xué)習(xí)需要對專家系統(tǒng)多次查詢來進行標(biāo)注。所以采用主動學(xué)習(xí)方法時,不僅要降低標(biāo)注規(guī)模,也要注意降低查詢次數(shù)。實踐中,我們可以根據(jù)經(jīng)驗公式,優(yōu)先對指標(biāo)增益明顯的類別標(biāo)簽進行主動查詢。也可以根據(jù)經(jīng)驗公式預(yù)估一下滿足增益目標(biāo)的數(shù)據(jù)補充量,一次查詢盡量滿足要求,多標(biāo)一點也沒關(guān)系。所謂的“智能標(biāo)注系統(tǒng)”是否真正的智能,筆者總覺得多多少少還是不能脫離人工介入。

預(yù)訓(xùn)練模型要具備領(lǐng)域性,不要停止預(yù)訓(xùn)練!當(dāng)我們所執(zhí)行任務(wù)的標(biāo)注數(shù)據(jù)較少,所屬的領(lǐng)域與初始預(yù)訓(xùn)練語料越不相關(guān),那就不要停止領(lǐng)域預(yù)訓(xùn)練!

筆者這里給出了上述一些策略的簡要實驗結(jié)果,如下圖所示:

Q3: 模型化就是唯一嗎?分類任務(wù)中,算法策略構(gòu)建的基本原則是什么?

算法策略主要包括規(guī)則挖掘和模型化方法,基本原則應(yīng)是:

規(guī)則兜底:高頻case和hard case優(yōu)先進入規(guī)則模塊,防止因模型的更新迭代,而使針對重要case的處理不夠健壯。規(guī)則挖掘主要包括重要case緩存、模式挖掘、關(guān)鍵詞+規(guī)則設(shè)置等。此外,規(guī)則也可以跟在分類模型后面進行兜底處理。

模型泛化:模型化方法適合處理無法命中規(guī)則的case,具備泛化性。還有另一種處理邏輯是:如果case命中了規(guī)則,但模型對于規(guī)則預(yù)測的結(jié)果給出了很低的置信度(也就是模型認(rèn)為另一種類別的置信度更高),這時我們可以選擇相信模型,以模型輸出為準(zhǔn)。

不過,無論是對于規(guī)則,還是模型,長尾問題的處理都是比較棘手的,但我們可以通過一些手段盡可能加強處理長尾case的能力(Q6中具體介紹)。

Q4: 特征挖掘立竿見影,如何在特征工程方面搞點事情?

對于NLP分類任務(wù),特別是垂直領(lǐng)域的分類任務(wù),如果能夠在業(yè)務(wù)特征層面更好地進行挖掘,那么指標(biāo)增益可是立竿見影啊~

在特征工程方面,筆者這里主要給出了3種技巧:

離散數(shù)據(jù)挖掘

構(gòu)建關(guān)鍵詞的高維稀疏特征:類似結(jié)構(gòu)化數(shù)據(jù)挖掘(如CTR中的wide&deep),比如根據(jù)關(guān)鍵詞列表對文本內(nèi)容進行挖掘,構(gòu)建高維稀疏特征并喂入xDeepFM[1]中進行處理,最后與文本向量一同拼接。

其他業(yè)務(wù)特征:如疾病大類劃分、就診科室等業(yè)務(wù)特征。

文本特征挖掘

關(guān)鍵詞&實體詞與文本拼接:將從文本序列提取的關(guān)鍵詞或?qū)嶓w詞拼接在文本序列后,再進行分類。如在BERT中:[CLS][原始文本][SEP][關(guān)鍵詞1][SEP][實體詞1]...

關(guān)鍵詞embedding化:將關(guān)鍵詞劃分為不同的類別屬性,進行embedding化,不同于離散數(shù)據(jù)挖掘,這里的embedding不應(yīng)稀疏。

領(lǐng)域化向量挖掘:除了在領(lǐng)域語料上繼續(xù)預(yù)訓(xùn)練詞向量外,還可以有監(jiān)督地構(gòu)建詞向量:例如對于21分類問題,先根據(jù)弱監(jiān)督方法訓(xùn)練21個基于SVM的二分類器,然后提取每個詞匯在21個SVM中的權(quán)重,即可為每個詞匯可以構(gòu)建21維的詞向量。

標(biāo)簽特征融入

標(biāo)簽embedding 化:設(shè)置label embedding,然后通過注意力機制與詞向量進行交互,提取全局向量分類。

標(biāo)簽信息補充:可以將類別標(biāo)簽與原始文本一同拼接,然后進行2分類,如在BERT中:[CLS][原始文本][SEP][類別標(biāo)簽]。此外,也可以通過強化學(xué)習(xí)動態(tài)地補充標(biāo)簽信息,具體可參考文獻[2]。

Q5: 數(shù)據(jù)為王,不要將數(shù)據(jù)閑置,如何將無標(biāo)注數(shù)據(jù)更好地派上用場?

大量的無標(biāo)注數(shù)據(jù)蘊藏著巨大的能量!機器學(xué)習(xí)中,能夠充分利用、并挖掘無標(biāo)注數(shù)據(jù)價值的,自然是——自監(jiān)督學(xué)習(xí)和半監(jiān)督學(xué)習(xí)了。

自監(jiān)督學(xué)習(xí):乘風(fēng)破浪的NLP預(yù)訓(xùn)練語言模型充分利用了無標(biāo)注數(shù)據(jù),展現(xiàn)出強大能力。而如果我們設(shè)計分類任務(wù)時,能夠釋放更多的無標(biāo)注數(shù)據(jù),亦或者通過度量學(xué)習(xí)采集更多的無標(biāo)注數(shù)據(jù),就可以:

繼續(xù)進行任務(wù)級別的預(yù)訓(xùn)練,這是一種廉價、快速提升指標(biāo)的手段。

與分類任務(wù)一起構(gòu)造語言模型loss,進行多任務(wù)學(xué)習(xí)。

半監(jiān)督學(xué)習(xí):半監(jiān)督學(xué)習(xí)在CV中已經(jīng)發(fā)揚光大,常常有兩種形式:

偽標(biāo):可分為自訓(xùn)練和協(xié)同訓(xùn)練,Q6中介紹的數(shù)據(jù)蒸餾就屬于自訓(xùn)練的一種。在Google的最新論文《Rethinking Pre-training and Self-training》中,表明自監(jiān)督的局限性,而自訓(xùn)練表現(xiàn)良好,在每種條件設(shè)置下均能很好地發(fā)揮作用??梢?,如果在NLP中能夠構(gòu)建類似于ImageNet那樣大規(guī)模的有標(biāo)簽數(shù)據(jù)集,自訓(xùn)練“未來可期”。而聯(lián)合自監(jiān)督預(yù)訓(xùn)練和自訓(xùn)練可能會獲得更大的增益。

一致性訓(xùn)練:對于未標(biāo)記數(shù)據(jù),希望模型在其輸入受到輕微擾動時仍然產(chǎn)生相同的輸出分布,這種方式能夠提高一致性訓(xùn)練性能,充分挖掘未標(biāo)注數(shù)據(jù)中潛在的價值,最終增強泛化性能。

來自Google的《UDA:Unsupervised Data Augmentation for Consistency Training》結(jié)合了自監(jiān)督預(yù)訓(xùn)練和半監(jiān)督學(xué)習(xí)中的一致性訓(xùn)練,在六個文本分類任務(wù)進行了實驗,表明:

在少樣本場景下,借助UDA,最終能夠逼近全量數(shù)據(jù)集時所達到的指標(biāo):在IMDb的2分類任務(wù)上,具有20個標(biāo)注數(shù)據(jù)的UDA優(yōu)于在1250倍標(biāo)注數(shù)據(jù)上訓(xùn)練的SOTA模型。但相較于2分類任務(wù),5分類任務(wù)難度更高,未來仍有提升空間。

全量數(shù)據(jù)下,融合UDA框架,性能也有一定提升。

下面是筆者的一些簡要實驗結(jié)果:

Q6: 攻克分類任務(wù)的難點:如何更好處理不平衡問題(hard example問題)?

不平衡問題(長尾問題)是文本分類任務(wù)一個難啃的骨頭。也許有人會問:為何不在初始構(gòu)造數(shù)據(jù)集時,就讓每個分類標(biāo)簽下的樣本數(shù)量相同,這不就解決不平衡問題了嗎?

事實上,不平衡問題不僅僅是分類標(biāo)簽下樣本數(shù)量的不平衡,其本質(zhì)上更是難易樣本的不平衡:即使樣本數(shù)量是平衡的,有的hard example還是很難學(xué)習(xí)。類似,對那些數(shù)量較少的類別進行學(xué)習(xí),在不做數(shù)據(jù)補充的情況下,也可看作是一個hard example問題。

解決不平衡問題的通常思路有兩種:重采樣(re-sampling)和重加權(quán)(re-weighting):

(1)重采樣(re-sampling)

重采用的通用公式為:

為數(shù)據(jù)集的類別數(shù)量,為類別的樣本總數(shù), 為從 類別中采樣一個樣本的概率., 表示所有類別都采樣相同數(shù)量的樣本。

常用的重采樣方法有:

欠采樣&過采樣&SMOTE

欠采樣:拋棄大量case,可能導(dǎo)致偏差加大;

過采樣:可能會導(dǎo)致過擬合;

SMOTE:一種近鄰插值,降低過擬合風(fēng)險,但不能直接應(yīng)用于NLP任務(wù)的離散空間插值。

數(shù)據(jù)增強:文本增強技術(shù)更適合于替代上述過采樣和SMOTE。

解耦特征和標(biāo)簽分布:文獻[3] 認(rèn)為對不平衡問題的再平衡本質(zhì)應(yīng)只是分類器的再平衡過程,類別標(biāo)簽分布不應(yīng)影響特征空間的分布?;诖?,可以解耦類別標(biāo)簽分布和特征空間分布:

首先不做任何再平衡,直接對原始數(shù)據(jù)訓(xùn)練一個base_model。

將base_model的特征提取器freeze,通過類別平衡采樣(對尾部類別重采樣)只調(diào)整分類器。

分類器權(quán)重模與類別數(shù)量呈正相關(guān),因此還需將做歸一化處理。

Curriculum Learning(課程學(xué)習(xí)):課程學(xué)習(xí)[4]是一種模擬人類學(xué)習(xí)過程的訓(xùn)練策略,從易到難進行學(xué)習(xí):

Sampling Scheduler:調(diào)整訓(xùn)練集的數(shù)據(jù)分布,逐步將采樣數(shù)據(jù)集的樣本分布從原先的不平衡調(diào)整到后期的平衡狀態(tài)

Loss Scheduler:開始傾向于拉大不同類目之間特征的距離,后期再傾向于對特征做分類。

(2)重加權(quán)(re-weighting)

重加權(quán)就是改變分類loss。相較于重采樣,重加權(quán)l(xiāng)oss更加靈活和方便。其常用方法有:

loss類別加權(quán):通常根據(jù)類別數(shù)量進行加權(quán),加權(quán)系數(shù)與類別數(shù)量成反比。

Focal Loss:上述loss類別加權(quán)主要關(guān)注正負(fù)樣本數(shù)量的不平衡,并沒有關(guān)注難易不平衡。Focal Loss主要關(guān)注難易樣本的不平衡問題,可根據(jù)對高置信度()樣本進行降權(quán):

GHM Loss:GHM(gradient harmonizing mechanism) 是一種梯度調(diào)和機制。Focal Loss雖然強調(diào)對hard example的學(xué)習(xí),但不是所有的hard example都值得關(guān)注,有的hard example很可能是離群點,過分關(guān)注不是錯上加錯了嗎?GHM定義了梯度模長g:

如下圖所示(圖片來自知乎[5]),梯度模長g接近于0的樣本數(shù)量最多,隨著梯度模長的增長,樣本數(shù)量迅速減少,但是在梯度模長接近于1時,樣本數(shù)量也挺多。

因此,GHM的出發(fā)點是:既不要關(guān)注那些容易學(xué)的樣本,也不要關(guān)注那些離群點特別難分的樣本。為此,作者定義了梯度密度,其物理含義是:單位梯度模長g部分的樣本個數(shù)。最終GHM Loss為:

Dice Loss:

與Focal Loss類似,訓(xùn)練時推動模型更加關(guān)注困難的樣本,使用作為每個樣本的權(quán)重。改進之后的DSC為:

主要為了解決訓(xùn)練和測試時F1指標(biāo)不一致的問題,提出一個基于Dice Loss的自適應(yīng)損失——DSC,對F1指標(biāo)更加健壯:

對logit調(diào)整權(quán)重:實際上是將類別概率引入loss中,并對logit調(diào)整權(quán)重,本質(zhì)上是一種通過互信息思想來緩解類別不平衡問題:

Q7: BERT時代,如何處理長文本分類?

由于顯存占用和算力的限制,BERT等預(yù)訓(xùn)練語言模型的input一般來說最長512個token。某些場景下處理長文本分類,BERT可能還不如CNN效果好。為能讓BERT等更適合處理長文本,筆者從「文本處理」和「改進attention機制」兩個方面給出一些可以嘗試的方法:

(1)文本處理

固定截斷:一般來說,文本的開頭和結(jié)尾信息量較大,可以按照一定比例對截取出文本的開頭和結(jié)尾;

隨機截斷:如果固定截斷信息損失較大,可以在DataLoader中每次以不同的隨機概率進行截斷,這種截斷可以讓模型看到更多形態(tài)的case;

截斷&滑窗+預(yù)測平均:通過隨機截斷或者固定滑窗將一個樣本切割成多個樣本,在預(yù)測時對多個樣本的結(jié)果進行平均;

截斷+關(guān)鍵詞提?。翰扇≈苯咏財嗟姆绞娇赡軙?dǎo)致信息量損失,可以通過關(guān)鍵詞提取補充信息。如:[CLS][截斷文本][SEP][關(guān)鍵詞1][SEP][關(guān)鍵詞2]...

(2)改進attention機制

Transformer采取的attention機制,其時間復(fù)雜度為,其中為文本長度。最近一些paper聚焦于對attention機制的改進、降低計算復(fù)雜度,以更適合處理長文本序列。主要包括:

Reformer[6]:主要采取局部敏感哈希機制(Locality Sensitve Hashing,LSH),這種機制類似于桶排序:將相近的向量先歸為一類,只計算同類向量之間的點積,將時間復(fù)雜度降為O(nlog(n));考慮到相似的向量會被分到不同的桶里,Reformer進行了多輪LSH,但這反而會降低效率。

Linformer[7]:提出自注意力是低秩的,信息集中在少量(個)的最大奇異值中。Linformer利用線性映射將時間復(fù)雜度降為,當(dāng)時,接近于線性時間。但實踐中表明,k增加效果會更好,k一般取256或512。

Longformer[8]:采取滑窗機制,只在固定窗口大小w內(nèi)計算局部attention,復(fù)雜度降為,當(dāng)時,接近于線性時間(實踐中仍然取512);為擴大感受野,也可以采取“膨脹滑窗機制”; 也可以在特殊位置,例如[CLS]處,局部地計算全局attention。詳見《Longformer:超越RoBERTa,為長文檔而生的預(yù)訓(xùn)練模型》。

Big Bird[9]:在Longformer基礎(chǔ)上增加了Random attention,當(dāng)前長序列建模的SOTA,刷新了QA和摘要的SOTA,同時也被證明是圖靈完備的。如下圖:

對于絕大數(shù)長文本分類問題,筆者建議首選「文本處理」方式。對于有條件的,可以采取上述「改進attention機制」方法進行嘗試,比如,對已經(jīng)預(yù)訓(xùn)練好的RoBERTa采取Longformer機制繼續(xù)預(yù)訓(xùn)練。Longformer已經(jīng)開源,并且可以直接在cuda內(nèi)核上進行優(yōu)化加速。

Q8: 預(yù)訓(xùn)練融合:NLP競賽利器!

各大NLP競賽中,模型融合(集成)是一個重要的提分神器,而除了不同模型的融合,另一種更加有效的方式就是——預(yù)訓(xùn)練融合。

在NLP任務(wù)中,不同模型的預(yù)測差異更多取決于底層模型(embedding層)的差異,這不同于CV領(lǐng)域往往取決于上層模型的異構(gòu)程度。

那么怎么豐富底層模型呢?一個直接的方式就是把不同預(yù)訓(xùn)練模型融合:如可以將word2vec、elmo、BERT、XLNET、ALBERT統(tǒng)一作為特征提取器,但這時需要注意(以下內(nèi)容部分參考自"王然老師課程"[10],筆者進行了歸納整合):

一般不需要直接進行finetune。當(dāng)然也可先單獨對BERT、XLNET、ALBERT進行finetune,然后再一起進行特征集成。

分詞器可以采取最佳預(yù)訓(xùn)練模型的tokenizer,也可同時使用不同預(yù)訓(xùn)練模型的tokenizer。

不要忽視簡單詞向量的作用。類似字詞向量、bi-gram向量的補充對于底層模型的豐富性很關(guān)鍵。

配置上層模型時,應(yīng)注意學(xué)習(xí)率的調(diào)整。將集成的底層特征喂入biLSTM或CNN中,也可以拼接biLSTM和CNN共同作為上層模型。訓(xùn)練時,可以先將底層預(yù)訓(xùn)練模型freeze,只調(diào)整上層模型的學(xué)習(xí)率(較大),最后再全局調(diào)整學(xué)習(xí)率(較?。?。

CLS最后一定還要再用一次。無論上層模型怎樣。CLS特征要再最后直接進入全連接層。

Q9: 你認(rèn)真構(gòu)造離線測試集了嗎?指標(biāo)高,也許是虛高!

很多時候時候我們構(gòu)造測試集,往往都是根據(jù)初始標(biāo)注集自動劃分測試集,這在任務(wù)初期完全OK。但我們不能就此相信指標(biāo)高,一切就OK。模型的評估環(huán)節(jié)至關(guān)重要,不能總是上線了才醒悟,不能總是等著線上badcase來迭代。

ACL2020最佳論文《Beyond Accuracy: Behavioral Testing of NLP Models with CHECKLIST》告訴我們:應(yīng)通過CheckList全方位對模型多項“能力”進行評估,其可快速生成大規(guī)模的測試樣例。

筆者發(fā)現(xiàn)在具體實踐中,為了讓評估更加全面,其實可以:

積累同義詞庫、生僻字,進行性質(zhì)不變測試、詞匯測試;

構(gòu)造對抗樣本,進行攻擊測試;

防患于未然,提前撈一批數(shù)據(jù),找到那些不確定性高的case進行測試;

從上述測試中,發(fā)現(xiàn)bug自然是一件好事,問題的暴露讓我們心里才有底。

最近開源的OpenAttack文本對抗攻擊工具包也可幫助我們進行魯棒性測試,主要包括:文本預(yù)處理、受害模型訪問、對抗樣本生成、對抗攻擊評測以及對抗訓(xùn)練等。對抗攻擊能夠幫助暴露受害模型的弱點,有助于提高模型的魯棒性和可解釋性,具有重要的研究意義和應(yīng)用價值。

Q10: 模型更新迭代時,如何進行增量學(xué)習(xí),不遺忘先前記憶?

模型化的手段在進行更新迭代時,也許會出現(xiàn)遺忘問題,即對之前已經(jīng)處理好的case不work。如果badcase不多,先采取規(guī)則優(yōu)化是相對健壯的,可以用規(guī)則設(shè)置旁路,專門處置應(yīng)急badcase。

此外,筆者給出以下幾種解決此問題的方案:

直接現(xiàn)有數(shù)據(jù)與原有數(shù)據(jù)混合訓(xùn)練;

將特征抽取層freeze,對新類別只更新softMax全連接層;

采取知識蒸餾方式。在現(xiàn)有數(shù)據(jù)與原有數(shù)據(jù)混合一起訓(xùn)練時,對原有類別進行蒸餾,指導(dǎo)新模型學(xué)習(xí)。

將分類標(biāo)簽統(tǒng)一進行l(wèi)abel embedding,新增類別單獨構(gòu)建的label embedding不影響原有類別。從而將分類轉(zhuǎn)為一個match和rank問題。

Q11: 低耗時場景,如何讓TextCNN逼近BERT的效果?

BERT雖然強大,但在低耗時場景、少機器場景下,直接拿BERT部署分類模型通常行不通。我們是否可以采取一個輕量級的模型,比如TextCNN,去逼近BERT的效果呢?

為解決這一問題,我們通常采用知識蒸餾技術(shù)。蒸餾的本質(zhì)是函數(shù)逼近,但如果直接將BERT(Teacher模型)蒸餾到一個十分輕量的TextCNN(Student模型),指標(biāo)一般會下降。

如何盡量緩解這一情況呢?筆者根據(jù)「無標(biāo)注數(shù)據(jù)規(guī)模大小」分別給出了2種蒸餾方案——模型蒸餾和數(shù)據(jù)蒸餾。

(1)模型蒸餾

如果業(yè)務(wù)中的無標(biāo)注數(shù)據(jù)較少,我們通常采取logits近似(值近似)讓TextCNN進行學(xué)習(xí),這種方式可稱之為模型蒸餾。這是一種離線蒸餾方式:即先對Teacher模型finetune,然后freeze,再讓Student模型學(xué)習(xí)。為避免蒸餾后指標(biāo)下降明顯,我們可以采取以下方式改進:

數(shù)據(jù)增強:在蒸餾的同時引入文本增強技術(shù),具體的增強技術(shù)可參考《NLP中的少樣本困境問題探究》。TinyBERT就采取了增強技術(shù),以輔助蒸餾。

集成蒸餾:對不同Teacher模型(如不同的預(yù)訓(xùn)練模型)的logits集成,讓TextCNN學(xué)習(xí)?!讣烧麴s+數(shù)據(jù)增強」可以有效避免指標(biāo)明顯下降。

聯(lián)合蒸餾:不同于離線蒸餾,這是一種聯(lián)合訓(xùn)練方式。Teacher模型訓(xùn)練的同時,就將logits傳給Student模型學(xué)習(xí)。聯(lián)合蒸餾可以減輕異構(gòu)化嚴(yán)重的Teacher和Student模型間的gap,Student模型可以慢慢從中間狀態(tài)進行學(xué)習(xí),更好地模仿Teacher行為。

(2)數(shù)據(jù)蒸餾

如果業(yè)務(wù)中的無標(biāo)注數(shù)據(jù)規(guī)模較大,我們可以采取標(biāo)簽近似讓TextCNN進行學(xué)習(xí)。這種方式稱為數(shù)據(jù)蒸餾。其本質(zhì)與偽標(biāo)方法類似:讓Teacher模型對無標(biāo)注數(shù)據(jù)進行偽標(biāo),再讓Student模型進行學(xué)習(xí)。其具體步驟為:

訓(xùn)練1:BERT在標(biāo)注數(shù)據(jù)集A上finetune,訓(xùn)練一個bert_model;

偽標(biāo):bert_model對大量無標(biāo)注數(shù)據(jù)U進行預(yù)測(偽標(biāo)),然后根據(jù)置信度打分,選擇高置信度的數(shù)據(jù)B填充到標(biāo)注數(shù)據(jù)A,這時候標(biāo)注數(shù)據(jù)變?yōu)椋ˋ+B);

訓(xùn)練2:基于標(biāo)注數(shù)據(jù)A+B訓(xùn)練TextCNN,得到textcnn_model_1;

訓(xùn)練3(optional):讓第3步訓(xùn)練好的textcnn_model_1基于標(biāo)注數(shù)據(jù)A再訓(xùn)練一次,形成最終模型textcnn_model_2;

對上述兩種蒸餾方式,筆者對業(yè)務(wù)中的一個21個分類任務(wù)(每類100條樣本)進行了實驗,相關(guān)結(jié)果如下:

從上圖可以看出,如果我們能夠獲取更多的無標(biāo)注數(shù)據(jù),采取數(shù)據(jù)蒸餾的方式則更為有效,可以讓一個輕量級的TextCNN最大程度逼近BERT。

不過也許有的讀者會問,為什么不直接蒸餾為一個淺層BERT呢?這當(dāng)然可以,不過筆者這里推薦TextCNN的原因是:它實在太輕了,而且會更加方便引入一些業(yè)務(wù)相關(guān)的特征(會再之后的文章中再詳細(xì)介紹)。

如果仍然想蒸餾為一個淺層BERT,我們需要首先思考自己所在的領(lǐng)域是否與BERT原始預(yù)訓(xùn)練領(lǐng)域的gap是否較大?如果gap較大,我們不要停止預(yù)訓(xùn)練,繼續(xù)進行領(lǐng)域預(yù)訓(xùn)練、然后再蒸餾;或者重新預(yù)訓(xùn)練一個淺層BERT。此外,采取BERT上線時,也可以進行算子融合(Faster Transformer)或者混合精度等方式。

寫在最后

讓我們一起致敬:那些年陪我們一起入門(坑)NLP的分類模型吧~

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 機器學(xué)習(xí)
    +關(guān)注

    關(guān)注

    66

    文章

    8505

    瀏覽量

    134677
  • 數(shù)據(jù)集
    +關(guān)注

    關(guān)注

    4

    文章

    1224

    瀏覽量

    25463
  • nlp
    nlp
    +關(guān)注

    關(guān)注

    1

    文章

    490

    瀏覽量

    22631

原文標(biāo)題:打破BERT天花板:11種花式煉丹術(shù)刷爆NLP分類SOTA!

文章出處:【微信號:zenRRan,微信公眾號:深度學(xué)習(xí)自然語言處理】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關(guān)推薦
    熱點推薦

    利用NVIDIA Isaac Lab訓(xùn)練工業(yè)機器人齒輪裝配任務(wù)

    多部件裝配在制造、汽車、航空航天、電子、醫(yī)療設(shè)備等絕大多數(shù)行業(yè)中都扮演著關(guān)鍵角色。雖然應(yīng)用廣泛,但是機器人裝配仍是一項極具挑戰(zhàn)性的任務(wù)。這類任務(wù)涉及復(fù)雜的交互,機器人必須通過持續(xù)的物理
    的頭像 發(fā)表于 06-12 16:00 ?817次閱讀
    <b class='flag-5'>利用</b>NVIDIA Isaac Lab訓(xùn)練工業(yè)<b class='flag-5'>機器</b>人齒輪裝配<b class='flag-5'>任務(wù)</b>

    xgboost在圖像分類中的應(yīng)用

    和易用性,在各種機器學(xué)習(xí)任務(wù)中得到了廣泛應(yīng)用,包括分類、回歸和排序問題。在圖像分類領(lǐng)域,盡管深度學(xué)習(xí)
    的頭像 發(fā)表于 01-19 11:16 ?1019次閱讀

    《具身智能機器人系統(tǒng)》第7-9章閱讀心得之具身智能機器人與大模型

    醫(yī)療領(lǐng)域,手術(shù)輔助機器人需要毫米級的精確控制,書中有介紹基于視覺伺服的實時控制算法,以及如何利用大模型優(yōu)化手術(shù)路徑規(guī)劃。工業(yè)場景中,協(xié)作機器人面臨的主要挑戰(zhàn)是快速適應(yīng)新工藝流程。具身智能通過在線
    發(fā)表于 12-24 15:03

    【「具身智能機器人系統(tǒng)」閱讀體驗】+初品的體驗

    動態(tài)互動的。 該理論強調(diào)智能行為源于智能體的物理存在和行為能力,智能體必須具備感知環(huán)境并在其中執(zhí)行任務(wù)的能力。具身智能的實現(xiàn)涵蓋了機器學(xué)習(xí)、人工智能、機器人學(xué)、計算機視覺、自然語言處理
    發(fā)表于 12-20 19:17

    傅立葉變換在機器學(xué)習(xí)中的應(yīng)用 常見傅立葉變換的誤區(qū)解析

    傅里葉變換在機器學(xué)習(xí)中的應(yīng)用 傅里葉變換是一種將信號分解為其組成頻率分量的數(shù)學(xué)運算,它在機器學(xué)習(xí)中的應(yīng)用日益廣泛。以下是一些主要的應(yīng)用領(lǐng)域: 信號處理 : 音頻處理:傅里葉變換有助于識
    的頭像 發(fā)表于 12-06 17:06 ?1073次閱讀

    自然語言處理與機器學(xué)習(xí)的關(guān)系 自然語言處理的基本概念及步驟

    自然語言處理(Natural Language Processing,簡稱NLP)是人工智能和語言學(xué)領(lǐng)域的一個分支,它致力于研究如何讓計算機能夠理解、解釋和生成人類語言。機器學(xué)習(xí)(Machine
    的頭像 發(fā)表于 12-05 15:21 ?1994次閱讀

    什么是機器學(xué)習(xí)?通過機器學(xué)習(xí)方法能解決哪些問題?

    來源:Master編程樹“機器學(xué)習(xí)”最初的研究動機是讓計算機系統(tǒng)具有人的學(xué)習(xí)能力以便實現(xiàn)人工智能。因為沒有學(xué)習(xí)能力的系統(tǒng)很難被認(rèn)為是具有智能的。目前被廣泛采用的
    的頭像 發(fā)表于 11-16 01:07 ?970次閱讀
    什么是<b class='flag-5'>機器</b><b class='flag-5'>學(xué)習(xí)</b>?通過<b class='flag-5'>機器</b><b class='flag-5'>學(xué)習(xí)</b>方法能解決哪些問題?

    NPU與機器學(xué)習(xí)算法的關(guān)系

    在人工智能領(lǐng)域,機器學(xué)習(xí)算法是實現(xiàn)智能系統(tǒng)的核心。隨著數(shù)據(jù)量的激增和算法復(fù)雜度的提升,對計算資源的需求也在不斷增長。NPU作為一種專門為深度學(xué)習(xí)機器
    的頭像 發(fā)表于 11-15 09:19 ?1241次閱讀

    NLP技術(shù)在聊天機器人中的作用

    的第一個作用是幫助聊天機器人理解用戶的意圖。聊天機器人需要能夠識別用戶的問題或請求,并將其轉(zhuǎn)化為可執(zhí)行的任務(wù)。這涉及到以下幾個步驟: 詞義消歧 :NLP技術(shù)可以幫助聊天
    的頭像 發(fā)表于 11-11 10:33 ?1048次閱讀

    使用LLM進行自然語言處理的優(yōu)缺點

    語言任務(wù),如文本分類、情感分析、機器翻譯等。以下是使用LLM進行NLP的一些優(yōu)缺點: 優(yōu)點 強大的語言理解能力 : LLM通過訓(xùn)練學(xué)習(xí)了大量
    的頭像 發(fā)表于 11-08 09:27 ?2472次閱讀

    【每天學(xué)點AI】KNN算法:簡單有效的機器學(xué)習(xí)分類

    過程,其實就是一個簡單的分類問題,而KNN(K-NearestNeighbors)算法正是模仿這種人類決策過程的機器學(xué)習(xí)算法。|什么是KNN?KNN(K-NearestNeighbo
    的頭像 發(fā)表于 10-31 14:09 ?852次閱讀
    【每天學(xué)點AI】KNN算法:簡單有效的<b class='flag-5'>機器</b><b class='flag-5'>學(xué)習(xí)</b><b class='flag-5'>分類</b>器

    RK3588 技術(shù)分享 | 在Android系統(tǒng)中使用NPU實現(xiàn)Yolov5分類檢測

    : NPU幫助機器完成更高效的翻譯、文本分類和情感分析,推動了自然語言處理技術(shù)的發(fā)展。 實例分享:Yolov5分類檢測 在RK3588處理器上,不僅可以基于Linux系統(tǒng)使用NPU,也可以
    發(fā)表于 10-24 10:13

    RK3588 技術(shù)分享 | 在Android系統(tǒng)中使用NPU實現(xiàn)Yolov5分類檢測

    : NPU幫助機器完成更高效的翻譯、文本分類和情感分析,推動了自然語言處理技術(shù)的發(fā)展。 實例分享:Yolov5分類檢測 在RK3588處理器上,不僅可以基于Linux系統(tǒng)使用NPU,也可以
    發(fā)表于 08-20 11:13

    【「時間序列與機器學(xué)習(xí)」閱讀體驗】時間序列的信息提取

    個重要環(huán)節(jié),目標(biāo)是從給定的時間序列數(shù)據(jù)中提取出有用的信息和特征,以支持后續(xù)的分析和預(yù)測任務(wù)。 特征工程(Feature Engineering)是將數(shù)據(jù)轉(zhuǎn)換為更好地表示潛在問題的特征,從而提高機器
    發(fā)表于 08-17 21:12

    【《時間序列與機器學(xué)習(xí)》閱讀體驗】+ 時間序列的信息提取

    本人有些機器學(xué)習(xí)的基礎(chǔ),理解起來一點也不輕松,加油。 作者首先說明了時間序列的信息提取是時間序列分析的一個重要環(huán)節(jié),目標(biāo)是從給定的時間序列數(shù)據(jù)中提取出有用的信息和特征,以支持后續(xù)的分析和預(yù)測任務(wù),可以
    發(fā)表于 08-14 18:00