關於處理數據不平衡問題的一些探索

1、背景:git

最近在作意看法釋分類任務,數據集中出現了嚴重的類別不均衡的問題,類別1的數目大概只有類別2的七分之一,類別2的數目大概佔所有數據集的一大半了。在這種狀況下,模型訓練容易忽視小類而偏向大類,而小類別信息對咱們來講也是很是重要的,咱們也但願能提取更多的小類的特徵,提升小類別的準確率。因此如何處理數據類別的不平衡問題,提升模型的宏平均值,也是咱們須要重點關注的問題。github

 

2、解決辦法性能

解決這個問題的一個思路就是但願在模型訓練的時候小類和大類的重要性的同樣的,主要能夠經過兩種方法實現,一個是採樣,一個加權,還有數據加強。測試

1. 採樣spa

理論:blog

採樣分爲上採樣和下采樣。上採樣是將小類別複製多份,使得他們的數目與大類別相近。下采樣是在大類別中隨機剔除一些數據,使得大類別和小類別數目相近。it

這樣的方法缺點也很明顯了,上採樣的話,因爲將小類別樣本複製了多份,那麼模型就容易出現過擬合問題,下采樣的話,因爲刪除了一部分數據,那麼模型就有可能學不到一些特徵,模型性能就會下降。圖像處理

因此綜合了上採樣和下采樣的方法,先是對大類進行屢次下采樣,將小類別複製多份與大類別子集合並,從而產生多個訓練子集,用多個訓練子集分別訓練出多個模型,最後用投票的方式獲得最後結果。擴展

實踐:方法

將類別2隨機分紅7個子集,每一個子集數目與其餘小類別數目相近,而後將每個類別2的子集與其餘小類別的數據合併訓練一個模型,這樣能夠同時訓練7個模型,最後測試的時候用這個7個模型獲得的結果進行投票(加權平均)。
結果:
在小類別上的性能是上升了,可是在大類別上的性能降低了,總體性能與以前差很少,性能沒有獲得什麼提高啊。
 
2. 加權
針對數據不平衡問題,嘗試使用目標檢測任務中的方法,用focal loss和pull away term loss對各個類別進行加權,使用加權的方法處理不平衡問題是須要大量的調參的,並且咱們有4個類別,調參組合不少,很難調參。目前使用最簡單粗暴的參數設置,Y=2,alpha=0,性能有一點提高,在宏平均上有1%左右的提高,在微平均上與baseline持平。
 
3. 數據加強
理論:
以前在上採樣中提到,若是將小類別複製多份容易產生過擬合問題,要解決這個問題,咱們其實能夠在數據中增長一些隨機擾動,效果可能會好一些。在圖像處理裏面,常見的作法是修改RGB值,那麼在文本處理裏面,我想到可使用同義詞替換來構造小類別樣本。
實踐:
(1)在github上找到了哈工大同義詞林的最新版,選取其中的同義詞,共計9995對,55846個詞。
(2)因爲一個詞可能會有多個同義詞,我採用隨機選取的方式構造語料,測試結果以下所示:
發現構造結果很是很差,思考了一下,應該是由於同義詞的涉及領域太廣了,因此對同義詞進行了刪選。
(3)用手機領域的背景語料對同義詞進行了刪選,最後還剩31225個詞。爲了防止過擬合,對替換的句子進行了篩選,只選取了替換處大於3處的句子。用刪選後的同義詞構造語料,測試結果以下所示:
發現狀況好一些了,可是仍是不肯定這樣的語料是否有效。
(4)採用2種方式構造小類別數據,1種是全句替換,另外1種是保留意看法釋片斷,只替換上下文。尚未跑出結果。
 
擴展作法:
1. 若是同義詞隨機替換的方法沒有效果,也可採用計算embedding類似度的方法替換,沒進行過嘗試,之後有時間能夠探索一下。
2. 爲了使替換的同義詞更準確,也能夠加入詞性分析。
 
結果:
按照上述步驟處理以後,用新的數據集在baseline模型上進行了測試,模型分類效果顯著,獲得了目前爲止的最高性能。
相關文章
相關標籤/搜索