BERTのpre-trainingを実行 [2020/9版]

前準備

Tensorflow(GPU版)をpipでインストール。pipのバージョン違いで混乱することがあるため、私はpython -m pipでインストールした。バージョンは1.15にすること。

python -m pip install tensorflow-gpu==1.15

うまくいかないときは以下でインストール

python -m pip install tensorflow-gpu==1.15 --ignore-installed --user

gitでbertのリポジトリをクローン。

git clone https://github.com/google-research/bert

モデルのダウンロード。今回は、pre-trainingなので、モデル自体は必要ないのだが、モデルのzipファイル内に含まれているvocab.txtとbert_config.jsonを使うためにダウンロード。モデルは様々なサイズが提供されているが、今回はBERT-baseをダウンロード。

cd bert
wget https://storage.googleapis.com/bert_models/2020_02_20/uncased_L-12_H-768_A-12.zip
unzip uncased_L-12_H-768_A-12.zip

解凍すると、このzipの中に、vocab.txtとbert_config.jsonが入っているのが確認できるはずだ。

ディレクトリ構成は以下のようになった。

bert
├── bert_config.json
├── bert_model.ckpt.data-00000-of-00001
├── bert_model.ckpt.index
├── CONTRIBUTING.md
├── create_pretraining_data.py
├── extract_features.py
├── init.py
├── LICENSE
├── modeling.py
├── modeling_test.py
├── multilingual.md
├── optimization.py
├── optimization_test.py
├── predicting_movie_reviews_with_bert_on_tf_hub.ipynb
├── README.md
├── requirements.txt
├── run_classifier.py
├── run_classifier_with_tfhub.py
├── run_pretraining.py
├── run_squad.py
├── sample_text.txt
├── tokenization.py
├── tokenization_test.py
├── uncased_L-12_H-768_A-12.zip
└── vocab.txt

0 directories, 25 files

穴埋め問題を実行するためのファイル生成

create_pretraining_data.pyに以下の引数を付けて実行

python create_pretraining_data.py --input_file=./sample_text.txt --output_file=/tmp/tf_examples.tfrecord --vocab_file=./vocab.txt --do_lower_case=True --max_seq_length=128 --max_predictions_per_seq=20 --masked_lm_prob=0.15 --random_seed=12345 --dupe_factor=5

Pretrainingの実行

run_pretraining.pyに以下の引数を付けて実行。もしメモリのエラー(OOM)がでるときはtrain_batch_sizeの値を減らす。

python run_pretraining.py --input_file=/tmp/tf_examples.tfrecord --output_dir=/tmp/pretraining_output --do_train=True --do_eval=True --bert_config_file=./bert_config.json --init_checkpoint=./bert_model.ckpt --train_batch_size=32 --max_seq_length=128 --max_predictions_per_seq=20 --num_train_steps=20 --num_warmup_steps=10 --lerning_rate=2e-5

ここまで無事にできていれば、sample_text.txtでのpre-trainingが実行できるはずだ。

NLP,Python,Tensorflow

Posted by vastee