Huggingface Transformers 入門 (28) - rinnaの日本語GPT-2モデルのファインチューニング
「rinna」の日本語GPT-2モデルが公開されたので、ファインチューニングを試してみました。
【最新版の情報は以下で紹介】
前回
1. rinnaの日本語GPT-2モデルのファインチューニング
(1) 「Colab Pro」のメニュー「編集 → ノートブックの設定」で「GPU」の「ハイメモリ」を選択。
ファインチューニングは大量のメモリを消費するので、この設定が必須になります。
(2) データの永続化
# データの永続化
from google.colab import drive
drive.mount('/content/drive')
!mkdir -p '/content/drive/My Drive/work/'
%cd '/content/drive/My Drive/work/'
# ソースからのHuggingface Transformersのインストール
!git clone https://github.com/huggingface/transformers -b v4.4.2
!pip install -e transformers
(3) メニュー「ランタイム → ランタイムを再起動」で「Google Colab」を再起動し、作業フォルダに戻る。
# メニュー「ランタイム → ランタイムを再起動」で「Google Colab」を再起動
# 作業フォルダに戻る
%cd '/content/drive/My Drive/work/'
(4) Huggingface DatasetsとSentencepieceのインストール。
# Huggingface Datasetsのインストール
!pip install datasets==1.2.1
# Sentencepieceのインストール
!pip install sentencepiece==0.1.91
(5) 「./transformers/examples/language-modeling/run_clm.py」の編集。
「rinna」の日本語GPT-2モデルは「AutoTokenizer」ではなく「T5Tokenizer」を使う必要があります。
・T5Tokenizerのインポートの追加
from transformers import T5Tokenizer
・AutoTokenizerをT5Tokenizerに変更
tokenizer = AutoTokenizer.from_pretrained(model_args.tokenizer_name, **tokenizer_kwargs)
↓
tokenizer = T5Tokenizer.from_pretrained(model_args.tokenizer_name, **tokenizer_kwargs)
tokenizer = AutoTokenizer.from_pretrained(model_args.model_name_or_path, **tokenizer_kwargs)
↓
tokenizer = T5Tokenizer.from_pretrained(model_args.model_name_or_path, **tokenizer_kwargs)
(6) 学習データの準備。
今回は、「あかねと〜く」のデータセット使います。
以下の「dataset.txt」をダウンロードし、テキスト内の<|endoftext|>を削除し、train.txtに名前変更して、作業フォルダにアップロードします。
(7) ファインチューニングの実行。
%%time
# ファインチューニングの実行
!python ./transformers/examples/language-modeling/run_clm.py \
--model_name_or_path=rinna/japanese-gpt2-medium \
--train_file=train.txt \
--validation_file=train.txt \
--do_train \
--do_eval \
--num_train_epochs=3 \
--save_steps=5000 \
--save_total_limit=3 \
--per_device_train_batch_size=1 \
--per_device_eval_batch_size=1 \
--output_dir=output/ \
--use_fast_tokenizer=False
CPU times: user 928 ms, sys: 166 ms, total: 1.09 s
Wall time: 1min 30s
outputフォルダにモデルが出力されます。
2. rinnaの日本語GPT-2モデルの推論
from transformers import T5Tokenizer, AutoModelForCausalLM
# トークナイザーとモデルの準備
tokenizer = T5Tokenizer.from_pretrained("rinna/japanese-gpt2-medium")
model = AutoModelForCausalLM.from_pretrained("output/")
# 推論
input = tokenizer.encode("おはよう、お兄ちゃん。", return_tensors="pt")
output = model.generate(input, do_sample=True, max_length=100, num_return_sequences=8)
print(tokenizer.batch_decode(output))
次回
この記事が気に入ったらサポートをしてみませんか?