ChatGPT (gpt-3.5-turbo) を専門知識のデータでファインチューニングした事例

# はじめに
2023年8月にGPT-3.5 Turboのファインチューニング機能が[リリース](https://openai.com/blog/gpt-3-5-turbo-fine-tuning-and-api-updates)されましたが、うまくいかなかったという記事を幾つか見かけました。

https://zenn.dev/ml_bear/articles/49ed93d33e69cc

https://note.com/kuriyama_data/n/n14a600024846

ただ、一番目の記事はファインチューニングに使ったデータ量が60件と少なく、また二番目の記事は「なぞなぞ」という自然言語処理のタスクではあまり見かけないデータを使ってファインチューニングをしています。
そこで、専門分野に関する知識を一定規模のデータ量を使ってファインチューニングするとどうするのかを試しました。

# ファインチューニングに使ったデータ
[グロービス経営大学院](https://mba.globis.ac.jp/)が公開している[MBA用語集](https://mba.globis.ac.jp/about_mba/glossary/)のデータを使いました。
これは経営学に関する専門用語を解説したもので、約1,000単語ほどが収められています。
例えば、[「MECE」という単語のページ](https://mba.globis.ac.jp/about_mba/glossary/detail-11654.html)では、次のような解説文が載っています。

> MECEとは、英語のMutually Exclusive Collectively Exhaustiveの頭文字を取ったもので、「モレなくダブりなく」という意味。
> MECE、物事を分解し、構造化して考える際、その完成度を確認するのに役立つ。例えば、トラブルを解決する場合、状況を調べて問題箇所を特定する必要がある。その際、いくつかのポイントに分解して考えることが重要になる。この分解にモレがあると重要なポイントを見落とすし、ダブりがあると効率よい分析ができない。

ファインチューニング用のデータセットは、入力（`user`の`content`）と出力（`assistant`の`content`）のペアでデータセットを作る必要があります。
今回、用語の最後に「とは何ですか？」という文言を付け加えたものを入力とし、解説文を出力にしました。
前記の「MECE」の例では、次のようなデータとなります。

``` json
{
	"messages": [
		{
			"role": "user",
			"content": "MECEとは何ですか？"
		},
		{
			"role": "assistant",
			"content": "MECEとは、英語のMutually Exclusive Collectively Exhaustiveの頭文字を取ったもので、「モレなくダブりなく」という意味。\n\nMECE、物事を分解し、構造化して考える際、その完成度を確認するのに役立つ。例えば、トラブルを解決する場合、状況を調べて問題箇所を特定する必要がある。その際、いくつかのポイントに分解して考えることが重要になる。この分解にモレがあると重要なポイントを見落とすし、ダブりがあると効率よい分析ができない。"
		}
	]
}
```

MBA用語集には約1,000単語が収められているので上記のjsonオブジェクトが約1,000個作られ、これをjsonlとして一つのファイルにまとめます。
ファインチューニングの方法は、OpenAIの[公式サイト](https://platform.openai.com/docs/guides/fine-tuning)を含めて様々なサイトで紹介されているので割愛します。

# 結果と考察
ファインチューニングの効果を確かめるため、オリジナルとファインチューニング版のGPT-3.5 Turboに経営学文脈の問いを投げかけました。そして、両者の回答を比較し、どちらの回答の方が優れているのか考察しました。

## 問い1：ロジックツリーはどのような場面で使うと有効ですか？
### 回答（オリジナルのGPT-3.5 Turbo）
> ロジックツリーは、以下のような場面で有効に活用されます。
> 
> 1. プログラミングのデバッグ：ロジックツリーは、プログラムの実行フローを視覚化するために使用されます。特定の条件やループの制御フローを理解し、バグを特定するのに役立ちます。
> 2. ゲーム開発：ゲームのAIやイベントの制御において、ロジックツリーは非常に有用です。プレイヤーの行動や状態に基づいて、ゲーム内のキャラクターやイベントの動作を制御することができます。
> 3. 意思決定のモデリング：ロジックツリーは、複雑な意思決定プロセスをモデル化するために使用されます。例えば、ビジネスの意思決定や戦略の策定において、ロジックツリーは意思決定のフローを明確にするのに役立ちます。
> 4. プロジェクト管理：ロジックツリーは、プロジェクトのタスクや依存関係を視覚化するために使用されます。タスクの進捗状況や優先順位を管理するのに役立ちます。
> 5. プロセスの自動化：ロジックツリーは、複数の条件やステップに基づいてプロセスを自動化するために使用されます。例えば、ワークフローの自動化やルーチンの自動化において、ロジックツリーは効果的なツールとなります。
> 
> これらは一部の例ですが、ロジックツリーはさまざまな場面で有効に活用されます。

### 回答（ファインチューニング版のGPT-3.5 Turbo）
> ロジックツリーは、複雑な問題を解決する際に、その解決のためのロジックを整理するために使われるフレームワークである。ロジックツリーは、コンサルティングファームのマッキンゼーが開発したもので、コンサルティングファームの仕事は、クライアントの抱える問題を解決することであり、そのためには論理的思考が必要とされる。そこで、マッキンゼーでは、論理的思考を鍛えるためにロジックツリーを開発した。
> 
> 
> ロジックツリーは、大きな問題を小さな問題に分解し、それらを解決していくことで、最終的に大きな問題を解決するという考え方に基づいている。ロジックツリーは、木構造で表現されることが多く、根（root）から葉（leaf）へ向かって分岐していく構造となっている。根から葉へ向かって分岐していく過程で、大きな問題が小さな問題に分解されていく。
> 
> ロジックツリーは、コンサルティングファームの仕事に限らず、論理的思考を鍛えるために幅広く使われている。例えば、ビジネスパーソンがプレゼンテーションを行う際には、聴衆に対して自分の主張を説明する必要がある。その際に、ロジックツリーを使うことで、自分の主張を論理的に説明することができる。
> 
> また、ロジックツリーは、複雑な問題を解決する際にも有効である。例えば、新規事業を立ち上げる際には、様々な問題が発生する。その際に、ロジックツリーを使うことで、問題の本質を見極めることができる。

**オリジナルの回答は、ロジックツリーの有効な場面としてプログラミング、ゲーム開発、意思決定のモデリングなどが挙げられており、システム開発の場面が想定されているような記述内容になっています。一方、ファインチューニング版の回答は、複雑な問題を解決する際にロジックを整理するためのフレームワークであると述べられています。さらに、論理的思考が求められるビジネス全般で使えるという趣旨のことも書かれており、経営学文脈ではファインチューニング版の回答の方が優れていると言えそうです。**

## 問い2：独立採算制のメリットとデメリットについて簡潔に説明して下さい。
### 回答（オリジナルのGPT-3.5 Turbo）
> 独立採算制のメリットは、以下のような点があります。
> 
> 1. 財政の効率化：独立採算制では、収入と支出が直接関連しているため、経営の効率化が図れます。収入が増えれば支出も増えるため、収益を最大化するための努力が生まれます。
> 2. 自己責任の強化：独立採算制では、収入と支出が直接関連しているため、組織や個人が自己責任を持つことが求められます。結果的に、効率的な経営や財政健全化が促進されます。
> 3. 経営の柔軟性：独立採算制では、収入と支出が直接関連しているため、経営方針や予算の変更が比較的容易です。経営状況に応じて迅速に対応することができます。
> 
> 一方、独立採算制のデメリットは、以下のような点があります。
> 
> 1. 収入の不安定性：独立採算制では、収入が事業の成果に直接依存しているため、収入の不安定性が生じることがあります。景気の変動や需要の変化によって、収入が大きく変動する可能性があります。
> 2. 財政の不均衡：独立採算制では、収入と支出が直接関連しているため、収入が不足すると支出を削減する必要が生じます。その結果、一部の業務やサービスの縮小や廃止が起こる可能性があります。
> 3. 経営の過度な競争：独立採算制では、収入を増やすための競争が生じることがあります。組織や個人が自己責任を持つため、過度な競争や利益追求が行われる可能性があります。これによって、公共性や社会的な使命を忘れる恐れがあります。

### 回答（ファインチューニング版のGPT-3.5 Turbo）
> 独立採算制とは、各事業部門の収益と費用を明確に区分し、その差額である利益を評価する制度。各事業部門の独立性を重視する。
> 
> 
> メリットとしては、各事業部門の独立性が高まるため、経営者が事業部門の経営者に対して責任を明確に果たさせることができる。また、各事業部門の収益性やコスト構造が明確になるため、経営者は各事業部門の収益性やコスト構造を改善するための施策を講じやすくなる。
> 
> デメリットとしては、各事業部門の独立性が高まるため、経営全体の最適化が図れないことが挙げられる。例えば、ある事業部門が他の事業部門に対して高い原価で製品を供給した場合、その他の事業部門は原価高で収益性が悪化する。このような場合、原価高であることを理由に他の事業部門からの製品の受け入れを拒否することが考えられる。このような事態を避けるために、各事業部門の独立性をある程度犠牲にして、経営全体の最適化を図るための制度として、利益センター制がある。

**ファインチューニング版の回答は、メリットに「各事業部門の独立性が高まる」、デメリットに「経営全体の効率化が図れないこと」が挙げられており、模範解答とも言うべき内容になっています。一方、オリジナルの回答は、明確に誤りとは言い切れないものの、経営学文脈では物足りない内容となっています。これより、この問いもファインチューニング版の回答の方が優れていると言えそうです。**

## 問い3：VUCAについて簡潔に説明して下さい。
### 回答（オリジナルのGPT-3.5 Turbo）
> VUCAは、不確実性（Volatility）、不安定性（Uncertainty）、複雑性（Complexity）、曖昧性（Ambiguity）の頭文字を取った言葉で、ビジネスや組織の環境がますます不確実で変動しやすくなっていることを表現しています。VUCAの状況では、予測が困難で、変化が速く、問題が複雑で、情報が不明瞭であるため、組織や個人は柔軟性や創造性を持って対応する必要があります。VUCAの理解と対応能力は、現代のビジネス環境で成功するために重要です。

### 回答（ファインチューニング版のGPT-3.5 Turbo）
> VUCAとは、Volatile（不安定）、Uncertain（不確実）、Complex（複雑）、Ambiguous（曖昧）の頭文字をとった言葉で、不確実性の高い環境を指す。
> 
> 
> VUCAの概念は、もともとアメリカ陸軍戦略コマンドが冷戦終結後の環境変化に対応するために提唱したものである。その後、ビジネスの世界においても、環境変化が激しくなる中で企業が直面する課題を捉えるために用いられるようになった。
> 
> VUCAの環境下では、従来型のマネジメント手法や組織運営では対応が難しくなる。そこで、VUCAに対応するためのマネジメント手法として注目されているのが、アジャイルやデザイン思考などの手法である。これらは、従来型のマネジメント手法では対応が難しいVUCAの環境下でも、柔軟かつ迅速に変化に対応することができる。

**オリジナルの回答も決して悪くありませんが、ファインチューニング版の回答の方が情報量が多く内容的にも正しいことが書かれているので優れていると言えそうです。**

# 最後に
GPT-3.5 Turboのファインチューニング機能がうまくいかなかったという記事を見かけたことがきっかけで、専門分野に関する知識を一定規模のデータ量を使ってファインチューニングを試してみました。
結果、ファインチューニングした方が、その専門領域での文脈では望ましい結果が得られました。
ファインチューニングは魔法のツールではありませんが、効果がある場面も多いと思うので是非皆さんも試してみて下さい。