ChatGPTのファインチューニングを試してみる（大失敗）

前回の記事で、GPTsでは生データを集計・分析させるのは難しそうということがわかった。

https://qiita.com/sho_fcafe/items/c370a7e4fceaf29f6089

そこで今回はファインチューニング（追加学習をさせること）を実施した後にデータを集計・分析できるかを試すためにまずはファインチューニングを実施してみることにした

# 学習データの準備

まずはAIに学習するためのデータを準備する。
同じデータでも学習のさせ方によって効果が変わってくる気もするが、今回は下記のようなデータを用意した。
データは最低10個用意する必要がある。

```jsonl
{"messages": [{"role": "system", "content": "あなたはエフカフェサイトに訪問したユーザーの行動履歴について集計・分析を担当するコンサルタントです"},{"role": "user", "content": "2024/4/1 00:00:00のエフカフェサイトを訪問したセッションの詳細を教えてください"}, {"role": "assistant", "content": "このセッションのユーザーエージェントは「Mozilla/5.0 (iPhone; CPU iPhone OS 17_3_1 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/21D61 Instagram 321.0.2.24.105 (iPhone16,2; iOS 17_3_1; ja_JP; ja; scale=3.00; 1290x2796; 572181444) NW/3」で、CTAは実行されず、CVも記録されていません"}]}
{"messages": [{"role": "system", "content": "あなたはエフカフェサイトに訪問したユーザーの行動履歴について集計・分析を担当するコンサルタントです"},{"role": "user", "content": "2024/4/1 00:01:00のエフカフェサイトを訪問したセッションの詳細を教えてください"}, {"role": "assistant", "content": "このセッションのユーザーエージェントは「Mozilla/5.0 (iPhone; CPU iPhone OS 17_3_1 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/21D61 Instagram 321.0.2.24.105 (iPhone16,2; iOS 17_3_1; ja_JP; ja; scale=3.00; 1290x2796; 572181444) NW/3」で、CTAが2024/4/1 00:01:01に実行されましたが、CVは記録されていません"}]}
{"messages": [{"role": "system", "content": "あなたはエフカフェサイトに訪問したユーザーの行動履歴について集計・分析を担当するコンサルタントです"},{"role": "user", "content": "2024/4/1 00:02:00のエフカフェサイトを訪問したセッションの詳細を教えてください"}, {"role": "assistant", "content": "このセッションのユーザーエージェントは「Mozilla/5.0 (iPhone; CPU iPhone OS 17_3_1 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/21D61 Instagram 321.0.2.24.105 (iPhone16,2; iOS 17_3_1; ja_JP; ja; scale=3.00; 1290x2796; 572181444) NW/3」で、CTAは実行されていませんが、CVが記録されています"}]}
{"messages": [{"role": "system", "content": "あなたはエフカフェサイトに訪問したユーザーの行動履歴について集計・分析を担当するコンサルタントです"},{"role": "user", "content": "2024/4/2 00:00:00のエフカフェサイトを訪問したセッションの詳細を教えてください"}, {"role": "assistant", "content": "このセッションのユーザーエージェントは「Mozilla/5.0 (iPhone; CPU iPhone OS 17_3_1 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/21D61 Instagram 321.0.2.24.105 (iPhone16,2; iOS 17_3_1; ja_JP; ja; scale=3.00; 1290x2796; 572181444) NW/3」で、CTAが2024/4/2 00:00:01に実行されましたが、CVは記録されていません"}]}
{"messages": [{"role": "system", "content": "あなたはエフカフェサイトに訪問したユーザーの行動履歴について集計・分析を担当するコンサルタントです"},{"role": "user", "content": "2024/4/2 00:01:00のエフカフェサイトを訪問したセッションの詳細を教えてください"}, {"role": "assistant", "content": "このセッションのユーザーエージェントは「Mozilla/5.0 (iPhone; CPU iPhone OS 17_3_1 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/21D61 Instagram 321.0.2.24.105 (iPhone16,2; iOS 17_3_1; ja_JP; ja; scale=3.00; 1290x2796; 572181444) NW/3」で、CTAは実行されず、CVも記録されていません"}]}
{"messages": [{"role": "system", "content": "あなたはエフカフェサイトに訪問したユーザーの行動履歴について集計・分析を担当するコンサルタントです"},{"role": "user", "content": "2024/4/2 00:02:00のエフカフェサイトを訪問したセッションの詳細を教えてください"}, {"role": "assistant", "content": "このセッションのユーザーエージェントは「Mozilla/5.0 (iPhone; CPU iPhone OS 17_3_1 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/21D61 Instagram 321.0.2.24.105 (iPhone16,2; iOS 17_3_1; ja_JP; ja; scale=3.00; 1290x2796; 572181444) NW/3」で、CTAが2024/4/2 00:02:01に実行され、CVも記録されています"}]}
{"messages": [{"role": "system", "content": "あなたはエフカフェサイトに訪問したユーザーの行動履歴について集計・分析を担当するコンサルタントです"},{"role": "user", "content": "2024/4/2 00:03:00のエフカフェサイトを訪問したセッションの詳細を教えてください"}, {"role": "assistant", "content": "このセッションのユーザーエージェントは「Mozilla/5.0 (iPhone; CPU iPhone OS 17_3_1 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/21D61 Instagram 321.0.2.24.105 (iPhone16,2; iOS 17_3_1; ja_JP; ja; scale=3.00; 1290x2796; 572181444) NW/3」で、CTAは実行されず、CVも記録されていません"}]}
{"messages": [{"role": "system", "content": "あなたはエフカフェサイトに訪問したユーザーの行動履歴について集計・分析を担当するコンサルタントです"},{"role": "user", "content": "2024/4/2 00:04:00のエフカフェサイトを訪問したセッションの詳細を教えてください"}, {"role": "assistant", "content": "このセッションのユーザーエージェントは「Mozilla/5.0 (iPhone; CPU iPhone OS 17_3_1 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/21D61 Instagram 321.0.2.24.105 (iPhone16,2; iOS 17_3_1; ja_JP; ja; scale=3.00; 1290x2796; 572181444) NW/3」で、CTAが2024/4/2 00:04:01に実行されましたが、CVは記録されていません"}]}
{"messages": [{"role": "system", "content": "あなたはエフカフェサイトに訪問したユーザーの行動履歴について集計・分析を担当するコンサルタントです"},{"role": "user", "content": "2024/4/2 00:05:00のエフカフェサイトを訪問したセッションの詳細を教えてください"}, {"role": "assistant", "content": "このセッションのユーザーエージェントは「Mozilla/5.0 (iPhone; CPU iPhone OS 17_3_1 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/21D61 Instagram 321.0.2.24.105 (iPhone16,2; iOS 17_3_1; ja_JP; ja; scale=3.00; 1290x2796; 572181444) NW/3」で、CTAは実行されていませんが、CVが記録されています"}]}
{"messages": [{"role": "system", "content": "あなたはエフカフェサイトに訪問したユーザーの行動履歴について集計・分析を担当するコンサルタントです"},{"role": "user", "content": "2024/4/3 00:00:00のエフカフェサイトを訪問したセッションの詳細を教えてください"}, {"role": "assistant", "content": "このセッションのユーザーエージェントは「Mozilla/5.0 (iPhone; CPU iPhone OS 17_3_1 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/21D61 Instagram 321.0.2.24.105 (iPhone16,2; iOS 17_3_1; ja_JP; ja; scale=3.00; 1290x2796; 572181444) NW/3」で、CTAが2024/4/3 00:00:01に実行されましたが、CVは記録されていません"}]}
```
# 学習の実施
OpenAI APIのコンソールから学習を実行する。
Fine-tuning > Createと進む。
![スクリーンショット 2024-04-29 10.13.46.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3476743/2dcb028a-de32-e1a2-efe3-a65e251f9011.png)

ちなみに、学習をさせるためにはクレジットの登録が必要だった。
無制限にやると高額請求のおそれがありそうなのでオートチャージをOFFにしておいたり、上限を設定しておくのがよい。

![スクリーンショット 2024-04-29 10.45.35.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3476743/15824ee9-18d8-6924-98f0-c29dacd93e13.png)

チューニングが終わったのでAPIコンソール内の比較機能を使って学習前後を比較してみる。
まずは学習させたデータそのままを聞いてみる

![スクリーンショット 2024-04-29 10.55.39.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3476743/e17ab2d4-ef7c-4334-c5ee-228af4224c80.png)

おお、ちゃんと学習してくれている！

では、次に4/1の集計結果を聞いてみる
![スクリーンショット 2024-04-29 10.58.22.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3476743/60270ee6-e1ff-c248-b9e7-386c04aff60b.png)

あらら、全然ダメだ。
うーん、集計方法も学習させた方がいいのかな・・・

# 今回のまとめ
初めてファインチューニングを実施して追加情報を学習させることはできたが、単にオウム返しレベルで集計や分析をすることはできなかった。

ただ、まだやりようはありそうで、

- 学習データを工夫してみる
- 集計方法自体を学習させる

といったあたりは試してみようと思う。