概要
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 する(ソースコード解説)