嚴重數據傾斜文本分類,比如正反比1:20~100,適合什麼model,查准一般要做到多少可以上線?

比如新聞的廣告色情低俗識別,這些小類別在實際分布中一定是佔比極小1:20甚至不到百分之一。傳統的詞表權重組合規則,只能預防一小部分(召回會非常低,但是準確率不會特別低)。而模型如果訓練時候用1:1配平(個人覺得不能超過1:3,也做過大量實驗),即使使用了加權懲罰,或者類似smote或者組合的上下採樣方法,模型在1:1測試時即使達到90%的查准,放到1:20的環境查准也會大幅度降低到30%(試過xgboost,libsvm,libliner,fasttext等,近乎線性成比例降低,cnn目前效果和前面類似,加了earlystop,dropout最合適的還是原始論文參數)。

像這種正反比嚴重數據傾斜的分類識別問題,有沒有更合適的方法呢?還是我忽略了哪些地方?


是的,這類問題在文本分類中大量存在,而且很棘手。比如垃圾郵件分類就是一個典型的例子。原因是文本分類往往是以全部可能的自然語言作為採樣空間的,這個空間極其巨大,而我們所關心的問題往往只是其中一個非常小的子集。自然的,在這樣的情況下,模型非常難以學到正確的決策邊界。

完全消除數據不平衡帶來的問題是非常困難的,但是有一些辦法可以進行緩解。對應這樣的問題,我覺得可以從以下幾點來考慮。

首先,我們要明確對於precision和recall,我們的需求是怎樣的(硬廣一下這一篇https://www.zhihu.com/question/30643044/answer/161955532)。對於數據極其不平衡的情況,precision和recall的trade-off尤其顯著。通過under-sampling/over-sampling來配平正反例是可以提升recall,但是一定會出現大量的false positive。如果我們認為錯殺的成本很高,可以適當地降低對於precision的要求。反之,如果我們追求precision,那麼可以採用基於規則的方式,通過對關鍵詞的特徵進行過濾,當然這樣recall就會很慘。這是一個必須接受的現實。如果將這兩種策略結合,最起碼可以做這樣的嘗試:對於高precision的分類器,採取比較高信心的策略,譬如探測出來就直接報告這個用戶甚至屏蔽;對於高recall的分類器,可以採取一些warning的措施,不強製做影響用戶的操作。

可以再深度的挖掘一下為什麼over-sampling在這種情況下工作得不好。以smote為例,我們希望從樣本及其最近鄰的點的連線上選一個隨機點將其作為新的樣本來合成。但是文本數據(無論是用n-gram feature還是distributed representation)都是很高維度的。在高維空間的一個事實就是數據傾向於接近互相正交,故而兩兩不相近,所以採用NN的思想來做up-sampling,效果是不會太好的。

並且,我們在分散式語義表示中所假定的「連續語義空間」,也許並不能很好地反應語言的現實狀況。誠然,如果是語義離得很遠,一般而言很難意思相近。但是有時候,對於特定的應用來說,譬如題主提到的色情低俗識別,邊界是很模糊的,就像「色情」和「情色」之間的界定,實際上相當曖昧。但是這在詞向量上是很難體現出來的。

直觀一點的體現,就是可以想像,如果你對一幅照片進行高斯模糊,那麼多半我們還是能看得出這幅圖的大概,只是細節變得不清晰了。

但是如果對一個句子的tensor做類似的操作,再decode出來,估計就面目全非了。

所以呢,我覺得題主可以考察一下以下幾個點:

正樣本的數據,是否能夠公正地代表正樣本的分布?是否有明顯的屬於正樣本但是沒有包括進來的例子?很大可能,需要補數據。如果真的是缺乏正樣本數據的話,用什麼辦法都很難了。

針對正樣本產生一些較為相似/易於混淆的負樣本,並利用這些樣本來訓練一個分類器(在決策邊界附近填充一些數據)

做一次聚類分析。可以考察,其中是否有一些cluster明顯的不包含正樣本。我們是否可以先做一個粗的分類器,將這一些樣本分開,然後再看剩下來的數據是否不均衡的狀況會減輕很多。在剩餘的數據上再做一個分類器。

如果是採用DNN,有一些tricks可以一定程度地緩解數據不平衡的問題:1) 在隨機選擇mini batch的時候,每個batch中正負樣本配平;2)對於正樣本,給予更高的學習率

訓練一個生成模型,僅僅是針對正樣本,這樣可以最大限度地學習到正樣本的特徵,在開放域的效果往往優於判定模型

能想到的暫時這麼多,歡迎大家補充。

本回答來自Emotibot機器學習科學家馬永寧。


謝邀。

之前遇到過類似的問題。

首先,對於解決黑白樣本分布不均勻的問題,可以使用重採樣的方法優化訓練集,上採樣和下採樣。如果還沒有嘗試,可以嘗試下。

其次,我曾經用過random forest+重採樣方法解決這種問題,效果有很大改善。

最後,你可以嘗試用下one-class SVM。

另外,這種問題有可能用有監督學習的方法,得不到好的解決,我當時的場景就是。換個思路,用異常檢測或者聚類等無監督學習的思路來做,興許柳暗花明。如果你能把異常文本識別出來,『異常文本』,未必就是色情文本,但也許能覆蓋大部分色情文本,接下來在異常文本中再把色情文本識別出來就可以用你說過的那些方法了,因為,你如果已經濾掉了大部分正常的文本,黑白樣本的比例就不會像原來那麼誇張了。

說了這麼多,希望對你有所幫助。


試一下SVM(linear核),調參數,可以解決unbalance data問題。

一般商用要求,準確率90%以上才能上線。但是,按我的經驗,單靠模型(或者一個模型),比較難做到完全達到商用要求,還要增加一些輔助手段,包括規則引擎。


關於這個話題有個帖子總結了很多,自己看吧 http://blog.csdn.net/heyongluoyao8/article/details/49408131


在做正負樣本不均衡的分類問題(非文本分類)時做過一些上採樣下採樣的實驗,但在測試數據上的auc和pr幾乎沒有提升,應該就是採樣破壞了原始數據的分布,訓練和測試非同分布的狀態下無法取得更好的結果。所以現在面對這種問題時不管正負比例幾比幾,基本就是硬來。


可以嘗試 biased-SVM

這種問題在文本分類中非常常見,而且還會涉及標註的問題.正負比例相差太大1:10以上. 因此一般都只標註正樣本(色情新聞),負樣本的數據了太大,無法人工標註. 針對這種問題就有人提出了PU learning的演算法.目前看效果還不錯.

Pu learning的演算法主要解決了兩個問題:

1. 怎麼處理未標註樣本

2. 怎麼處理數據傾斜問題.

可以參考PU learning相關論文

Learning from Positive and Unlabeled Examples


以下只是個人的一點點拙見,如果有任何反對的地方,請隨時留言。

DL這塊模型具體實踐基本沒碰過,不敢多說。但是對大多數傳統的機器學習模型來說,假設一個簡單的二分類問題,01兩類,1為少類,就算最後模型講結果全分為樣本不均衡傾向的0類,這個模型還是可能有意義的。這時error rate已經不是一個很好的衡量指標了。Confusion matrix個人覺得受制於threshold太厲害,也不是一個很好的衡量標準。但是AUC確實是個不錯的標準。有時候雖然結果全分為一類,但是AUC&>0.8的樣子。這種情況下,大概正負樣本1類對應的float輸出應該很小,假設都在0.3以下。真實0類可能會在0.15以下,但真實1類可能會在0.15到0.3的區間內。像這樣,模型還是可以很好地完成分類的。

Sampling、cost-sensitive等小trick,可能在部分情況下有用,但很難從根本上解決問題吧。個人目前認為imbalanced data的問題或許從模型最根本來說就不適合對應的數據,如果不能深入代碼,深入模型,而是非常general地調API,一般工作效果都不會很好...(以上純屬個人觀點,學識淺薄,歡迎打臉...)


從異常檢測的角度(因為異常樣本通常只佔一小部分),可以參考這篇文章 Design of multiple-level hybrid classifier for intrusion detection system using Bayesian clustering and decision trees. 總的來說就是,先做cluster,再分類,兩者結合。

With increasing connectivity between computers, the need to keep networks secure progressively becomes more vital. Intrusion detection systems (IDS) have become an essential component of computer security to supplement existing defenses. This paper proposes a multiple-level hybrid classifier, a novel intrusion detection system, which combines the supervised tree classifiers and unsupervised Bayesian clustering to detect intrusions. Performance of this new approach is measured using the KDDCUP99 dataset and is shown to have high detection and low false alarm rates.


姑且認為你的查準是(TP+TN) / total,如果訓練出的模型線下是0.9,線上只有0.3,那應該首先檢查訓練過程是否存在某些問題。。

我用過libsvm,liblinear,lr,fasttext處理這類問題,的確對於strong imbalanced data會有類似的準確率下降的情況,但一般不會差這麼多。。

要是差這麼多的話,首先分析採樣是random sampling還是biased sampling。。然後看是否一些特定片語影響了分類結果,可以考慮用一些pre trained word vector。。還有如果模型是lr或fasttext這類輸出一個概率的,看下輸出值兩端的分布是否符合預期,畢竟很多在0.5附近的數據本來就很難說。。


感謝三位的回答,dnn的batch配平想法很好,之前還沒有試過。高維文本特徵smote等採樣方法,從之前多次實驗結果看,提升確實有限。高維文本特徵表示,近乎兩兩正交?這個也是之前沒想過的。

從異常檢測的角度做識別,這個之前也有過嘗試,沒做出太好的效果,後續再深入學習下。還和組裡的博士討論過可行性,可惜他在這方面也沒有投入過。

說說自己黃反服務的一些經驗吧

1.需要快速審核,快速發文的(比如實時聊天),可以用yara這種規則引擎開發,高準確同時容易克服多變的人為偽裝。

2.有情感分析的比較麻煩,尤其是審核人員的尺度在隨著政治風向等因素有明顯波動的,最好能高頻的更新model(比如每天有自動評估的迭代)

3.規則和model集成,model高召回,規則主要防止漏掉比較嚴重的case,哪怕規則極少命中。

4.文本類,用smote等從向量上處理,不如直接從停詞上下功夫。易理解,選擇可以用正負樣本,初始模型的badcase(類似回答中說的三個model的boost)

5.隨機森林確實是值得第一個嘗試,有效果,但不一定最好的方法。


推薦閱讀:

爬蟲訪問中,如何解決網站限制IP的問題?
八爪魚採集器能取代python爬蟲嗎?

TAG:機器學習 | 數據採集 | 文本分類 | 數據處理 |