Google AI Studioでモデルをチューニングしてみる

# はじめに
企業での生成AI活用では、GPT-4などのLLMをそのまま利用するのみではなく、企業内の様々なナレッジや特定ドメインの追加情報を活用したいという要望がほとんどです。その場合の方法として、RAG(Retrieval-Augmented Generation) とファインチューニングという選択肢があると思いますが、ファインチューニングに関しては機械学習やプロンプトエンジニアリングに関する専門知識が無いと太刀打ちできない、ということでまずはRAGに取り組んでいる事例が多いと思います。
一方、RAGの精度に関しては課題も多く、Vector検索のみではなくハイブリッド検索を試す、ナレッジグラフを使う、クエリ拡張を行う、など様々な手法で精度向上に取り組んでいることかと思います。

ファインチューニングに関しても、今やる必要は無いと思っていたところ、各社機械学習の専門家でなくてもノーコードでモデルをチューニングできますよ、と謳っているツールを出してきたので少し触ってみよう、いうのがこの記事の趣旨です。

今回は、Google AI Studio でモデルをチューニングする例を紹介します。

# データセットの準備
まずは学習させる内容のデータセットを作成します。
[公式ドキュメント](https://ai.google.dev/gemini-api/docs/model-tuning?hl=ja&_gl=1*rw738b*_up*MQ..*_ga*MjA5MzkyNjY0Mi4xNzIxMTc0NzY0*_ga_P1DBVKWT6V*MTcyMTE3NDc2My4xLjAuMTcyMTE3NDc2My4wLjAuNDg1NDkzNTI3#size-recommendation)によると、20個のサンプルデータで学習を開始できるとあります。タスクによりますが、100以上のサンプルデータを用意することが推奨されているようです。
今回はお試しということで最低限のサンプルデータ数で実行しますが、実際にファインチューニングを行うとなるとこのデータの質と量を充実させるのにとにかく人手も時間もかかることが予想されます。

## データの形式
データセットには、入力と出力のサンプルが必要です。CSVまたはGoogleスプレッドシートをImport可能とのことなので、以下のような形式のCSVを作成します。
```csvs
input,output
ファインチューニングとは何ですか？,ファインチューニング（fine-tuning）とは、既に学習済みのモデルに対して特定のタスクに最適化するために追加の訓練を行うプロセスです。具体的には、大規模なデータセットで事前に学習されたモデル（例えば、BERTやGPTなど）を基にして、そのモデルを特定のタスク（例えば、テキスト分類、感情分析、質問応答など）に適応させるために、比較的小規模なデータセットを用いて追加の学習を行います。
```

## データの内容
学習させるデータは、弊社製品のAPIリファレンスを元にChatGPTに読ませてQ&AをCSVに出力してもらいました。
抜粋しますが、以下のようなデータです。

```csvs
question,answer
Vantiqの認証プロセスはどのように機能しますか？,OAuthログインを使用する場合は、Bearerトークンを含むAuthorizationヘッダーを使用して認証します。
Vantiqの認証プロセスはどのように機能しますか？,HTTP基本認証を使用する場合は、ユーザー名とパスワードをBase64エンコードしたものをAuthorizationヘッダーに設定します。
Vantiqの認証プロセスはどのように機能しますか？,認証方法は、インストールがOAuthを使用するか否かに依存し、トークンまたはHTTP基本認証のいずれかを使用します。
Vantiq APIでリソースインスタンスをどのように削除しますか？,DELETE操作を使用して、指定された条件に基づいてリソースインスタンスを削除できます。
Vantiq APIでリソースインスタンスをどのように削除しますか？,リソースインスタンスの削除は、'where' パラメータを使用して条件を指定します。
Vantiq APIでリソースインスタンスをどのように削除しますか？,DELETE操作により、一致する条件のリソースインスタンスがシステムから削除されます。
...
```


# 学習
では、Google AI Studio で上記のデータを学習させていきます。
1. [Google AI Studio](https://ai.google.dev/aistudio?hl=ja) にログインし、左メニューの[New Tuned Model] を選択します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/24487/1dac2d05-e9d2-8475-0104-3de8f83721e4.png)

1. 今回はCSVをImportするので[Import] を選択し、ローカルにあるファイルをアップロードします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/24487/71d1f262-2b83-aa45-8dc1-020dc239eaf4.png)

1. Importできると、CSVが解析されます。CSVのどのカラムがInput,Outputに相当するのかを選択しImportを完了します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/24487/49ea8356-20db-09ca-8ba5-b97441156660.png)

1. モデルの名前の指定と、ベースモデルの指定を行います。ベースモデルは現在のところ、「gemini-1.0-pro-001」のみ選択できます。指定したら、[Tune]をクリックしてチューニングを開始します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/24487/3e16904b-0b66-bb57-3990-976f6ac06248.png)


1. [My library]にチューニングしたモデルが表示されます。チューニングは数分で完了します。 


# 実行
では早速チューニングしたモデルを実行してみましょう。
Google AI Studioのプロンプト実行画面の[Run Settings]で、チューニングしたモデルが選択できるようになっているので選択します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/24487/3ccde569-0077-82bf-f715-0e4e6283efd8.png)

データセットにある通りの回答をしてくれました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/24487/a69c9503-f3bf-08b5-95f8-f5bc30a2bdbd.png)


# まとめ
非常に簡単にモデルのチューニングと動作確認を行うことができました。

# 参考
- [Gemini API でファインチューニングする](https://ai.google.dev/gemini-api/docs/model-tuning?_gl=1*lfsjb9*_up*MQ..*_ga*ODM4NTgxNDYyLjE3MTk0NDYxNzE.*_ga_P1DBVKWT6V*MTcxOTQ2MzE2NS4yLjAuMTcxOTQ2MzE2NS4wLjAuMTEzMDk3OTc3Ng..&hl=ja)
- [Google AI Studio のクイックスタート](https://ai.google.dev/gemini-api/docs/ai-studio-quickstart?_gl=1*1qf4igr*_ga*ODM4NTgxNDYyLjE3MTk0NDYxNzE.*_ga_P1DBVKWT6V*MTcyMTE3NTcwNy40LjEuMTcyMTE3NTcyMy40NC4wLjE0NzkwMzEwNzU.&hl=ja)