生成AIのチャット回答精度を上げる方法
こんにちは。新卒三年目エンジニアの土屋です。
今回も生成AI関連の記事となります。現状の生成AI(今回はLLM)を実際に使っていて一番の課題はハルシネーション(幻覚)問題であると感じています。LLMを使用したチャットでは事前の機械学習で用いた情報を元に回答を作成することができますが、確実に正しい回答を得るという事はできません。この生成AIの回答精度を上げる方法に関して今回は説明します。
今回扱うLLM(Large Language Model)
今回はGCPのVertex AIサービスで提供されているPaLM 2(Pathways Language Model)を用います。
PaLMは深層学習モデル「Transformer」をベースとする「Pathways」の学習アプローチを用いて処理効率を高めたモデルです。
Transformer参考論文:https://arxiv.org/abs/1706.03762
Pathways参考論文:https://arxiv.org/abs/2204.02311
精度向上の策
【RAG】
前回のGluegentブログでご紹介したRAGという手法です。RAGを用いることでLLMの機械学習時に使用しなかった情報を外部から与えることで学習に使用していない情報に対する回答を生成する事ができます。ただし、こちらの手法を用いても外部データに回答に必要な情報が無い場合は正しい回答ができなくなる可能性が高くなります。
(RAGの上手くいく例:RAGによって天気予報の情報をプロンプトに付与した場合)
(上手くいかない例:質問に対する情報が無い)
今回使用しているLLMであるPaLM 2は2023年2月までの情報を元にトレーニングされているため、それ以降の情報を持っていません。上記の例では情報の補完の為に天気予報の情報をプロンプトに付与することで正しい回答が得られる事が確認できます。ただし天気予報の情報として湿度を与えずに、湿度を質問した場合も誤った情報の湿度を回答します。この値がどこからきたものかは分かりませんが、誤った情報をもっともらしく回答します。(実際の天気予報では湿度80%前後の予報でした)
【Fine-tuning】
LLM(ここではPaLM 2)は事前に数千億のパラメータとトークンで学習されたモデルですが、学習時に使用していない情報に関しては持っていないため、正しく返答することはできません。そのため、新しく情報をモデルに持たせるには再度学習が必要になります。ここで1から再度学習することなく既存のモデルに追加で学習をさせる手法をFine-tuningと言います。Vertex AIで提供するモデルはFINE TUNEが可能となっており、独自の情報を元に追加学習させることが可能です。
Fine-tuningのコストやFine-tuningしたカスタムモデルのランニングコストは少し高くなるため、既存のモデルに持っていない情報に関する質問をする際はRAGとFine-tuningを比較して検討すると良さそうです。
【Context】
Vertex AIのチャット用PaLM 2モデルでは単純なメッセージプロンプトとは別にContextという応答の生成時に使用する参照情報をモデルに与えることができます。Vertex AIのContextの仕組みに関して詳しく公開はされていませんが、モデルが与えられた入力のコンテキストに基づいて新しいタスクを理解し、適応する能力あるいはその能力を学習するICL(In-Context Learning)という仕組みが用いられていると思います。そのコンテキストを設定することで以下のようにハルシネーションを抑制する事が可能になります。
- ハルシネーションを軽減するルールの追加
これで、情報を持っていない場合に嘘を答えるのではなく、情報が無い事をそのまま返答するようになりました。
またContextでは他の用途として以下のような事もできます。
- チャットボットにアイデンティティやペルソナを与える
チャットにおいて返答するAIの人物像(ここでは猫ですが笑)を与える事でそれに沿った返答をするようになります。
- チャットボットが従うべきルールを与える
ハルシネーションを軽減するルールの追加と同じような使い方ですが、ハルシネーション軽減とは異なり、持っている情報を意図的に答えさせない様にする等が可能です。
【Examples】
恐らく内部の仕組みはコンテキストと同様ICLが用いられていると思うのですが、Vertex AIのPaLM2では例示的な入力と出力をモデルに渡すことができます。これにより特定の質問に対する応答方法をカスタマイズすることができます。以下はコンテキストと似た使い方ですが、これによってもハルシネーションの抑制が可能です。
また、Examplesを用いることで返答の仕方を例示的に表し、チャット時の返答のフォーマットの指定のようなこともできます。ただ以下の場合はExamplesで与えたinput(質問)と同様の形式で地域のみ変えて質問しているためフォーマットが適用されていますが、少し聞き方やニュアンスが異なると指定通りの回答ではなくなります。
まとめ
いかがだったでしょうか。今回はVertex AIを使用して生成AIのチャット返答精度を上げる方法に関して説明しました。本記事で紹介した方法を用いることでハルシネーションを抑制したり、モデルが事前の学習で得ていない知識を返答できるようになります。ただしこれらの方法を用いても完全に信頼できる情報を返答するようになるわけでは無いので、生成AIの出力したデータに関しては取り扱いの注意が必要です。
(土屋)