フォーム読み込み中
本稿では、「Google Cloud Rapid Evaluation APIで実現するRAGの精度評価の自動化 」と「Vertex AI Gemini Proで実現するファインチューニング手法と適用すべきユースケースの提案」に続いて、検証から得られた結果と考察を用いて、RAGの回答精度評価とファインチューニングを組み合わせた方法論の提案と実装"に挑戦します。具体的には、Rapid Evaluationを用いて自動的に回答の改善提案を行い、その結果をファインチューニングのデータセットとして蓄積させ、RAG × MLOpsの新しい手法を提案し、「RAGの回答に主体性をもたせる(企業ブランドトーンを反映させる)」ことを目指します。
なお、朗報としてVertexAIでも「Gemini-1.5-Pro」および 「Gemini-1.5-Flash」がファインチューニングの基盤モデルとして利用できるようになりました。東京リージョンでのモデルデプロイは現時点で未対応ですが、いずれ対応することを見越し、本検証では性能とコストパフォーマンスのバランスが最も取れている「Gemini-1.5-Flash」を使用しファインチューニングモデルを作成します。
想定読者
想定課題
RAG(Retrieval-Augmented Generation)は、大規模言語モデル(LLM)と外部知識ソースを組み合わせ、LLM が学習していない情報を外部から取得して応答する技術です。日本語では「検索拡張生成」とも呼ばれ、LLM の汎用性と外部データの最新性を両立させる手法として注目されています。
簡単に振り返ると、RAG の仕組みは以下の通りです。
質問を受け取る:ユーザーからの質問を入力します。
外部知識の検索:質問に関連する情報を外部データベースやベクトルデータベースから検索します。
LLM への入力:取得した外部情報を LLM の入力に組み込みます。
回答の生成:LLM が外部情報を参考に応答を生成します。
具体的には、「Google Cloud Rapid Evaluation APIで実現するRAGの精度評価の自動化 」で解説していますので、ご参照ください。
Rapid Evaluation API は、Google Cloud Vertex AI が提供するモデルの回答精度を評価するための API です。主な機能は以下の通りです。
スコアリング :モデルの回答に対して複数の指標で数値評価を行う
根拠説明 :各スコアに対する詳細な説明を提供する
本稿では、Rapid Evaluation API を用いて RAG の回答を評価し、その評価結果と改善提案をデータセットとして蓄積します。これらのデータを用いて LLM のファインチューニングを行い、回答精度の継続的な向上を目指します。
ポイント
自動評価と改善提案:Rapid Evaluation APIによる回答の自動評価と Gemini-1.5-Proを用いた回答の改善提案を組み合わせます。
データセットの自動生成:評価結果と改善提案をファインチューニング用のデータセットとして蓄積します。
自動トリガー:一定のデータが蓄積された段階で、ファインチューニングのプロセスを自動的に開始します。(※本検証では実装しませんが、Cloud Storageのレコード数が一定の閾値を満たした場合に、Cloud Funtionを用いてファインチューニングプロセスをトリガー仕組みを取り入れることが可能です。)
現在、多くの企業で導入されている一般的な RAG システムは、以下のようなフローで動作しています。
ユーザーからの質問を受け取る
ベクトルデータベースから関連するコンテキストを検索
LLM による回答生成
ユーザーに回答を提供
この一般的な RAG システムには、以下の課題があります。
回答の品質評価が手動で非効率:回答精度の評価は人間が行う必要があり、時間とコストがかかる
データの蓄積と活用が不十分:評価結果やユーザーからのフィードバックが体系的に蓄積されておらず、データドリブンな改善ができない
速度が出ない:質問のたびにベクトルDBに検索をかけてから生成を始めるので内容によっては生成に時間がかかる
中立的な表現になりがち:例えば企業のブランドトーンを反映させたRAGシステムを構築したい場合、PDFからベクトル検索をさせるだけでは望ましいスタイルでの回答へとチューニングさせることが難しい
これらの課題を解決するために、本稿では Rapid Evaluation API、Cloud Storage、Vertex AI ファインチューニング を組み合わせた新しいパイプラインを提案します。このパイプラインにより、回答の自動評価からモデルの改善までを一貫して行うことが可能になります。またファインチューニングの大きな課題であった、「データセットの準備」を自動化することによって、効率的に高品質なデータセットを自動生成させることが可能になります。
質問受付:ユーザーからの質問を受け取ります。
コンテキスト検索:ベクトルデータベースから関連するコンテキストを取得します。
回答生成:LLM が回答を生成します。
回答評価:Rapid Evaluation API を用いて、回答の品質を自動的に評価します。
データ蓄積:質問、改善提案を Cloud Storage に保存します
ファインチューニング:蓄積されたデータを用いて、定期的または条件に応じて ファインチューニング を自動的に実行します。
モデル更新:ファインチューニングされたモデルをデプロイし、システムに反映します。
自動評価の導入:
Rapid Evaluation API により、回答の品質評価を自動化します。これにより、評価にかかる時間と人的コストを大幅に削減できます。
継続的なモデル改善:
Google Cloud Storageにトレーニング用データセットを生成・配置し、ファインチューニングのプロセスを自動化することで、「RAGのソースデータ」を必要とせず、「ファインチューニング」のみで企業に特化した独自のLLMを構築することを目指します。
※本検証では、CloudStorageへの蓄積までを自動化対象としており、トリガーの自動化は含めません
本検証に使用した開発環境は以下の通りです。UIやソースコードなどは検証の本質ではないため、割愛します。また、Google Cloudの各コンポーネントはあらかじめデプロイされているものとし、リソースの作成やファインチューニングトリガー方法などは割愛いたします、
本新パイプラインのそれぞれのコンポーネントの役割と処理のイメージを示します。
ベクトルデータベースの準備:外部知識ソース(例:PDF、ドキュメント)をチャンク化し、ベクトルデータとして Chroma DB に保存
↓
RAG システムの構築:LangChain を用いて、ユーザーの質問に対して関連するコンテキストを検索し、LLM による回答を生成
↓
回答評価と改善提案:Rapid Evaluation API を用いて回答を評価し、評価結果とコンテキスト、質問を用いて、Gemini-1.5-Pro による改善提案を生成
↓
データセットの蓄積:質問、改善提案を JSONL 形式で保存し、ファインチューニング用のデータセットとして蓄積
↓
ファインチューニングプロセスの自動化(※本検証では割愛):一定数のデータが蓄積されたら、自動的にFTを開始する仕組みを実装
↓
モデルの更新とデプロイ(※本検証では割愛):ファインチューニングされたモデルを Vertex AI にデプロイし、Vertex AIのモデルをBlue Greenデプロイメントでトラフィックを自動的に切り替え
それぞれのパイプラインに必要なリソースのデプロイが完了している前提で、以下のテストケースを設定します。「Google Cloud Rapid Evaluation APIで実現するRAGの精度評価の自動化 」で使用した ソフトバンク流人的資本経営 を使用します。
「ソフトバンクの女性活躍推進の取り組みは?200文字で教えて。」
「ソフトバンクの健康経営における課題と対策を教えてください。200文字で教えて。」
「ソフトバンクアカデミアの特徴は?200文字で教えて。」
FTモデルの回答内容を比較しやすいように、上記1〜3の質問に対して、
通常のRAGの回答と評価結果
自動生成された改善提案の回答(トレーニングデータとして使用される)
を説明し、最後にGemini-1.5-Flashのファインチューニング済みモデルが同じ質問に対してどのような回答をするのかを説明します。
正しいですが、中立的な回答になっています。
評価指標 | Result名 | 説明 |
groundedness(根拠の有無) | 1: 根拠あり | コンテキスト情報に記載されている内容に基づいているため。 |
fulfillment(指示への適合度) | 3: ある程度指示に沿っている | 200字以内という指示に対して、回答は約130字と短くまとめられている点は評価できる。一方で、具体性に欠け、抽象的な表現が多く見られるため、改善の余地がある。 |
question_answering_quality(回答の質) | 3: 普通 | 女性活躍推進からDE&I推進へ段階的に取り組んでいるという全体像を示している点は評価できる。しかし、具体的な取り組みや成果については言及しておらず、情報量が不足しているため、改善が必要。 |
question_answering_relevance(関連性) | 5: 関連性が高い | 質問に対して、ソフトバンクの女性活躍推進の取り組みについて適切に回答しているため。 |
question_answering_helpfulness(有用性) | 3: 普通 | 女性活躍推進に取り組んでいるという情報は伝わるものの、具体的な内容や成果が不足しているため、ユーザーの理解を深めるには情報が不十分。より役立つ情報提供のため、改善の余地がある。 |
よりブランドトーンを反映させた改善後のトレーニング用データです。ファインチューニングモデルのトレーニングデータセットとしてjsonl形式で自動的にCloud Storageに蓄積されます。
正しいですが、やはり中立的な回答になっています。
評価スコアは以下の通りです。
評価指標 | Result名 | 説明 |
groundedness(根拠の有無) | 1: 根拠あり | コンテキスト情報に記載されている「管理職/リーダーへの 挑戦志向を持つ女性社員 を増やす」「健康経営マップ」「活躍機会の拡大」を課題と対策として挙げているため、根拠あり |
fulfillment(指示への適合度) | 3: ある程度指示に沿っている | 文字数は198字と指示通り。健康経営の課題と対策を具体的に記述しており、指示にほぼ沿っている。 |
question_answering_quality(回答の質) | 3: 普通 | 課題と対策は妥当だが、ソフトバンクの取り組みやビジョンを踏まえた内容に乏しい。 |
question_answering_relevance(関連性) | 4: ある程度関連性がある | 健康経営の課題と対策に関連する内容を記述しており、関連性は高い。 |
question_answering_helpfulness(有用性) | 3: 普通 | ソフトバンクの健康経営について概略は理解できる。 |
よりブランドトーンを反映させた改善後のトレーニング用データです。ファインチューニングモデルのトレーニングデータセットとしてjsonl形式でCloud Storageに蓄積されます。
正しいですが、中立的な回答になっています。
評価スコアは以下の通りです。
評価指標 | Result名 | 説明 |
groundedness(根拠の有無) | 1: 根拠あり | コンテキスト情報に記載されている内容に基づいているため。 |
fulfillment(指示への適合度) | 4: 指示にほぼ沿っている | 200字以内でまとめられており、ソフトバンクアカデミアの特徴について述べているため。 |
question_answering_quality(回答の質) | 4: 良い | ソフトバンクアカデミアの主要な特徴を簡潔にまとめ、分かりやすく説明されているため。 |
question_answering_relevance(関連性) | 5: 関連性が高い | 質問内容に対して的確に答えており、関連性は非常に高い。 |
question_answering_helpfulness(有用性) | 4: ある程度役に立つ | ソフトバンクアカデミアについて知りたい人が、概要を掴むのに役立つ情報を含んでいる。 |
よりブランドトーンを反映させた改善後のトレーニング用データです。ファインチューニングモデルのトレーニングデータセットとしてjsonl形式でCloud Storageに蓄積されます。
4.2でご覧いただいた通り、ユーザーの質問をトリガーに「評価の自動化」と「改善提案」のアウトプットイメージを掴んでいただいたと思います。
本稿で提案する新パイプラインでは上記プロセスの通り、利用者から質問を受け取るたびに、Rapid Evaluation APIによる自動評価と、自動評価の結果に対応する形で、自動的に改善後のRAGの回答を生成し、自動的にファインチューニング用のデータセットを生成することができます。
これにより、ファインチューニングの課題であったデータセットの準備(モデルに回答してほしい回答)を、ユーザーの質問を契機に準備しつつ、jsonl形式でCloud Storageに蓄積していくことが可能になります。また、改善提案はRapid Evalutationの評価結果を参照することで、改善するべき点(根拠の不足、ブランドトーンの不足、機微な表現方法の調整 etc…)を理解しながら生成することが可能になります。
なお、ファインチューニングでは100〜500レコード程度のトレーニングデータがあることが推奨されています。本検証においては、サンプルとして以下のようなトレーニングデータを蓄積しファインチューニング用に使用しています。なお、Gemini-1.5-Flash・Gemini-1.5-Proではjsonlの形式が1.0-proとは少し異なるためご注意ください。
[
{
"systemInstruction": {
"role": string,
"parts": [
{
"text": string
}
]
},
"contents": [
{
"role": string,
"parts": [
{
// Union field data can be only one of the following:
"text": string,
"fileData": {
"mimeType": string,
"fileUri": string
}
}
]
}
]
}
]
それでは最後に、トレーニング後のファインチューニングモデル(Gemini-1.5-Flash)の回答結果を1〜3の質問を投げて確認しましょう。
いかがでしょうか。自動生成されたファインチューニング用のデータセットは、ソフトバンクの「ITを活用し未来に向かって積極的に進む企業としてのポジティブなイメージ」を強調させるように生成していたことから、RAGの回答に加えてその企業らしさ(ブランドトーン)も反映させた、”主体的”な回答を行うモデルを開発することができました。評価結果に基づくデータセット追加要否の取捨選択ロジックやトレーニングの自動トリガーの仕組みを組み合わせることによって、継続的なモデルの改善を実現することも可能になるでしょう。
最後に、これまでの検証結果を得られた良い結果と改善点に分けて振り返ります。
RAGの検索プロセス(Retrieval)を介さないため、生成スピードが爆速になった
RAGの回答生成時に、並行してトレーニング用のデータセットも生成し、自動的にjsonlデータ形式で蓄積することによって、ファインチューニングの大きな課題であった、高品質なデータセットの準備が不必要になった
企業のドメイン情報とブランドトーンの反映を両立させることができた
ファインチューニング用のトレーニングデータの回答が長めだったのもあり、例えば「200文字以内で回答をせよとインストラクションを与えても、トレーニングデータの回答を優先してしまい、指示に従わない傾向があった
RAGのソースデータを必要せず回答ができる反面、引用情報(PDFソースの何ページ目etc…)を出せない
②の改善点については、ある程度想定済みの範囲ではあったものの、実運用を考えた場合、RAGの良さとファインチューニングの良さを両立させる点においては非常に重要であるため、今後の検証のテーマとします。具体的にはファインチューニングモデルに対するインストラクションの与え方や、ソースデータの引用(Citation)をどのように表示させるかなどに取り組みたいと思います。
本稿では、Rapid Evaluation API とファインチューニングを組み合わせることで、RAG システムの回答により主体性をもたせる(ブランドトーンを反映させる)新しいパイプラインを提案し、一定の効果と課題を確認することに成功しました。
また、これらのシステムの大部分はGoogle Cloud の Vertex AI を活用することで実現しています。Vertex AIをはじめとするGoogle Cloudの強力なPaaSサービスを活用することで、実現したいアーキテクチャをマネージドサービスかつ効率的に管理することが可能です。
ソフトバンクではGoogle Cloud全般に関する支援も行っておりますので、各種サービスのご活用もご検討いただけると幸いです。
Vertex AI Search を使って社内文書検索環境(RAG)を構築してみませんか?ソフトバンクのエンジニアが構築をサポートします。
Vertex AI DIY プランでは、以下の3つのことをご体験いただけます。詳細は、関連サービスにある「Vertex AI DIYプラン」をご確認ください。
Google サービスを支える、信頼性に富んだクラウドサービスです。お客さまのニーズにあわせて利用可能なコンピューティングサービスに始まり、データから価値を導き出す情報分析や、最先端の機械学習技術が搭載されています。
MSP(Managed Service Provider)サービスは、お客さまのパブリッククラウドの導入から運用までをトータルでご提供するマネージドサービスです。
条件に該当するページがございません