概要
とりあえず Fine Tuning できるかどうか試したかったので Transformers + keras でやってみました
基本は Transformers にある Fine Tuning のチュートリアルコードにコメントを入れているだけです
環境
- macOS 14.2.1
- Python 3.11.6
- transformers 4.37.2
インストール
- pipenv install numpy tensorflow datasets transformers
サンプルコード
基本的な流れは以下のとおりです
- 学習するデータの準備
- 事前学習済みモデルの取得
- 事前学習済みモデルの再学習
詳細な流れは以下のコード内のコメントに記載しています
import numpy as np
import tensorflow as tf
from datasets import load_dataset
from transformers import AutoTokenizer, TFAutoModelForSequenceClassification
# Fine-Tuning で新たに学習させるデータセットのダウンロード
# データセットは {'sentence': 'It is easy to slay the Gorgon.', 'label': 1, 'idx': 8548} というデータが 8551 個ある
dataset = load_dataset("glue", "cola")
dataset = dataset["train"]
# トークナイザーの取得
tokenizer = AutoTokenizer.from_pretrained("bert-base-cased")
# トークナイズしてテキストを ID とトークンに変換
# padding=True にすることで最も長い文章の文字数に合わせる、溢れた部分はゼロ埋めになる
tokenized_data = tokenizer(dataset["sentence"], return_tensors="np", padding=True)
# print(tokenized_data[0])
# print(tokenized_data[0].ids)
# print(tokenized_data[0].type_ids)
# print(tokenized_data[0].attention_mask)
# 学習データの作成、トークナイズしたデータを辞書化するだけ
tokenized_data = dict(tokenized_data)
# 学習データの正解ラベルの作成
labels = np.array(dataset["label"])
# 事前学習済みモデルの取得、これに dataset を Fine-Tuning する
model = TFAutoModelForSequenceClassification.from_pretrained("bert-base-cased")
# モデルのコンパイル、損失関数の指定は不要 (らしい
# M2 Mac では以下のエラーが出るので最適化関数は tf.keras.optimizers.legacy.Adam を使用する
# E tensorflow/core/grappler/optimizers/meta_optimizer.cc:961] model_pruner failed: INVALID_ARGUMENT: Graph does not contain terminal node Adam/AssignAddVariableOp_10.
model.compile(optimizer=tf.keras.optimizers.legacy.Adam(3e-5))
# モデルの再学習
model.fit(tokenized_data, labels)
# モデルの保存
model.save("fine_tuned_bert_base_cased")
トラブルシューティング
- 低スペックマシンだとエラーになる
- ModuleNotFoundError: No module named ‘_lzma’
- xz をインストールして再度 python をインストールしましょう
- M2 Mac の場合最適化関するには tf.keras.optimizers.legacy.Adam を使用する
最後に
Transformers + keras でとりあえず Fine Tuning に触れてみました
元々公開されている LLM (GPT2) を使って新たに学習したモデルが作成できました
再学習させるのである程度のマシンスペックが必要になる他データ量に応じても負荷が変わるので注意しましょう
できれば GPU 環境があるのが望ましいです
また学習元の LLM も今回は GPT2 でしたが日本語の場合には日本語に特化した事前学習済みモデルがあるのでそういったものを選択したほうがより目的にあったモデルを作成することができます (例えば cl-tohoku/bert-base-japanese など)
0 件のコメント:
コメントを投稿