検索拡張生成とは

URL をコピー

検索拡張生成 (RAG) は、大規模言語モデル (LLM) を外部リソースにリンクさせて生成 AI アプリケーションからの回答精度を高める手法です。 

Red Hat AI の詳細

RAG により、LLM 内に存在するデータを任意の外部知識ソース (データリポジトリ、テキストのコレクション、既存のドキュメントなど) で補完することができます。これらのリソースはセグメント化され、ベクトルデータベースでインデックス付けされ、より正確な回答を提供するための参考資料として使用されます。

RAG は、任意の信頼できるソース (複数の場合もある) から特定のリアルタイム情報を取得するように LLM に指示するので有用です。モデルのトレーニングやファインチューニングにコストをかけなくても、カスタムエクスペリエンスが得られるため、費用を節約できます。また、LLM にクエリを実行する際に、(長い文書ではなく) 最も関連性の高い情報のみを送信するため、リソースを節約することもできます。

生成 AI の詳細 

Red Hat のリソース

LLM は、機械学習と自然言語処理 (NLP) の技術を使用して人間の言語を理解し、生成します。LLM は通信とデータ処理において非常に役立つものですが、欠点もあります。

  • LLM は一般的に利用できるデータを使用してトレーニングされますが、組織の内部データセットなど、参照させたい特定の情報が含まれていない場合があります。
  • LLM の知識には期限があります。つまり、LLM のトレーニングに使用された情報はアップデートを継続的に収集しません。結果としてそのソース資料が古くなり、関連性が失われることがあります。
  • LLM は回答を生成するために誤情報や古い情報を提示することがあります。これは「ハルシネーション」とも呼ばれます。

RAG アーキテクチャを LLM ベースの質問応答システムに組み込むと、LLM と任意の追加の知識ソースとの間で情報をやり取りできるようになります。LLM は内部知識を相互参照して補足できるため、クエリを作成したユーザーに返される出力の信頼性と精度が向上します。

大規模言語モデルの詳細 

RAG アーキテクチャに組み込まれた検索メカニズムにより、LLM の一般的なトレーニング以外にも追加のデータソースを利用することができます。RAG を介して LLM が外部の検証可能な一連の事実に基づくようにすることで、以下のような有益な目標をサポートできます。

精度
RAG は LLM に引用できるソースを提供するため、ユーザーはその主張を検証できます。また、質問が知識の範囲外である場合には「わかりません」と答えるように、RAG アーキテクチャを設計することもできます。概して、RAG を使用すると、誤った情報や誤解を招く情報が LLM から出力として提示されにくくなるため、ユーザーの信頼度が高まる可能性があります。

費用対効果
LLM の再トレーニングとファインチューニングには、ドメイン固有の情報を使用して基盤モデル (チャットボットなどを構築するための) をゼロから作成するのと同様に、コストと時間がかかります。RAG を使用すると、ドキュメントやファイルをアップロードするだけで、LLM への新しいデータの導入や情報ソースの交換または更新を行うことができます。

RAG は推論コストも削減できます。LLM クエリのコストは高く、ローカルモデルを実行する場合は独自のハードウェアが必要になり、アプリケーション・プログラミング・インタフェース (API) を通じて外部サービスを利用する場合は使った分だけ料金がかかります。RAG は、参照ドキュメント全体を一度に LLM に送信するのではなく、その資料の最も関連性の高いチャンクのみを送信できるため、クエリのサイズが削減され、効率が向上します。

開発者の制御
RAG では、従来のファインチューニング手法よりも利用しやすく簡単な方法で、フィードバックの取得、トラブルシューティング、アプリケーション修正を行うことができます。開発者にとって、RAG アーキテクチャの最大のメリットは、ドメイン固有の最新情報のストリームを利用できることです。

データ主権とプライバシー
LLM はトレーニングデータから情報を漏らす場合があるため、機密情報を使用した LLM ツールのファインチューニングには、これまではリスクが伴いました。RAG は、機密データをオンプレミスで保持しながらローカル LLM や信頼できる外部 LLM への情報提供に使用できるようにすることで、こうしたプライバシーの懸念に対する解決策をもたらします。RAG アーキテクチャの設定によって、機密情報の取得をさまざまな認可レベルに制限することもできます。つまり、セキュリティ・クリアランス・レベルに基づいて特定のユーザーが特定の情報にアクセスすることができます。 

RAG アーキテクチャは、外部ソースからデータを取得し、それを LLM のコンテキストに処理し、融合したソースに基づいて回答を生成することによって機能します。このプロセスには、データの準備、検索、生成という 3 つの主要な段階があります。

ステップ 1:データの準備 (検索用)

  • ドキュメントの調達とロード:LLM と共有するソースドキュメントを特定して取得し、LLM が理解できる形式 (テキストファイル、データベーステーブル、PDF など) であることを確認します。ソース形式に関係なく、各ドキュメントをベクトルデータベースに埋め込む前にテキストファイルに変換する必要があります。このプロセスは ETL ステージ (抽出、変換、ロード) とも呼ばれます。ETL は生データをクリーニングおよび整理して、保存、分析、機械学習に備えます。
     
  • 変換:「テキスト分割」または「チャンク化」により、ドキュメントを検索用に準備します。つまり、更新されたドキュメントを解析し、個別の特性に基づいて関連する「チャンク」にカタログ化します。たとえば、段落ごとにフォーマットされたドキュメントの方が、表や図で構造化されたドキュメントよりも、モデルにとって検索と取得が容易な場合があります。

    チャンク化は、セマンティクス、文、トークン、フォーマット、HTML 文字、コードタイプなどの要素に基づいて行うことができます。多くのオープンソース・フレームワークがドキュメントの取り込みのプロセスを支援しています。LlamaIndexLangChain はその一部です。
     

  • 埋め込み:埋め込みでは、特殊な機械学習モデル (ベクトル埋め込みモデル) を使用してデータを数値ベクトルに変換し、数学的演算を適用してデータ間の類似点と相違点を評価できるようにします。埋め込みを使用すると、テキスト (または画像) を、関連性のない詳細情報を破棄しながらコンテンツの中心的な意味を捉えるベクトルに変換できます。埋め込みのプロセスでは、データのチャンクに数値 ([1.2, -0.9, 0.3] など) を割り当て、ベクトルデータベースと呼ばれるより大きなシステム内でインデックス付けを行うことがあります。

    ベクトルデータベース内で、この数値は RAG アーキテクチャがコンテンツのチャンク間の関連性を示し、そのデータを整理して検索を最適化するために役立ちます。このインデックス付けの目的は、類似の概念が隣接する座標に格納されるようにベクトルを構造化することです。たとえば、「コーヒー」と「お茶」は近くに配置されるでしょう。「温かい飲み物」もそうでしょう。「携帯電話」や「テレビ」など、関連性のない概念は遠く離れたところに配置されるでしょう。2 つのベクトル点の間の距離または近さによって、モデルはどの情報を取得してユーザークエリに対する出力に含めるかを決定します。
     

  • 保存:複数のソース (任意の外部ドキュメントと LLM) から結合されたデータは、中央リポジトリに保存されます。
     

ステップ 2:検索

  • データがベクトルデータベースにカタログ化されると、アルゴリズムがユーザーのプロンプトやクエリに関連する情報の断片を検索して取得します。LangChain のようなフレームワークは、セマンティクス、メタデータ、親ドキュメントなどのデータの類似性に基づく検索など、さまざまな検索アルゴリズムをサポートしています。

    オープンドメインのコンシューマー設定では、情報ソースの API を介してアクセスされる、インターネット上のインデックス付きドキュメントから情報が取得されます。情報を非公開にして外部ソースから保護する必要があるクローズドドメインのエンタープライズ設定では、RAG アーキテクチャを介した取得をローカルで行うことでセキュリティを強化できます。

    そして、取得したデータがプロンプトに挿入され、LLM に送信されて処理されます。
     

ステップ 3:生成

  • 出力:ユーザーに回答が提示されます。RAG が意図したとおりに機能する場合、ユーザーは提供された知識ソースに基づく正確な答えを得ます。

Red Hat コンサルティングを活用して AI フレームワークを使い始める 

機械学習モデルを構築する場合、出力の品質は入力したデータによって決まるため、高品質のソースドキュメントを見つけることが重要です。歪曲した結果や偏った結果を生み出すシステムは、AI を使用するあらゆる組織にとって重大な懸念事項です。したがって、ソースドキュメントに偏った情報、つまり、特権のあるグループを系統的に有利にし、特権のないグループを系統的に不利にするバイアスが含まれないよう注意を払うことが、出力のバイアスを軽減するために不可欠です。

RAG アーキテクチャのデータを取得する場合は、ソースドキュメントに含めるデータが正確に引用されていること、最新のものであることを確認してください。さらに、人間の専門家は、モデルをより広範な利用者に対して展開する前に出力に関する評価が行われるよう支援し、モデルがプロダクション用にデプロイされた後も結果の品質を継続的に評価する必要があります。

データトレーニング手法と RAG アーキテクチャの違いを理解すると、ニーズに応じてどの AI リソースをデプロイするべきかについての戦略的な意思決定に役立ちます。また、一度に複数の手法を使用することも可能です。データを扱うための一般的な手法とプロセスをいくつかご紹介し、RAG との違いを説明します。

RAG とプロンプトエンジニアリング
プロンプトエンジニアリングは、LLM を操作するための最も基本的で、最も技術的知識を必要としない方法です。プロンプトエンジニアリングでは、ユーザーがクエリを作成したときに望ましい出力を生成するためにモデルが従うべき一連の命令を記述する必要があります。RAG と比較した場合、プロンプトエンジニアリングは必要なデータが少なく (モデルの事前トレーニングに使ったもののみを使用)、低コスト (既存のツールとモデルのみを使用) ですが、最新情報や変化する情報に基づいて出力を作成することはできません。さらに、出力の品質はプロンプトの表現に依存するため、応答が一貫しない場合があります。

多くの詳細情報を必要としない一般的なトピックに関する情報を抽出するための、ユーザーにとって使いやすく費用対効果の高い方法を探している場合は、RAG ではなくプロンプトエンジニアリングの使用を選択することもできます。

RAG とセマンティック検索
セマンティクスとは、単語の意味に関する研究のことです。セマンティック検索は、検索クエリの背後にある意図と文脈を考慮した方法でデータを解析するための技術です。

セマンティック検索は NLP と機械学習を使用してクエリを解読し、単純なキーワード一致よりも有意義で正確な応答を提供するために使用できるデータを見つけます。つまり、セマンティック検索によって、ユーザーがクエリとして入力した内容と、結果の生成に使用されるデータとの間のギャップを解消することができます。

たとえば「夢の休暇」に関するクエリを入力した場合、セマンティック検索によって、モデルはユーザーが「理想的な」休暇に関する情報を必要としている可能性が高いことを理解できます。夢についての回答ではなく、ビーチで休暇を過ごすためのホリデーパッケージなど、よりユーザーの意図に則した回答を提供します。

セマンティック検索は RAG の要素であり、RAG はベクトルデータベースの取得のステップでセマンティック検索を使用して、文脈的に正確で最新の結果を生成します。

RAG と事前トレーニング
事前トレーニングは、LLM が大規模データセットから学習することで言語を幅広く把握できるようトレーニングする最初のフェーズです。人間の脳が物事を学習するときに神経経路を構築するのと同様に、事前トレーニングでは、データを使用してトレーニングされる LLM 内にニューラルネットワークを構築します。

RAG と比較した場合、LLM の事前トレーニングにはより多くのコストと時間がかかり、より多くの計算リソース (数千もの GPU など) が必要になることがあります。広範なデータセット (トレーニングされるモデルに大きな影響を与えるのに十分な量) にアクセスでき、LLM に特定のトピックや概念の基礎を理解させたい場合は、RAG ではなく事前トレーニングの使用を選択することもできます。

RAG とファインチューニング
RAG アーキテクチャが LLM が認識すべきことを定義するのに対し、ファインチューニングはモデルがどのように動作すべきかを定義します。ファインチューニングは、事前トレーニング済みの LLM を取得し、より小規模でよりターゲットを絞ったデータセットを使用してさらにトレーニングするプロセスです。モデルは、経時的に変化しない一般的なパターンを学習できます。

表面上は、RAG とファインチューニングは似ているように見えますが、違いがあります。たとえば、ファインチューニングではモデルの作成に大量のデータと相当な量の計算リソースが必要ですが、RAG は 1 つのドキュメントから情報を取得でき、必要な計算リソースははるかに少なくなります。さらに、RAG がハルシネーションを効果的に軽減することは実証済みですが、ハルシネーションを軽減するために LLM をファインチューニングするのにはかなりの時間がかかり、そのプロセスも困難です。

多くの場合、モデルにとってはファインチューニングと RAG アーキテクチャの併用が有効です。しかし、大量のデータとリソースにアクセスでき、そのデータが比較的変化しない場合、または、RAG が専門とする質問と回答の形式よりもさらにカスタマイズされた分析を必要とする特殊なタスクに取り組んでいる場合は、RAG ではなくファインチューニングの使用を選択することもできます。 

RAG とファインチューニングの比較の詳細

RAG アーキテクチャには、多くの潜在的なユースケースがあります。最も一般的なユースケースの一部を以下に示します。

  • カスタマーサービス:特定のドキュメントが提供する洞察に基づいて顧客のクエリに応答するようにチャットボットをプログラミングすることで、解決時間を短縮し、より効果的なカスタマーサポートシステムを実現できます。

  • 洞察の生成:RAG は、既存のドキュメントからの学習を支援します。RAG アーキテクチャを使用して、年次報告書、マーケティング文書、ソーシャルメディアのコメント、カスタマーレビュー、アンケート結果、研究文書などの資料に LLM をリンクさせ、リソースをより深く理解するために役立つ回答を見つけることができます。RAG を使用すると、ソーシャルメディアフィード、Web サイトなど、頻繁に更新されるソースのライブデータソースに直接接続できるため、有用な回答をリアルタイムで生成できます。

  • 医療情報システム:RAG アーキテクチャは、医療情報やアドバイスを提供するシステムを改善できます。RAG によって個人の病歴、予約スケジュールサービス、最新の医学研究やガイドラインなどの要素を確認できるため、患者を彼らが必要とするサポートやサービスにつなげることができます。

Red Hat® AI は、Red Hat のお客様の信頼を得ているソリューションに基づいて構築された AI 製品のポートフォリオです。これを基盤として、当社製品の信頼性、柔軟性、拡張性が維持されます。

Red Hat AI のサポートによって以下のことが可能になります。

  • AI を迅速に導入してイノベーションを実現する
  • AI ソリューションの提供における複雑さを解消できる
  • どこにでもデプロイできる

Red Hat AI の詳細 

開発者のコラボレーションと管理

Red Hat AI ソリューションを使用すると、基盤となるワークロード・インフラストラクチャが提供され、RAG アーキテクチャを LLMOps プロセスに実装できます。

特に、Red Hat® OpenShift® AI は、AI 対応アプリケーションを構築、デプロイ、管理するツールを備えた柔軟でスケーラブルな MLOps プラットフォームです。ベクトルデータベースのサポート、エンベディングの作成、LLM へのクエリ実行、結果の生成に必要な取得メカニズムの使用のための基盤となるインフラストラクチャを提供します。

Red Hat AI は、LLM を改善するための追加のモデルアライメント・メカニズムも提供します。このソリューションは InstructLab と呼ばれており、LLM の機能を拡張するための、オープンソース・コミュニティが主導するアプローチを導入します。

サポート付きの継続的なコラボレーションにより、エンタープライズ・ユースケースに合わせてすばやく簡単に AI モデルアプリケーションをカスタマイズできます。

Red Hat OpenShift AI の詳細 

RAG アプリケーションを作成する

Red Hat OpenShift AI は、データサイエンス・プロジェクトを構築し、AI 対応アプリケーションを提供するためのプラットフォームです。独自の参照ドキュメントから AI の回答を取得する手法の 1 つである検索拡張生成 (RAG) をサポートするために必要なすべてのツールを統合できます。OpenShift AI を NVIDIA AI Enterprise に接続すると、大規模言語モデル (LLM) を試して、アプリケーションに最適なモデルを見つけることができます。

ドキュメントのパイプラインを構築する

RAG を利用するには、まずドキュメントをベクトルデータベースに取り込む必要があります。サンプルアプリでは、一連の製品ドキュメントを Redis データベースに埋め込んでいます。これらのドキュメントは頻繁に変更されるため、定期的に実行するこのプロセス用のパイプラインを作成すると、常に最新バージョンのドキュメントを入手できます。

LLM カタログを閲覧する

NVIDIA AI Enterprise ではさまざまな LLM のカタログにアクセスできるため、さまざまな選択肢を試して、最良の結果が得られるモデルを選択できます。モデルは NVIDIA API カタログでホストされています。API トークンを設定したら、OpenShift AI から直接 NVIDIA NIM モデル提供プラットフォームを使用してモデルをデプロイできます。

適切なモデルを選択する

さまざまな LLM をテストする際、ユーザーは生成される応答をそれぞれ評価することができます。Grafana モニタリング・ダッシュボードを設定して、各モデルの評価だけでなく、レイテンシーと応答時間も比較できます。そのデータを使用して、プロダクションで使用する最適な LLM を選択できます。


 

An architecture diagram shows an application built using Red Hat OpenShift AI and NVIDIA AI Enterprise. Components include OpenShift GitOps for connecting to GitHub and handling DevOps interactions, Grafana for monitoring, OpenShift AI for data science, Redis as a vector database, and Quay as an image registry. These components all flow to the app frontend and backend. These components are built on Red Hat OpenShift AI, with an integration with ai.nvidia.com.

 

PDF をダウンロード

ハブ

Red Hat 公式ブログ

Red Hat のお客様、パートナー、およびコミュニティのエコシステムに関する最新の情報を入手しましょう。

すべての Red Hat 製品のトライアル

Red Hat の無料トライアルは、Red Hat 製品をハンズオンでお試しいただける無料体験版です。認定の取得に向けた準備をしたり、製品が組織に適しているかどうかを評価したりするのに役立ちます。

関連情報

予測 AI と生成 AI

生成 AI と予測 AI には大きな違いがあり、それぞれにユースケースがあります。AI が進化する中、これらを異なる種類として区別することは、それぞれの能力を明確にする上で役立ちます。

エージェント型 AI とは

エージェント型 AI は、人間の介入を最小限に抑えながらデータやツールと対話するように設計されたソフトウェアシステムです。

Granite モデルとは

Granite は、IBM がエンタープライズ・アプリケーション向けに作成した LLM シリーズです。Granite 基盤モデルは、言語とコードを使用する生成 AI のユースケースをサポートできます。

AI/MLリソース