地平線まで行ってくる。

記録あるいは忘備録。時には検討事項。

日本語ModernBERTをNERで利用してみる。トークナイザーを整理した。

ModernBERTをNERのタスクについてチャレンジしていました。最終的にまとめずに放置していたので整理しました。題材は、stockmark/ner-wikipedia-datasetを利用します。

 

こちらを参考にします。

www.sbintuitions.co.jp

 

モデルは、こちらのものをありがたく利用します。

huggingface.co

 

基本的には、トークナイザーをSudachi仕様にするという流れです。SentencePieceより細かく形態素解析をすることになるので、計算コストは上昇します。しかし、NERの場合は得たい固有表現を取れないと面白くありません。そこで、参考文献を基にトークナイザー用いてNERを実施してみます。

作ったコードはこちらです。

github.com

 

サブワードとのアライメントはややこしかったので、Gamini君が頑張って協力してくれて助かりました。ちゃんと動いているようです(笑)。最終的には、early stoppingで自動的に学習を打ち切りましたが、味見の段階で10 epochs内でlossがかなり落ちていたので現実的な時間できるだろうと見込んでいたところ、予想通りでした。

 

 

評価結果:

悪くない結果ですが、どうでしょう。

 

  • ruri_pt_310m
    • {'epoch': 10.0,
       'eval_accuracy': 0.9781864646556838,
       'eval_f1': 0.883981773571679,
       'eval_loss': 0.12872551381587982,
       'eval_precision': 0.8678596008258775,
       'eval_recall': 0.9007142857142857,
       'eval_runtime': 9.96,
       'eval_samples_per_second': 53.715,
       'eval_steps_per_second': 3.414}
  • ruri_pt_130m
    • {'epoch': 9.0,
       'eval_accuracy': 0.9704206628050518,
       'eval_f1': 0.860456942003515,
       'eval_loss': 0.1706513613462448,
       'eval_precision': 0.84472049689441,
       'eval_recall': 0.8767908309455588,
       'eval_runtime': 3.057,
       'eval_samples_per_second': 175.01,
       'eval_steps_per_second': 11.122}