LoginSignup
3
0

More than 1 year has passed since last update.

HuggingFace Transformers で BERT (もどき)を pretrain する

Last updated at Posted at 2021-05-03

概要

BERTは自然言語処理(NLP)ではデファクトスタンダードだが、pretrain が気軽に出来ないのが難点である。そのため、BERTのハイパーパラメータを変えて、モデルを小さくしたら、性能がどのように変化するのかやってみた。

実験

  • 日本語版Wikipediaの15%のデータを使って pretrain
    • pretrain したモデルは num_hidden_layers 以外は BERT-base と同じ
    • Next Sentence Prediction は性能が悪くなるので、外してある
    • batch size 16
    • step 150000
  • ライブドアニュースコーパス(LDCC)の半分のデータを用いてfinetune
  • LDCC の1文を9つのジャンルのどれかに分類する問題を解く
  • 環境
    • GPU NVidia GeForce GTX-1060 6GB
    • メモリ 16GB
    • Intel Core i7
    • Ubuntu 18.04

結果

モデル Accuracy モデルサイズ(MB) pretrain 所要時間
東北大BERT(whole-word-masking) 0.780 424MB
num_hidden_layers = 6 0.753 261M 8.5時間
num_hidden_layers = 3 0.746 180M 7時間

所感

  • 当たり前だがモデルサイズが大きいほど精度が上がる
  • num_hidden_layers = 6 および 3 のモデルサイズが意外に変わらない
    • BERTは transformer の layer 部分以外のパラメーターが100MBくらいある
  • num_hidden_layers = 3 で比較的少量(Wikipedia 全体の15%)で7時間というお気軽な pretrain でもそこそこのパフォーマンスを残しているので、時と場合によっては、こういうお気軽 pretrain かつ軽量なモデルで何かをやってみてもよいのかもしれない。
  • transformers の BertForPreTraining クラスを使うと簡単に pretrain できることがわかった
    • ここの loss を少しいじると Next Sentence Prediction を外すこともできる

次回予告

pretrain に必要なコードは、案外世の中で公開されていない気がしたので、今回、私がやったことをネットに全部公開してみたい(拙いコードですが・・・)。というわけで、次回に続く。

後日談

続きを書きました。
HuggingFace Transformers で BERT (風モデル)を pretrain する(ソースコード解説)

3
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
0