日常工作中,因為很多原因,我們面對的問題總不能一下放模型里,就能就得到很好的效果,前面有文章詳細(xì)講過可以通過bad case分析定位并解決問題(心法利器[40] | bad case治療術(shù):解決篇,這是最后一篇),今天換個角度,從一個分類任務(wù)來看,會有哪些問題,以及有哪些可以考慮的解決方案。
這里,我按照問題作為分類,來給出一些常見的解決方案。
看完這篇文章后,別遇事不決換模型了,別讓老板知道你只會這招(狗頭)。
數(shù)據(jù)的問題
在現(xiàn)實問題下,有80%以上的效果不好,都是由于數(shù)據(jù)的問題,這里我來列舉一些常見的數(shù)據(jù)問題以及解決方案。
數(shù)據(jù)標(biāo)注錯誤
人很難不犯錯的,即使是一些比較出名的開源數(shù)據(jù)集,其實也很難達(dá)到全對的水平,很多數(shù)據(jù)集只要認(rèn)真做過case,例如做過case分析,就會發(fā)現(xiàn)其實有很多的標(biāo)注錯誤,實際應(yīng)用中,大部分情況準(zhǔn)確率能達(dá)到95%就已經(jīng)是高質(zhì)量的數(shù)據(jù)了,一般能達(dá)到90-92%這個數(shù)據(jù)集就基本可用了,而如果模型本身預(yù)測的結(jié)果準(zhǔn)確率就只是在90%上下,其實模型已經(jīng)很大程度擬合好了這個數(shù)據(jù)集,再往上的提升很可能只是分?jǐn)?shù)高,擬合了錯誤結(jié)果而已,這個是需要首先說明的。
其次,有些數(shù)據(jù)集,和很多原因有關(guān),無論是訓(xùn)練集還是測試集,準(zhǔn)確率可能都只是在六七十甚至更低,我們其實無法苛求模型能達(dá)到更好的水平。對訓(xùn)練集,如果質(zhì)量低,這事就和拿了本錯誤的教材一樣,根本學(xué)不好,對測試集,再優(yōu)秀的模型遇到這個測試集,即使預(yù)測對了,標(biāo)注是錯的,體現(xiàn)在指標(biāo)上也是準(zhǔn)確率很低,模型怎么換效果都不好。
這個數(shù)據(jù)標(biāo)注問題,往往體現(xiàn)的是這個系統(tǒng)的上限,此時,我們所應(yīng)該聚焦的,就是提升數(shù)據(jù)標(biāo)注的準(zhǔn)確性,這里給出大家提一些可以考慮的策略:
仔細(xì)修正標(biāo)注策略(畢竟數(shù)據(jù)標(biāo)注除了人工還有很多方法),制定更多規(guī)則來優(yōu)化。
如果數(shù)據(jù)標(biāo)注比較困難,可以考慮多人標(biāo)注,對不一致的部分進(jìn)行復(fù)合,整體質(zhì)量提升會比較明顯。
配合模型、規(guī)則等多個策略進(jìn)行比對,對不一致的部分進(jìn)行復(fù)標(biāo)。
利用模型,對模棱兩可(二分類概率在0.5上下)或者明顯錯誤的(正類prob在0.1左右或負(fù)類prob在0.9左右),進(jìn)行復(fù)標(biāo)。
后面幾個策略其實挺“主動學(xué)習(xí)”的,核心就是通過模糊或者不一致來挖掘很可能有錯的部分進(jìn)行復(fù)合,來提升整體的質(zhì)量。
數(shù)據(jù)數(shù)量問題
現(xiàn)階段,雖然有無監(jiān)督之類的很多策略,但是對于特定的任務(wù)或者需求,總是離不開訓(xùn)練數(shù)據(jù)的,我們需要數(shù)據(jù)來讓模型知道“遇到這個情況該選哪個”,因此數(shù)據(jù)數(shù)量是需要基本保證的。
首先,很多人很容易想到兩個常見策略:
數(shù)據(jù)增強。
無監(jiān)督。
這兩個方案,是可以的,但不是萬能的:
數(shù)據(jù)增強——在本身數(shù)據(jù)的覆蓋面已經(jīng)較充足的情況。例如天氣意圖的分類,其實來回就這么集中情況,列舉完增強就行。但是遇到類似電影、電視劇意圖的分類,分布很難完整覆蓋,只有幾條樣本完全不能通過常規(guī)的增強解決。
無監(jiān)督——如果有自信模型能往特定的方向預(yù)測,那這么做其實還行,但是定向這事很困難的,例如都是二分類問題,一個分是否是天氣意圖,一個分是否是電影意圖,都是同一批數(shù)據(jù),如何知道訓(xùn)出的無監(jiān)督模型朝著那個任務(wù)的方向預(yù)測?
所以,私以為還是要從人體的根源出發(fā)。分幾個情況吧:
整體數(shù)據(jù)都很少的情況。
整體數(shù)據(jù)尚可,但是特定類目或者特定情況的數(shù)據(jù)太少的情況。
對于整體數(shù)據(jù)都很少的問題,如果是像我前面說的——在本身數(shù)據(jù)的覆蓋面已經(jīng)較充足的情況,那其實直接數(shù)據(jù)增強是可以的,增強之后會讓模型強化對特定意識的了解,直接就能學(xué)出來了,但是如果不足,那就要找渠道增加數(shù)據(jù)了,有用戶數(shù)據(jù)的,可以撈一些用戶query,根據(jù)用戶點擊在整理下,沒有的,結(jié)合一些詞典構(gòu)造一些樣本放入也是可以的,甚至有一些場景是有公開數(shù)據(jù)的,直接拿來用。
而對于數(shù)據(jù)樣本不均衡的問題,之前有寫過文章介紹,此處不贅述了(心法利器[44] | 樣本不均衡之我見)。
小補充
只有在數(shù)據(jù)的數(shù)量和質(zhì)量都比較充足的時候,我們才有資格去談模型,談其他的優(yōu)化策略,這應(yīng)該是一名成熟的算法工程師所需要掌握的基礎(chǔ)知識。
模型升級的收益
模型的升級往往帶來的是一個系統(tǒng)級別的提升,這個系統(tǒng)提升是上限的提升,只有到這個系統(tǒng)內(nèi)部的多個位置都已經(jīng)有比較高了,這時候換模型才能帶來比較明顯的收益,例如數(shù)據(jù)已經(jīng)調(diào)教的比較好,沒有什么大問題,這個時候升級模型能很快提分,這里例如fasttext->textcnn,上預(yù)訓(xùn)練模型等,但是確實是要看清切換的時機,畢竟切換是需要成本的,到時候切換完效果不提升,白干活的話KPI很容易崩的(狗頭)。
有關(guān)切換時機,大家可以看這篇(心法利器[63] | 預(yù)訓(xùn)練模型的上線時機)。
特定樣本引入打來的提升
常規(guī)下,要調(diào)整效果,還是要從bad case里出發(fā),理解數(shù)據(jù)中常見的問題,然后進(jìn)行優(yōu)化,其實是日常最常用的方式,這個方式簡單快速,但是也有難點,難的是發(fā)現(xiàn)規(guī)律并進(jìn)行解決,這里給大家介紹一些比較常見的問題和主要解決方法。
正負(fù)樣本里某些詞的詞頻差距很大,導(dǎo)致模型認(rèn)為出現(xiàn)的這個詞就是分類標(biāo)志,導(dǎo)致分類錯誤。
解決方法1,撈日志,這個詞在正類多就找?guī)н@個詞的負(fù)類樣本,反之亦然。
解決方法2,刪除樣本,例如這個詞在正類多就干掉一些正樣本。
泛化能力不足,模型只學(xué)到了正規(guī)的句式,對于泛化、換個說法的樣本可能就預(yù)測錯了。
r-dropout,值得推薦。
拼接,和一些無意義、閑聊類的句子進(jìn)行拼接,維持源類別,放入對應(yīng)類目的樣本中。
數(shù)據(jù)增強,尤其關(guān)注隨機交叉的這個策略,有收益。
檢索增強,用向量召回最接近的句子,用這批放入對應(yīng)類目。
因為缺乏特定形式的樣本(模型沒見過),導(dǎo)致模型只能猜還猜不對。
加入特定類型的樣本。(在天氣意圖分類數(shù)據(jù)里,把“天氣之子”作為負(fù)樣本放入訓(xùn)練集中)
考慮通過別的方式解決,例如用詞典(心法利器[41] | 我常說的詞典匹配到底怎么做)或者以搜代分的方式來處理(心法利器[60] | 以搜代分的生效機理)補充。
當(dāng)然,還有一些別的策略,這些策略很大程度和自己對業(yè)務(wù)、數(shù)據(jù)的理解有關(guān),越是了解提升的幅度會越大。最近的一次實驗,由于用戶query其實都是語音轉(zhuǎn)文字得到的句子,而由于采音、ASR等問題,得到的用戶query可能不是完整的,不完整意味著可能有關(guān)鍵詞但是信息仍舊模糊,這就容易導(dǎo)致誤召回了(模糊或者無意義的句子是會被認(rèn)為是負(fù)類的),因此,我才用的策略是對常見高頻的句子做隨機截斷,然后放入負(fù)類中,最終結(jié)果是以2%的召回率代價換來了4%的準(zhǔn)確率提升,算是收益較大的,漏召回的會根據(jù)實際情況再調(diào)整即可。
其他策略的引入
一個完整可控的系統(tǒng),不能光靠模型來解決所有問題,而實際上也是模型并不能解決所有問題,我們需要眾多的支持和輔助,構(gòu)造成一個系統(tǒng),才能讓整體效果達(dá)到新的高度,這里有一些可以考慮的思路。
對于簡單、高頻的問題,其實不太認(rèn)為需要模型,處理用一些詞典和規(guī)則能更加穩(wěn)定可控地解決。
如果問題的尾巴比較長,長尾問題的樣本比較難獲取,占比較低,此時模型并不能學(xué)得好,與其考慮增強和挖掘,不如交給檢索的方式做更加高效,別考慮增加特定樣本了(以搜代分:心法利器[26] | 以搜代分:文本多分類新思路)。
模型附帶后處理,解決模棱兩可,或者比較邊界的問題,舉個例子:
閾值大于0.7的才是正類,0.5-0.7的部分需要依賴別的因素做進(jìn)一步判斷才準(zhǔn)入。
多個分類模塊組合,最終用加入rank層進(jìn)行多結(jié)果的排序,解決復(fù)雜多變的分類場景。
多個二分類,不讓模型處理混淆問題,最終rank層再來擇優(yōu)。
類目體系更新頻繁,重訓(xùn)模型對其他類目影響大。
多個分類場景差異大,數(shù)據(jù)不好平衡。
審核編輯:劉清
-
數(shù)據(jù)集
+關(guān)注
關(guān)注
4文章
1229瀏覽量
25912
原文標(biāo)題:文本分類日常提點技巧
文章出處:【微信號:zenRRan,微信公眾號:深度學(xué)習(xí)自然語言處理】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
吉時利源表2400故障排查常見問題與解決方案

PCBA代工避坑指南:常見問題+解決方案全解析
常見xgboost錯誤及解決方案
常見換熱器故障及解決方案
常見OTDR故障及解決方案
DFT的常見誤區(qū)與解決方案
SSM開發(fā)中的常見問題及解決方案
常見的GND連接錯誤及解決方案
常見BGA芯片故障及解決方案
buck電路常見故障及解決方案
TTL電路中的常見問題及解決方案
一些常見的動態(tài)電路

aes加密的常見錯誤及解決方案
PID控制的常見問題及解決方案
分享一些常見的電路

評論