GPT-3 の Fine-tunig を試してみた

はじめに

最近話題の GPT-3 で Fine-tunig を試してみたので、その結果を共有したいと思います。
評価した目的は下記の3つですが、この記事では皆さんが一番興味を持たれそうな 3.の精度についてお伝えします。
1.と2.には触れません。

  1. GPT-3を Fine-tuning する方法を理解する。
  2. GPT-3を Fine-tuning する際のコストや時間を理解する。  
  3. Fine-tuning をした結果、検索結果として回答の精度が上がるかを確認する。

Fine-tunig をする方法は OpenAI のサイトに丁寧な説明がありますので、試してみたい方はこちらの手順をご参照ください。

platform.openai.com

私も OpenAI の手順通りにやっただけなので、おそらくつまづかないと思います。 一点、Windows 環境で WSL(Windows Subsystem for Linux) を使っている方は nameserver の設定をしておかないと、 Fine-tunig 実行のコマンドを投げた際に、名前解決できずにエラーになる可能性がありますのでご留意ください。 私は sudo vi /etc/resolv.confnameserver 8.8.8.8 に設定しました。

データについて

データソース

子育てオープンデータ協議会がクリエイティブ・コモンズ・ライセンスの表示4.0国際に基づいてオープンデータとして公開している「子育てAIチャットボット」普及のための「FAQデータセット」を用いました。 データセットには662件の問い合わせと応答の組み合わせが含まれます。

(CC-BY 4.0 子育てオープンデータ協議会 )

linecorp.com

データ加工

  • FAQデータセット「dataset_.xls」の C列「サンプル 問い合わせ文」を prompt 、 D列「サンプル 応答文」を completion として定義。
  • prompt と comletion の列のみを UTF-8 の CSV ファイルに出力。
  • completion 列に対して、「▼」や「◆」に続く参照先を案内する文章の削除。
  • セル内改行の削除
  • 空白文字(全角/半角)の削除
  • 改行文字コードの変換( CRLF → LF )

結果の評価

評価方法

ChatGPT、curie を Fine-tuning したモデル、davinci をFine-tuning したモデルの3つに対し、同じ内容の「サンプル 問い合わせ文」を用いて問い合わせし、その回答を目視で比較しました。

結果サンプル

サンプル1

ChatGPT はいかにも正しそうな回答を返しましたが、「妊娠届」に言及できていないうえ、「手数料を支払う」と誤った回答をしました。curie は問い合わせにはない「再発行」という語を採用していることから、何かしら別の回答を参照しているように見受けられますが、「代理人」には言及できています。davinci は curie に比べて若干丁寧な言い回しになっていますが、「代理人」には言及できていません。

サンプル1

サンプル2

ChatGPT が「使うことができる」と誤った回答をしたのに対し、 curie 、davinci ともに「使えない」と回答したので Fine-tuning した成果は出ています。但し、申請することで代わりに助成金として支給されることについては回答できていません。

サンプル2

サンプル3

ChatGPTはそれらしく回答しましたが内容は誤っています。curie も davinci も Fine-tuning した結果が反映されていましたが、curie の方は途中から間違っています。

サンプル3

サンプル4

ChatGPT は「申し込むことができる」と誤った回答をしました。curie は「できる」とも「できない」とも回答しませんでしたが、申し込み手続きを説明しているので「できる」ように読み取れます。davinci のみが保育園での集団生活の経験に対し「できない」と回答しました。但し、集団生活の経験を目的とした施設ではない、ということは伝えられていません。

サンプル4

サンプル5

ChatGPT は補助金と税控除を混同した回答をしました。curie はもっともらしい回答をしましたが、触れられていない所得制限について言及しています。davinci は税の「申告は必要ありません」と完全に誤った回答をしました。

サンプル5

評価まとめ

  • ChatGPT は Fine-tunig を行っていないので、当然のことながら正しい回答ではないが、非常にもっともらしく回答する。
  • 日本語としての表現という面だど、Fine-tuning 前のChatGPTが一番丁寧である。
  • curie、davinci ともに Fine-tuning することで、 Fine-tuning 前よりは正しい回答を参照しているように見受けらる。
  • 回答としての正しさは curie を使おうと davinci を使おうと大差はない。
  • 本内容のような FAQ であれば、curie でも文章生成として十分活用できる。

総括

Fine-tuning を施すことで、特定のドメインに対して回答を返す仕組みが作れそうであることは確認できました。

Fine-tuning のやり方自体は難しくありませんが、案の定、そう簡単に正しい回答を返すようなものが作れるものではありませんね。

OpenAI のサイトにはカスタマーサポートのケーススタディでは「数千件のデータセットが必要」とあるので662件のデータでは少なかったのかもしれませんが、とはいえ、それだけでもこれだけの回答を返してくることには驚きです。

データ加工の仕方や Fine-tuning 時のエポック数を変えることでも精度は上がるのかもしれませんし、OpenAI のサイトでもセマンティック検索や Embedding でベクトル化して検索する方法も案内されているので、一つのやり方にこだわらず、いろいろなやり方を試して精度とコストのバランスで最適なものを選べるように今後も知見を深めていきたいと思います。

執筆担当者プロフィール
佐久間 啓史

佐久間 啓史(日本ビジネスシステムズ株式会社)

エンジニアとしてITインフラの構築・運用業務、システム開発のPM等を経験した後、AI、IoT、XR等の先端技術を扱う部門の責任者として、業界課題や技術動向の調査、ソリューションの企画などを担当。

担当記事一覧