第一階段實驗 - s9891326/Fine-Tuning-BERT GitHub Wiki

Outline

資料準備方向

  • 2019資料集準備(17529筆)
    • 訓練集(14023筆,0:4248、1:5403、2:4372)
    • 測試集(3506筆,0:1036、1:1328、2:1142)
  • 修正弱點(794筆)
    1. (500)姓名文
    2. (100)問候文
    3. (184)上面短文判斷誤差錯誤的項目
    4. (10)特定產業特殊文章
  • 修正弱點,情緒標籤分佈
正面 負面 中立
13 24 757
  • 範例

    短文資料
    LEC 追很兇,2
    噓: 台女典範,2
    推: 辭職阿,2
    噓: 北部人,2
    →: 送貴的啊,2
    
    姓名文
    姓名文
    推: 老高,2
    阮小二,2
    阮小五,2
    桃貴粉報到!,2
    運宏大大,2
    
    特定產業特殊文章文
    特定產業特殊文章
    已經刪除的內容就像Dcard一樣,錯過是無法再相見的!,2
    Po Chu Hui Kwong Lam Mak氣炸魷魚,2
    「大庭廣眾呼喚我太害羞了,我剛訊息你了私聊吧!」BY藍白戰士,2
    
    問候文
    問候文
    寶貝早安❤️,2
    晚安,2
    下午安,2
    推: 早安,2
    

預計訓練方式

  1. 將2019資料集 + 弱點資料集一起訓練
  2. 先載入舊模型(2019),再用弱點資料集進行訓練

實驗紀錄

  • 準備舊測試集(2019),訓練集2019、2019 + 修正弱點的資料集,驗證舊測試集的Loss/Accuracy
  • 訓練
    • (舊模型)2019資料集(14023筆,0:4248、1:5403、2:4372)
    • (新模型)2019 + 修正弱點(14817筆,0:4261、1:5426、2:4717)
      • 修正弱點(794筆, 0:13、1:24、2:757)
  • 測試
    • 2019資料集(3506筆,0:1079、1:1307、2:1120)
  • 實驗方向
    1. 增加修正弱點後,測試2019資料集Accuracy有沒有更高?
    2. 那對於短文預測有更好嗎?
    3. 還有什麼不足的地方?
  1. 增加修正弱點後,測試2019資料集Accuracy有沒有更高?

    (2019)舊模型 (修正弱點)新模型 (load修正弱點)新模型
    2019資料集 0.2865/0.9056 0.2704/0.9053 0.8604/0.6198
    訓練時間 370.152s 382.683s 65.629s
    (舊)2019
    2019資料集
                  precision    recall  f1-score   support
    
               0     0.9569    0.9074    0.9315      1102
               1     0.9238    0.9014    0.9124      1318
               2     0.8400    0.9088    0.8731      1086
    
        accuracy                         0.9056      3506
       macro avg     0.9069    0.9059    0.9057      3506
    weighted avg     0.9083    0.9056    0.9062      3506
    
    (新)2019 + 修正弱點
    2019資料集
                  precision    recall  f1-score   support
    
               0     0.9828    0.8811    0.9292      1102
               1     0.9013    0.9287    0.9148      1318
               2     0.8440    0.9015    0.8718      1086
    
        accuracy                         0.9053      3506
       macro avg     0.9094    0.9038    0.9053      3506
    weighted avg     0.9092    0.9053    0.9060      3506
    
    (新)2019 + 修正弱點(load)
    2019資料集
                  precision    recall  f1-score   support
    
               0     0.9982    0.5082    0.6735      1102
               1     0.9925    0.4014    0.5716      1318
               2     0.4494    0.9982    0.6198      1086
    
        accuracy                         0.6198      3506
       macro avg     0.8134    0.6359    0.6216      3506
    weighted avg     0.8261    0.6198    0.6185      3506
    
  2. 那對於短文預測有更好嗎?

    • 比較上面AS1標記的"短文情緒驗證"的bbs
      • 原本: 總共1973筆,標記正確:1810,標記錯誤:163,正確率:0.917
      • 進行文字去重複
    • 姓名文、問候文、短文 --> 實驗結果
    (舊)2019模型
    短文弱點資料集
                  precision    recall  f1-score   support
    
               0     0.9795    0.9459    0.9624       555
               1     0.9053    0.9557    0.9298       970
               2     0.1207    0.0753    0.0927        93
    
        accuracy                         0.9017      1618
       macro avg     0.6685    0.6590    0.6616      1618
    weighted avg     0.8856    0.9017    0.8929      1618
    
    (新)2019 + 弱點模型
    短文弱點資料集
                  precision    recall  f1-score   support
    
               0     0.9935    0.8252    0.9016       555
               1     0.9795    0.7392    0.8425       970
               2     0.2047    0.9355    0.3359        93
    
        accuracy                         0.7800      1618
       macro avg     0.7259    0.8333    0.6933      1618
    weighted avg     0.9398    0.7800    0.8337      1618
    
  3. 還有什麼不足的地方?

    1. 諧音 or 台語 --> 沒進行訓練
      • 腫滑冥狗,2,1
      • 膩害惹👍,0,1
      • 修但幾類,2,2
      • 午夠破格!,1,1
      • 不蘇湖,1,2
      • 雞賣啊雞賣,1,2
    2. 推噓文 --> 推噓文定義不夠明確,不應該只單獨看內文
      • 噓:dpp,恭喜恭喜啊恭喜恭喜,發啊發大財,0,1
      • 噓:dpp真的很棒,0,1
      • 噓:kmt真好用,0,1
    3. 字詞包含負面情緒,但被歸類再中立 -> 先前定義不明確導致
      • 容易疲倦的人,2,1
    4. 符號文 -> 某些符號再BERT是可以被解析的,某些符號是具有意義存在的,但未被訓練。
      • 樓主👍,0,2
      • 🔥 求救!犬山居 #Apple 走失!🔥,1,2
    5. 新詞 --> 沒進行訓練
      • 你當我塑膠喔?,1,2
      • 那個男人也許會遲到,但永不缺席,2,1
      • 這天氣是在哈囉?,1,2
      • →:美國人不吃中國牌芒果乾啦...,1,2

Summary實驗結果

  1. 增加修正弱點後,測試2019資料集Accuracy有沒有更高? => 沒有,反而有稍微下降
  2. 那對於短文預測有更好嗎? => 有,但還不夠全面,需要更多的資料集,來協助模型訓練以及驗證
  3. 還有什麼不足的地方? => 上面那4點

QA

Q : train model vs load old model to train new model

2020 model(19+20) - 2019+2020 dataset : loss: 0.2889 - accuracy: 0.9017

2020 load_model(19+20) - 2019+2020 dataset : loss: 0.3466 - accuracy: 0.8642

經由上面的比較,重新訓練跟載入舊有的模型再acc上面相差了約0.04%左右

A :

  • maybe opt problem, I recompile opt when you re-train. 儲存模型時把optimizer也一起存起來。

  • 主要問題是排序問題,想像一下當我們把訓練集按照label由0、1、2依序排列,進行訓練的話會有什麼樣子的結果?(如下圖1)。就像是我們先把2019的資料及訓練完成後,再訓練2020的資料集,這就會有順序性的問題,導致他針對2020的資料集進行模型權重、bias的調整,這樣就會導致對2019的驗證集效果較差,但對2020的驗證集較佳(也就是上面的現象)。若我們把2019的訓練集取一部分出來加入2020的訓練集,是否就可以解決這樣的問題?(如下圖2)

  • 圖1(排序過後的訓練集)

2019資料集 - loss: 7.4693 - accuracy: 0.3195
2020弱點 - loss: 4.8755 - accuracy: 0.5542
2019+2020弱點 - loss: 7.3031 - accuracy: 0.3345
  • 圖2(隨機打亂的訓練集)
2019資料集 - loss: 0.3205 - accuracy: 0.8999
2020弱點 - loss: 0.3558 - accuracy: 0.8458
2019+2020弱點 - loss: 0.3228 - accuracy: 0.8964
⚠️ **GitHub.com Fallback** ⚠️