天天看點

大規模文本分類實驗-項目日志1 One vs rest & stacking 二分類多分類器文本分類實驗

文本分類實驗項目日志(最後更新-2019.07.19)

文章目錄

  • 1 One vs rest & stacking 二分類多分類器文本分類實驗
    • 1.1 描述
    • 1.2 實驗設計
      • 1.2.1 舊方法
      • 1.2.2 新方法
    • 1.3 實驗結果和分析
      • 1.3.1 實驗-舊方法
      • 1.3.2 實驗-新方法
      • 1.3.3 實驗-新方法-新資料
    • 1.4 結論
    • 1.5 內建學習的資源
    • 1.6 項目位址

1 One vs rest & stacking 二分類多分類器文本分類實驗

1.1 描述

根據5-6月份 one vs rest(all)和stacking的融合實驗的若幹問題,6月中旬進行了改進。

5-6月份最終形成的方案為:融入KB;加入第一層分類器;改變KB傳回類目數量,形成多個對比實驗。具體方法和結果詳見1.3.4

5-6月份實驗存在的問題說明如下:

(1) 類間的相似性可能是影響最終結果的主要因素;

(2) 采取one-hot文本表示出現的次元過大以及OOA問題(如對于5:4:1比例,測試集占1/10,若測試集中某個詞未出現在訓練二分類器中的詞空間裡,則不能表示該特征,那麼測試時會失去該特征,進而影響測試結果);

(3) 最終準确率難以提升。

6月初提出的改進方案如下:

(1) 去掉知識庫;

(2) 加入第二層層級分類,使用fasttext訓練二級分類器。

(3) 使用詞向量表示文本特征。

1.2、 1.3給出了具體的實驗設計和結果。

1.2 實驗設計

1.2.1 舊方法

詳細的實驗方法如圖1所示。(舊版本)

大規模文本分類實驗-項目日志1 One vs rest & stacking 二分類多分類器文本分類實驗

圖1 文本分類架構

整個實驗可分為6個環節:資料預處理,訓練一級fasttext分類器,建構三級分類知識庫,訓練二分類分類器,訓練融合分類器和測試分類器。每個環節的詳細方法如下:

  1. 資料預處理。原始資料集儲存在兩個txt檔案,大小共約680MB,具體資料形狀如圖2所示。
    大規模文本分類實驗-項目日志1 One vs rest & stacking 二分類多分類器文本分類實驗

    圖2 資料集形狀

    根據實驗設計思路,需要抽取并生成新的資料集。表1列出了4次實驗的資料集詳細資訊,其中1-3次是5月份實驗用資料集,第4次是6月份資料集,第4次與前3次的差別是:(1)類别數量增加一倍左右;(2)每個三級類的文檔數量未固定,即類别資料分布不均衡。(3)細化資料清洗環節(如抽取時考慮類号名字特點、去除無效文檔、去除重複詞語等)。

    表1 資料集介紹

實驗次數 大小 類别數量 文檔數量
1 7MB 10 1000*10=10000
2 332MB 467 1000*467=467000
3 278MB 358 1000*358=358000
4 312MB 773 727367

資料集劃分:每個類下,訓練二分類資料集:訓練融合分類資料集:最終測試集 = 5:4:1。

下面的流程主要以實驗4的資料集為例。

2. 訓練一級分類器。将所有資料集按照每行資料為‘__label__A,word1\tword2’的格式存儲。A代表一級分類号,word1代表文檔分詞後的第一個詞。然後使用fasttext模型訓練分類器,最後抽取總資料集的20%作為一級分類器測試。

3. 訓練二分分類器。對于每個三級類,長度為 l e 3 l e n g t h le3_{length} le3length​,那麼該類的二分訓練集長度為 l e 3 b i n a r y L e n g t h = l e 3 l e n g t h ∗ 0.5 le3_{binaryLength} = le3_{length}*0.5 le3binaryLength​=le3length​∗0.5,從這些資料中随機抽取10個子集,然後加入其它三級類的若幹資料(長度大緻與屬于本類資料相同,記為 s u b n sub_n subn​),最終的目标是使得每個子集包含sub_n個屬于該類的文檔, s u b n sub_n subn​個不屬于該類的文檔。這 2 ∗ s u b n 2*sub_n 2∗subn​個文檔使用機器學習分類算法訓練一個二分類器。共得到773*10=7730個分類器。

4. 訓練融合分類器。将 l e 3 l e n g t h le3_{length} le3length​,那麼該類的融合訓練集長度為 l e 3 m e r g e L e n g t h = l e 3 l e n g t h ∗ 0.4 le3_{mergeLength} = le3_{length}*0.4 le3mergeLength​=le3length​∗0.4,抽取 l e 3 m e r g e L e n g t h le3_{mergeLength} le3mergeLength​條該類文檔和不屬于該類的 l e 3 m e r g e L e n g t h le3_{mergeLength} le3mergeLength​條文檔組合成 2 ∗ l e 3 m e r g e L e n g t h 2*le3_{mergeLength} 2∗le3mergeLength​條文檔,然後用10個該類的二分分類器進行分類,結果以機率形式給出(分到類A81的機率),并儲存為長度為10的向量,标簽為1或0(如“A81”類資料,則标簽記為1,非“A81”類記0)。然後将這些向量進行訓練,得出融合的分類器。這樣共得到773個融合分類器。

5. 測試分類器。測試過程包括5個方面:測試一級分類器;知識庫(KB)分類;測試二分分類器;測試融合分類器;測試系統分類器。其中,測試系統分類器有多種方案,将在1.3.4節的結果和分析中提到。

1.2.2 新方法

新方法與舊方法的差別如下:

  • 去掉KB。原因是經過實驗發現,加入KB會過濾掉正确的類号;去掉KB的副作用是增加測試的時間開銷。
  • 加入二級分類。在一級分類的基礎上加入二級分類,原因是為了降低測試的時間開銷。
  • 文本表示階段采用詞向量方法。原因是原來方法(tf-idf)會生成詞彙映射表檔案(将近900MB),并且會造成次元過大和OOA問題;使用詞向量可以避免前兩個問題,OOA問題與詞向量模型以及資料集有關。
  • 使用詞向量中的詞作為自定義詞典分詞。這樣做的好處是在文本表示階段盡可能使每一個特征(詞語)都能夠用詞向量表示。(目前還在實驗階段)

    新方法的具體步驟如下:

  1. 資料預處理。同1.2.1的1,僅使用第4次抽取的資料集。
  2. 訓練一級分類器。同1.2.1的2。
  3. 訓練二級分類器。将所有資料集按照每行資料為‘__label__A8,word1\tword2’的格式存儲。A8代表二級分類号,word1代表文檔分詞後的第一個詞。然後使用fasttext模型訓練分類器,最後抽取總資料集的20%作為測試。
  4. 訓練二分分類器和融合分類器。步驟與1.2.1的3和4大緻同,僅文本表示階段不同。
  5. 測試分類器。測試過程包括5個方面:測試一級分類器;測試二級分類器;測試二分分類器;測試融合分類器;測試系統分類器。其中,測試系統分類器較複雜,将在1.3中提到。

1.3 實驗結果和分析

1.3.1 實驗-舊方法

本次實驗加入了層級分類(FC)和知識庫(KB),第一層分類器使用fasttext算法,第二層分類器使用svm算法。其中,fasttext的測試結果為0.95.

最終測試時,經過和老師及學長讨論形成了兩種方案,後來經過實驗,又總結了幾種優化政策。下面是這幾種方案的介紹。

(1) 文檔首先經過KB,得到20個三級類号,然後僅在這20個類的20*10=200個二分類器和20個融合分類器中進行分類測試。記為way_1。

(2) 文檔首先經過7730個二分類器和773個融合分類器,然後将所有分類結果按機率從大到小排序,與KB的結果取交集。記為way_2。

(3) 加入一級分類。文檔首先經過一級分類器,得到一級分類号(如A),并經過KB,得到20個三級分類号(如A81,A84,B02,…,C81),然後僅在一級分類号下并且存在于20個三級分類号的分類器中進行分類測試(如在A81,A84中測試)。記為way_3。

以上三種方案,把最後得到排名前三的三級類号作為最終的分類結果。

此外,加入了baseline,即不加入KB和層級分類的結果,如下表所示。

表2 實驗4結果

實驗代号 準确率 運作時間/s
Baseline 0.184 58113(約16h)
Way_1 0.215 14886(約4.1h)
Way_2 0.216 28106(約7.8h)
Way_3 0.231 7035(約2h)

從表2可以看出,增加KB,準确率提高了近0.03,并且時間性能大大改善。way_1和way_2主要差别在于時間,way_1運作時間更短,這與方案(1)和方案(2)的步驟有關。(1)和(2)是計算所有三級類的分類結果并排序,而(1)僅需要計算由知識庫得到的三級類下的分類器并排序,是以(1)的時間性能更好。

實驗Way_3驗證了加入第一層分類器是有效的,時間性能提高了一倍,準确率提高了0.015。是以下一步将考慮以way_3為基礎進行優化。

實驗發現,對于方案(3),增加從知識庫中傳回的結果數目,如經過KB得到30個結果,最終的準确率得到提高。是以,進行了幾組優化實驗,如表3所示。

表3 way_3的優化實驗結果

實驗代号 KB類号數 準确率 運作時間/s
Way_3 20 0.231 7035(約2h)
Way_4 30 0.269 10951(約3h)
Way_5 50 0.305 20411(約5.6h)
Way_6 60 0.312 20150(約5.6h)

由表3,增加KB的類号後,準确率顯著提高,但相應的時間開銷也增加。

為了分析具體分類時每個類的效果,實驗統計了每個文檔在分類時的第一層分類結果、KB分類結果、最終分類結果清單(top10)。以way_6為例,選取三個有代表性的類别,其中其整體的準确率如表4所示,選取其中若幹個文檔具體分析結果如表5所示。

表4 三個類的準确率

三級類号 文檔數 準确率
A849 1526 0.84
D08 820 0.475
Q593 732 0.000

表5 三個文檔的具體分類結果

文檔 KB結果 Le1結果 最終結果(取top10,不足10個全部選擇)
A849_C1 A:12;B:1;C:1;D:20… A [‘A849’, ‘A81’]
D08_C1 B:1;C:1;D:5;Q:41… D [‘D52’,‘D43’,‘D90’]
Q593_C1 S:7;Q:40… Q [‘Q942’,‘Q945’,‘Q95-3’,‘Q25’, ‘Q53’,‘Q935’,‘Q954’,‘Q936’, ‘Q948’, ‘Q24’]

由表5知,在D08類中一個文檔的KB結果中出現了較多的Q類,并且最終分類結果中未命中D08;在Q593類中一個文檔中雖然大部分都是Q類,但最終結果(top3)并沒有命中。

表4和表5隻是列出了個别文檔的分類情況,這三個類全部分類情況見附件1.

此外,為了分析其它類的分類效果,統計了那些效果較差的類别,如圖5所示。其中,橫坐标表示準确率,縱坐标表示低于準确率的三級類類别數量。類别總數為773.

大規模文本分類實驗-項目日志1 One vs rest & stacking 二分類多分類器文本分類實驗

圖5 三級類準确率分布情況

從圖5可以看出,大部分三級類的準确率低于0.5,有将近一半低于0.3,有20個三級類準确率為0.0.

基于目前的實驗,可考慮的優化方法包括這幾個方面:改善KB;改善第一層分類器性能;剔除效果非常差的類别。

1.3.2 實驗-新方法

本次實驗加入了第二層級分類(FC),并且文本表示使用詞向量方法(百科訓練的詞向量模型,大小1.7GB),第二層分類器使用fasttext算法,第三層分類器使用svm算法。其中,第一層分類器的測試結果為0.95,第二層分類器的測試結果為0.93.

新方法的幾次過程結果如表6所示。

實驗代号 描述 準确率 運作時間/s
Baseline(Way_6) 舊方法最好結果 0.312 20150(約5.6h)
New_way_1 加入二級分類器 0.334 14169(約3.9h)
New_way_2 在new_way_1基礎上去掉KB 0.484 64741(約18h)
New_way_3 在new_way_2基礎上使用詞向量 0.455 33425(約9.3h)

由表6,New_way_1加入二級分類器的效果提升不大,但是時間開銷降低。New_way_2去掉KB後準确率大幅提升,達到0.484,但是時間開銷增大3倍多。New_way_3使用詞向量,準确率降低了0.03,但時間開銷降低了一倍。

由此分析,新方法是有效的。

對于新方法New_way_3,使用詞向量仍會出現OOA問題,故使用詞向量中的詞作為自定義詞典分詞。這樣做的好處是在文本表示階段盡可能使每一個特征(詞語)都能夠用詞向量表示。這個方法目前在實驗階段。

1.3.3 實驗-新方法-新資料

本次資料選取的是規模為7.32GB資料,經過預處理後,大小為5.16GB。預處理包括分詞、去除無效資料等。分詞使用百度詞向量生成的詞典進行分詞。5.16GB資料的情況如表7所示。

表7 新資料集介紹

實驗次數 大小 類别數量 文檔數量
5 5.16GB 1679

由于類别資料少會影響分類性能,故去掉資料小于500條的三級類别,共得到851個三級類。

根據這851個類進行實驗,方法與1.3.2相同。

使用fasttext訓練一級分類器的準确率為0.92,訓練二級分類器的準确率為0.77。

表8給出了實驗的結果。

實驗代号 描述 準确率 運作時間/s
New_way_data_1 和New_way_3不同的是未加入2級分類器 0.20 147581(約41h)
New_way_data_2 方法和new_way_3同 0.41 35556(約9.8h)

1.4 結論

根據新-舊實驗和若幹次讨論,得到結論如下:

(1) 加入第二層分類器是有效的。對比表6的幾個方案結果,發現加入第二層分類對分類效果和時間性能有一定提升。

(2) 去掉知識庫是有效的。根據表6的結果,去掉KB能大幅提升準确率。

(3) 使用詞向量可以縮短訓練和測試時間。根據表6結果,詞向量在準确率方面和TF-IDF方法相差不大,但時間開銷降低一半,此外,使用詞向量不需要生成額外的映射檔案。

根據以上結論,新方法是目前最好的文本分類方案,将應用到實際的标引項目中。

1.5 內建學習的資源

內建學習-1:https://blog.csdn.net/qq_20386411/article/details/82985219

內建學習-2: https://blog.csdn.net/qq_32690999/article/details/78759463

Stacking原理:https://blog.csdn.net/wstcjf/article/details/77989963

Stacking代碼實作:https://www.jianshu.com/p/5905f19c4df6

模型融合(stacking&blending) :https://blog.csdn.net/u014356002/article/details/54376138

1.6 項目位址

Hierarchical-text-classify

繼續閱讀