yasuokaの日記: 青空文庫DeBERTaモデルdeberta-base-japanese-unidicリリース
昨日の日記でも書いたが、JGLUEのJSQuADは、日本語DeBERTa(V2)モデルのDebertaV2TokenizerFastを受け付けてくれないようだ。で、多少なやんだあげく、日本語DeBERTa(V2)モデルのトークナイザをBertJapaneseTokenizerに入れ換えて、deberta-base-japanese-unidicを作ってみた。普通に12層・隠れサイズ768・12ヘッド・トークン幅512としたが、7772556文3億字(青空文庫データ2.37億字+異体字増量分0.64億字)をNVIDIA A100-SXM4-40GBで728679ステップ(64バッチ)学習させたところ、17時間21分かかってしまった。Google Colaboratory (GPU)で、JSQuADに挑戦してみよう。
!test -d transformers-4.19.2 || git clone -b v4.19.2 --depth=1 https://github.com/huggingface/transformers transformers-4.19.2
!test -d JGLUE || ( git clone --depth=1 https://github.com/yahoojapan/JGLUE && cat JGLUE/fine-tuning/patch/transformers-4.9.2_jglue-1.0.0.patch | ( cd transformers-4.19.2 && patch -p1 ) )
!cd transformers-4.19.2 && pip install .
!pip install -r transformers-4.19.2/examples/pytorch/text-classification/requirements.txt
!pip install fugashi unidic-lite protobuf==3.19.1
!python transformers-4.19.2/examples/legacy/question-answering/run_squad.py --model_type deberta-v2 --model_name_or_path KoichiYasuoka/deberta-base-japanese-unidic --do_train --do_eval --max_seq_length 384 --learning_rate 5e-05 --num_train_epochs 3 --per_gpu_train_batch_size 16 --per_gpu_eval_batch_size 16 --output_dir ./output_jsquad --overwrite_output_dir --train_file JGLUE/datasets/jsquad-v1.0/train-v1.0.json --predict_file JGLUE/datasets/jsquad-v1.0/valid-v1.0.json --save_steps 5000 --warmup_ratio 0.1 --evaluate_prefix eval
ファインチューニングに4時間もかかってしまうが、私(安岡孝一)の手元では、以下の結果となった。
Results: {'exact': 37.03286807744259, 'f1': 37.261743959177544, 'total': 4442, 'HasAns_exact': 37.03286807744259, 'HasAns_f1': 37.261743959177544, 'HasAns_total': 4442, 'best_exact': 37.03286807744259, 'best_exact_thresh': 0.0, 'best_f1': 37.261743959177544, 'best_f1_thresh': 0.0}
JSQuADが、EM/F1=0.3703/0.3726となっていて、さすがにちょっとツライ。まあ、元データが青空文庫なので、この程度なのかもしれないが、それとも評価プログラムをうまく動かせてないんだろうか。うーん、やっぱりDebertaV2TokenizerFastも、JGLUEでサポートしてほしいなあ。
青空文庫DeBERTaモデルdeberta-base-japanese-unidicリリース More ログイン