🪷

Google Cloud でGemini をFine Tuning してみた

に公開

LLM のFine Tuning は聞いたことはあるがやったこと無かったので軽く調べてみたところ、以下の手法が有名そう。

  • Supervised Fine Tuning(SFT、教師ありファインチューニング)
  • Reinforcement Learning from Human Feedback(RLHF、人間のフィードバックからの強化学習)
  • Continual Pre Training(継続事前学習)

RLHF も継続事前学習もハードルが高そうなので、今回はSFT を試してみることにした。

実行環境

AWS でもSFT は実行可能らしいが、チューニングしたモデルを試してみるのにプロビジョニングスループットが購入必須なので、実質的に高額サービス。ケチ

流石に試すだけに数千円以上払うのはなーと思っていたら、Google Cloud のGemini は無料 or ほぼ無料でFT できたので、今回はGoogle を使うことにした。

Google Cloud のFine Tuning

基本的に公式ドキュメントを参照しながら進めた。

料金

https://cloud.google.com/vertex-ai/generative-ai/pricing?hl=ja 参照。
2024/12 現在、チューニングに必要な料金は以下の通り。

チューニングしたモデルで回答生成するのは、元のモデルの回答生成と料金同じ=個人でいくつか質問するならほぼ無料なので、手軽に試すことが可能。

チューニング手法

チューニング手法として、全パラメータをチューニングする、或いは一部のパラメータをチューニングする(ex. LoRA(LOW-RANK ADAPTATION))があるらしい。
が、Google Cloud が裏でどんな手法を使っているか分からない(設定できない)ので、今回は気にしないことにする

目標

SFT で特定分野の知識を学習させるのは微妙らしい。
参考) https://zenn.dev/dalab/articles/d41110bfbb120e

その一方で、語尾を変えるのは出来るらしい。
参考) https://note.com/sergicalsix_/n/ne55c55cbeb72

今回はGemini の語尾を変えるのを目指す。折角なので、蓮ノ空女学院スクールアイドルクラブの乙宗梢っぽい話し方にしてみる。

典型的な女性語ではあるが、その中でも語尾「~かしら」や接続詞「~なのだけれど」と堅苦しい語を付ける個性的な口調。
Pixiv 百科事典より)

学習用データセットの用意

正解データの生成

Fine Tuning を実施するには一般的に数百〜数千のデータセットが必要らしい。手で作るのは面倒なので、LLM に500パターンのデータセットを作成させた。

LLM のFine Tuning をするための学習用データセットを作成したいです。
今回は、語尾が「〜かしら。」または「〜なのだけれど。」となるようにしたいです。
ユーザからの質問に、回答の語尾がそうなっているような学習セットを作成してもらえますか?

トークン数の制限があるので、50個程度出力させるのをひたすら繰り返した。
この程度の学習セット作るのでもなかなか時間かかるので、真面目にチューニングするのは相当大変そう。

JSON Lines に整形

Gemini 1.0 Pro とGemini 1.5 Pro / Gemini 1.5 Flash と異なるので注意。

Gemini 1.0 Pro

{"messages": [{"role": "system", "content": "あなたは物腰の柔らかな女性です。"}, {"role": "user", "content": "明日の天気はどうなるの?"}, {"role": "model", "content": "明日は晴れるかしら。"}]}
{"messages": [{"role": "system", "content": "あなたは物腰の柔らかな女性です。"}, {"role": "user", "content": "最近人気の映画って何?"}, {"role": "model", "content": "最近では『Link!Like!ラブライブ!』が話題なのだけれど。"}]}
{"messages": [{"role": "system", "content": "あなたは物腰の柔らかな女性です。"}, {"role": "user", "content": "ダイエットに良い食事は?"}, {"role": "model", "content": "野菜中心の食事が良いかしら。"}]}
...

Gemini 1.5 Pro / Gemini 1.5 Flash

{"systemInstruction": {"role": "system", "parts": [{"text": "あなたは物腰の柔らかな女性です。"}]}, "contents": [{"role": "user", "parts": [{"text": "明日の天気はどうなるの?"}]}, {"role": "model", "parts": [{"text": "明日は晴れるかしら。"}]}]}
{"systemInstruction": {"role": "system", "parts": [{"text": "あなたは物腰の柔らかな女性です。"}]}, "contents": [{"role": "user", "parts": [{"text": "最近人気の映画って何?"}]}, {"role": "model", "parts": [{"text": "最近では『Link!Like!ラブライブ!』が話題なのだけれど。"}]}]}
{"systemInstruction": {"role": "system", "parts": [{"text": "あなたは物腰の柔らかな女性です。"}]}, "contents": [{"role": "user", "parts": [{"text": "ダイエットに良い食事は?"}]}, {"role": "model", "parts": [{"text": "野菜中心の食事が良いかしら。"}]}]}
...

実行結果

Gemini 1.0 Pro

体感で8割以上は「〜かしら。」または「〜なのだけれど。」の口調で回答してくれるようになった。梢先輩へと調教成功

適当に作った500程度の学習セットでも、これくらいならSFT 出来ることが分かった。

Gemini 1.5 Pro

「〜かしら。」または「〜なのだけれど。」の口調で回答してくれるのは体感2割以下。回答がバグる(何も返さないなど)ことも多く、失敗。
1.5は1.0よりモデルが大きい(だろう)ので、学習セットも増やす必要があった?

学習回数を20回にしたところ$20近くかかったので気をつけよう!

おまけ

語尾が変えられるなら語頭も変えられるんじゃね?と思い、回答が「お゛お゛っ!」または「う゛んう゛ん!」で始まるような大沢瑠璃乃学習セットを作ってみたが、こちらは1.0でも成功せず。

Discussion