以下の内容はhttps://nikkie-ftnext.hatenablog.com/entry/fine-tune-modernbert-multi-class-synthetic-datasetより取得しました。


合成データからModernBERTを多クラス分類器にファインチューニング!した写経ログ

はじめに

七尾百合子さん、お誕生日 81日目 おめでとうございます! nikkieです。

気になっているModernBERTで、先人の記事に沿って多クラス分類のファインチューニングをしていきます!
ModernBERTの自分用リンク集がこちら

目次

「Fine-tune ModernBERT for text classification using synthetic data」

1

合成データ argilla/synthetic-domain-text-classification を使って、ModernBERTを多クラス分類するようにファインチューンします。
このリポジトリ argilla-io/synthetic-data-generator は、合成データセット生成ツールリポジトリです2

合成データの内訳

合成データは全1000件。
テキストとクラスラベル1つからなり、含まれるクラスは263
labelではクラスは数字で表されます)

{'text': "In recent years, the manufacturing sector has seen a significant shift towards automation and digitalization. (略)",
 'label': 0}
Counter({17: 82, 12: 55, 13: 54, 4: 51, 22: 50, 24: 49, 0: 47, 20: 46, 14: 46, 8: 45, 10: 45, 1: 42, 21: 42, 9: 41, 5: 39, 23: 35, 19: 34, 7: 34, 2: 33, 16: 32, 3: 31, 6: 21, 18: 20, 11: 10, 15: 8, 25: 8})

またテキストは

  • min: 208文字
  • max: 1539文字
  • 平均: 545.167文字

でした。

写経したコード

ColabのT4 GPUを使いました

訓練中のリソース使用状況です(バッチサイズを調整できるかも)

num_train_epochs 5 -> 3 の変更は、精度を上げ切るよりも短時間で終わるのを優先してです

写経メモ

tokenizerの__call__()padding=Truelongestと同じ
ref: https://huggingface.co/docs/transformers/en/main_classes/tokenizer#transformers.PreTrainedTokenizer.__call__.padding

scikit-learnのf1_score
https://scikit-learn.org/stable/modules/generated/sklearn.metrics.f1_score.html

  • labels引数には、訓練データセットに含まれるラベルを渡している
  • binary(二値分類)以外ではpos_label引数は無視されるとのことだったので、指定を省略

終わりに

気になっていたModernBERTをファインチューニングする例を1例動かせました!
decoderモデルの知見を適用したBERTと聞いてどんなソースコードになるのか戦々恐々としていましたが、蓋を開けてみればtransformersの使い方の範疇で、これまでの知識も活かせました。
今回のような合成データを用意すれば、分類問題を精度よく解けるのではないかと期待に胸躍らせています。
日本語の多クラス分類でも手を動かしてみたいところです


  1. 古いコミットのバージョンのページも存在します nbsanity.com
  2. 余談ですが、PEP 723で貢献しました
  3. nvidia/domain-classifierの分類クラス数のようです



以上の内容はhttps://nikkie-ftnext.hatenablog.com/entry/fine-tune-modernbert-multi-class-synthetic-datasetより取得しました。
このページはhttp://font.textar.tv/のウェブフォントを使用してます

不具合報告/要望等はこちらへお願いします。
モバイルやる夫Viewer Ver0.14