Chapter 07

ファインチューニング

maKunugi
maKunugi
2023.02.19に更新

ファインチューニング

前のChapterでは、チャットボット構築におけるプロンプトエンジニアリングの重要性と、その方法について説明をしてきました。このChapterでは、プロンプトエンジニアリングと並んで重要な「ファインチューニング」について紹介をしていきます。

ファインチューニングとは

GPT-3.5等は、大量の学習データによって汎用的な言語の表現を学習した「事前学習済み」の「言語モデル」です。この学習には膨大なコストと時間がかかっています。GPT-3.5のような大規模言語モデルを、利用者が開発するのは非常に困難が伴いますが、ファインチューニングを利用すると、少ない学習量で特定の用途にモデルを特化させたり、追加の学習データの特徴を言語モデルに反映させたりすることができます。

ファインチューニングで行うことは、追加の学習データで事前学習済みの言語モデルを再トレーニングすることです。事前学習済みの言語モデルの性能を活用しながら、独自のデータでトレーニングした言語モデルを作成することができます。1から言語モデルを構築するわけではないため、少ないデータセットでも行うことができます。

ファインチューニングのメリット

上述したとおり、少ない学習データを用いて、特定のタスクに特化させたり、特徴を反映させた言語モデルを作成できることがファインチューニングのメリットです。例えば、特定のキャラクターの会話データを用いて事前学習済みの言語モデルのファインチューニングを行うと、よりキャラクターの会話の特徴を捉えた言語モデルができあがります。

前のChapterで紹介した「プロンプトエンジニアリング」の手法では、キャラクターの特徴を捉えさせるためには、プロンプトに様々な情報を盛り込む必要がありました。しかし、ファインチューニングはモデル自体の再トレーニングを行います。ファインチューニングされた言語モデルは、プロンプトを付け加えずとも、Zero shotで特徴を捉えた会話をすることができるようになります。また、「プロンプト」は与える文字量に制限があります。そのため厳選した情報をプロンプトに盛り込むと言った工夫が必要ですが、ファインチューニングはその点を気にせず、モデルをチューニングすることが可能です。プロンプトを厳選する手間を省けるだけでなく、プロンプトによる文字数増加が発生しないため、コストカットにもつながる場合があります。

OpenAIの提供するファインチューニングの機能

OpenAIはGPT-3.5を始めとした言語モデルをファインチューニングする機能を提供しています。詳細な利用方法については、下記の公式ガイドで説明されています。
https://platform.openai.com/docs/guides/fine-tuning

上記の機能を用いることで、OpenAIのサービス上でモデルのファインチューニングを行えます。また、ファインチューニングを行ったモデルは、同じくOpenAIのサービス上(API経由)から利用ができます。本来自前で学習環境を用意したり、モデルのホスティングを行ったりと大変な作業も多いファインチューニングですが、とても手軽に試すことができます。

ファインチューニングの注意点

1. プロンプトエンジニアリングのようにリアルタイムでチューニングができない

上述したとおり、ファインチューニングは言語モデル自体をトレーニングします。語弊を恐れずに表現をすると、言語モデルとは、言語の膨大な特徴量を凝縮した1つの静的なファイルです。つまり、トレーニングが終わった時点で生成されたファイルであり、常に最新の学習データを取り込み続けているわけではありません。ChatGPTが会話を行う際に最近の話題に答えられないのは、2021年までのデータで学習をされた言語モデルであることに起因します。それと同様に、ファインチューニングしたモデルもその時点が最新となるため、同様の問題がつきまといます。プロンプトエンジニアリングは、プロンプトの内容さえ新しければ、少々古い言語モデルでもプロンプトの内容によって応答を調整することが可能です。よって、ファインチューニングを行ったとしても、プロンプトエンジニアリングをしなければならないケースもあります。

2. 言語モデルの行うアウトプットを完全に強制するものではない

ファインチューニングは、言語モデルの出力を特定の文字列に強制するものではありません。プロンプトエンジニアリングでも同様ですが、言語の生成は確率的に行われます。例えば、チャットボットにおける「セリフの登録」のように、「xxxxと言われたら○○○と返す」といったことをしたい場合、ファインチューニングは確実ではありません。セリフのセットを集めたチャットボット用の学習データを用いてファインチューニングを行えば、たしかに想定した回答を返しやすいチャットボット用の言語モデルは出来上がります。しかし、100%想定した応答を保証するものではないことに注意が必要です。そういった用途であれば、そもそも生成AIを利用しない別のアプローチの方が有効なケースもあります。

チャットボットにおける活用方法

チャットボット構築において、このファインチューニングを活用できそうなユースケースの例は下記のような場合です。

  1. 特定の領域の知識を与えたい場合
  2. キャラクター性を与えたい場合

特定の領域の知識を与えたい場合

ChatGPTと会話をするとよくわかりますが、専門的な領域になればなるほど、怪しい応答が増えてきます。GPT-3.5のような大規模言語モデルは、Web上にある膨大なデータを用いて学習をしていると言われます。「汎用的な言語モデル」であり、様々な用途で広く使えるよう考慮され開発されています。逆を返すと、幅広いデータを広く収集していますが、深く専門的な情報をそこまで学習できているわけではありません。そこで、特定の専門領域に対して言語モデルの理解力をあげるには、ファインチューニングが有効です。プロンプトエンジニアリングでは与えきれない知識を、言語モデルに与えることができます。

キャラクター性を与えたい場合

会話データを与える等することで、AIにキャラクター性をもたせるためにも、ファインチューニングは有効です。キャラクター性をよく表した会話データで言語モデルをファインチューニングすることで、AIの文章生成がキャラクター性を考慮するようになります。

まとめ

このChapterでは、ファインチューニングについて紹介を行いました。前Chapterの「プロンプトエンジニアリング」と並んで、Generative AIを利用してチャットボットを構築する上で非常に重要な手法です。上述のメリデメを考慮し、適切に使っていきましょう。