最終更新日:2024-07-23
社内での生成AI活用を推進することで、業務の効率化や高度化を実現したいと考えている方へ。RAG(検索拡張生成)の仕組みやできること、回答精度を高める方法などについて詳しく解説します。
RAGとは、独自の外部情報と大規模言語モデル(LLM)によるテキスト生成を組み合わせて、社内業務マニュアルや規程集といった独自情報に関する回答も可能にする技術を指します。RAGは「Retrieval-Augmented Generation」の略称で、「検索拡張生成」とも言われます。
OpenAIのGPTシリーズに代表される大規模言語モデル(LLM)は、Webに公開されている情報を用いて回答を生成します。一方、RAGは独自の「外部データベース」にWebにはない情報を追加で格納するため、格納した独自の情報を用いて回答を生成できるようになります。
回答生成に際して大規模言語モデル(LLM)に加えて、外部データベースを活用するのがRAGの仕組みです。
たとえば、チャットボットでRAGを利用する際は以下の順番で処理が行われます。
まず、外部データベースに独自情報を登録します。多くのRAGシステムはPDFやWordなどの文書ファイルに対応。これらの文書ファイルをRAGシステムにアップロードすると、RAGが動作できるように「チャンク化(データの塊ごとに保管)」「オーバーラップ(データの塊が一部重なるように調整)」といったデータ処理を行います。
プロンプト(質問)が入力されると、チャットボットはプロンプト処理技術を用いて、質問内容を適切に解釈します。
チャットボットで処理されたプロンプト情報をもとに、外部データベースから該当する情報を検索して抽出。ここで用いられる代表的な検索方法に、「ベクトル検索(数値で類似度を計算する方法)」や「全文検索(特定の文字列を含むものを抽出)」、それらを併用する「ハイブリッド検索」があります。
外部データベースから抽出した独自情報をLLMに送信し、LLMに回答の生成を依頼します。抽出した情報を表示させるだけでは、質問意図を把握しないままでの該当文の表示にとどまります。しかし、LLMを経由することで、質問意図を解釈したうえでの回答を生成できるようになります。
チャットボットはLLMとやり取りをして得た回答をユーザーに応答します。この際、RAGシステムによっては、参照ファイル名の表示や、参照箇所のテキスト表示が可能です。
具体的なRAG(検索拡張生成)の導入メリットとして、以下のようなものが挙げられます。
大規模言語モデル(LLM)はインターネットなどで公開されている情報をもとに回答を生成します。一方、RAGは社内文書や業務マニュアルなどをナレッジベースとして利用できるので、独自情報を使った回答生成が可能です。より専門性が高く、精度の高い情報提供が求められる場面において、RAGは役立ちます。
LLMでは、目的に応じたモデルの選択、プロンプトの工夫、ファインチューニング(再学習させる仕組み)などを行うことで回答精度を高められます。ただし、何が起因してこの結果になっているのかがわかりづらく、思うように精度を高められないことも。RAGにもそうした側面があるものの、不足情報や関連情報の追加・加工によって回答精度が上がりやすい性質があります。
RAGに格納する情報の利用範囲は社内に限定されるので、機密情報を外部にもらすことなく、安全に回答を生成できます。社内のサーバー上にRAGのデータベースを構築すれば、格納した情報が社内に出ることもありません。
RAG(検索拡張生成)を使って実際にできることについて解説していきます。
業務マニュアルや各種規程集などを読み込ませて、自社独自の社内FAQシステムを作成できます。また、想定される質問とその回答案を用意すれば、カスタマーサポートにも応用可能です。データベースから情報を検索し、回答を生成するため、従来のFAQシステムよりも柔軟かつ詳細な回答が提供できるようになります。
NotionやLarkといったグループウェアと連携して社内情報を検索したり、BoxやOne Driveなどのストレージから該当するファイルを検索したりと、社内ナレッジの検索に役立てられます。過去の会議内容や、成功した商談の詳細といった情報に素早くアクセスできるため、新たなアイディアの発展や、過去の取り組みをもとにした提案がしやすくなります。
関連する市場データやトレンド、消費者のフィードバック、ニュース記事、業界レポートなど、複数のデータソースから必要な情報を的確に検索し、要点をまとめて提供できます。たとえば、自社で収集した独自の市場データやアンケート結果などをRAGのデータベースに格納すれば、それらの情報を活かした市場データレポートや競合製品の評価などが作成可能に。
RAG(検索拡張生成)を活用するにあたって、最も気になるのは回答精度。どれだけの回答精度が実現できるのか、アスピック編集部は実際に検証環境を用意して検証してみました。
検証環境は、RAG機能を搭載したノーコードLLMアプリ開発プラットフォーム「Dify」で構築しました。LLMは「ChatGPT-4o」を選択。あわせて「Cohere」のリランクモデルも利用しました。
RAGに格納したのは、某独立行政法人が公開している職員給与規程、就業規則などの各種規程集です。当該規定集には、文章での記載に加えて、表を用いた説明もあります。
なお、今回はRAGのデータベースに格納したのは10ファイル程度。ファイル数によっても回答精度が変わり、一般的にファイル数が増えるほど適切なドキュメントを見つけるのが難しくなるため、回答精度が低下する傾向になります。ファイル数の問題に加えて、データの質も重要です。似たような内容や表現が多くないか、混同されるような記述がないか、といったデータ品質によっても精度が大きく変わります。
多くのデータ/ファイルを扱う必要がある場合は、たとえば、給与規定は「給与規程チャネル」、就業規則は「就業規則チャネル」といったようにファイルの格納場所を分けることで、回答精度の維持が見込めます。
100件の質問をしたところ、正答率は約70%でした。ただし、文書にどのように記載されているかによって回答精度の違いが見られます。文章が羅列されて書かれている内容や、簡単な表(2列の表)で記載されている内容には関しては70%以上の正答率がありましたが、複雑な表(3列以上の表)の場合は正答率が30%以下に下がってしまいました。
なお、回答精度が低い場合には技術的な改善のほかに、プロンプトの工夫やデータの加工といった対策が有効。こうした対策を行うことで、実際のRAG導入時にはより精度を高められる可能性があります。
検証結果の通り、RAG(検索拡張生成)を構築しても回答精度が必ずしも高いとは限りません。たとえば、「単語の意味が似ている」「回答する項目が多い」といった複雑でわかりにくい質問に関しては、うまく回答できなかったり、ハルシネーションを起こしてしまったりする場合が多々あります。
それでは、どのような方法を使えば回答精度を高めることができるのか、実際の検証結果をもとにご紹介します。
RAGの回答精度を高める方法はいくつもありますが、まずは取り組みやすい「プロンプトの改善」について解説します。プロンプトとは、生成AIに対してユーザーが行う質問や指示のこと。プロンプトが抽象的だったり、前提条件が抜けていたりすると、回答ミスが発生しやすくなります。
ミスを防ぎ、回答をより正確にするために効果的な方法は、以下の4点を可能な限り詳細に伝えることです。
1.役割 | AIに求める役割を明確にする。(例:優秀なチャットボット、プロの問い合わせ担当者) |
---|---|
2.依頼事項 | どんなことをして欲しいか具体的に指示をする。(例:ユーザーが特定のキーワードや質問を入力した場合、それに関連する内容を的確でわかりやすいテキスト形式で提供してください) |
3.回答例 | 求める回答の仕方、回答例を事前に与える。(例:Q.ハルシネーションとはなんですか? A. AIが架空の情報や誤った情報を回答してしまうこと) |
4.ルール | 生成AIに守って欲しいルールを伝える。(例:必ずRAGに格納された情報をベースに回答してください) |
次に解説する方法は検索手法とリランク処理についてです。
検索手法とは、RAGの中からユーザーの質問に関係するチャンク(データの塊)を抜き出す際に利用される検索の種類のことで、主に3つの検索手法があります。
全文検索 | 質問のキーワードが含まれている文章を、すべての文書から探し出す検索手法。すべての文書が検索対象となるのがメリットです。また意味が明確でない固有名詞を含むキーワードを見分けることが可能です。 |
---|---|
ベクトル検索 | ユーザーの質問をベクトル化して、類似度が高い文章を探す検索手法。質問をベクトル化することで数学的な計算に基づいた検索が可能になるため、高速で実行できるというメリットがあります。 |
ハイブリット検索 | 全文検索とベクトル検索を組み合わせた検索手法。それぞれの検索手法の良い部分は残しつつ苦手な部分をそれぞれが補えるため、より回答精度を上げられます。 |
適切な検索手法を選択・実装することで、関連性の高い情報を効果的に抽出できるようになるため、回答精度の向上につながります。
リランク処理とは、RAGの情報から検索手法を使ってヒットしたチャンクを、より類似度が高いスコア順に並び替える手法です。
リランク処理を行うことで、チャンクを適切な順番でランキング付けできるようになるため、より回答精度を高められます。使われることが多いのが、Cohere社が提供しているリランクモデル。検証の際も同社のリランクモデルを使うことで、より精度の高い回答を出力できました。
上記の2つの手法を試しても、回答精度が改善できない場合によく見られるのが、複雑な表や一度に挙げる項目が多すぎるというケース。その場合には、RAGに登録したデータの加工という手法を試してみてください。
最新の優秀なLLMでも、複雑な表については理解できない場合が多々あります。アスピック編集部の検証でも、2列までの簡易的な表に関する情報は回答できましたが、3〜4列の表や、セルが結合されている表に関しては、うまく回答することができませんでした。
その場合の対策として、3列以上の複雑な表を2列の簡易的な表に変換するのが有効です。結果、ハルシネーションを起こすなどをしていた質問に、問題なく回答できるようになりました。
ここまでRAG(検索拡張生成)について様々な切り口から解説しました。最後に、実際にRAGを使うための主な方法を4つご紹介します。
RAG対応の法人向けChatGPTサービスを利用するという方法です。代表例としては、株式会社クラフター社の「Crew」や、株式会社エクサウィザーズの「exaBase 生成AI」などがあります。
これらのサービスを利用するメリットは、独自にRAG環境を構築する手間をかけず、SaaSとして利用できる点です。どれも利用スタート時点からプロンプトがテンプレート化されているため、プロンプトを準備する負担も軽減されます。
加えて、「利用情報をLLMの学習データとして利用しない」「データ処理はすべて日本国内で完結」という仕様になっていることが多いため、社内情報を読み込ませる場合でも、セキュリティ面やコンプライアンス面で安心です。
ノーコードLLMアプリ開発プラットフォーム使って、自社で開発を行うという方法。代表例として「Dify」や「Coze」などがあります。GUI操作のみで非エンジニアでもRAG環境を構築できるうえ、「簡単にLLMのモデルを変できる」「検索手法やリランク処理・埋込モデルなどを自由にカスタマイズできる」といったメリットも。
また、チャットボットの処理方法(チャットフロー)に関しても、パーツを組み合わせるだけでイメージ通りに作成可能です。たとえば「Dify」には入力された質問の内容に応じて、AIが質問を振り分けられる「質問分類器機能」が搭載されています。この機能を使って、質問内容に該当する資料をRAGから読み取り、LLMで回答を生成させる、といったワークフローも簡単に設定できます。
Azure AIサービスやAmazon Bedrockといったサービスには、RAG以外にも、生成AI関連サービスを効率的に開発するための幅広い機能が用意されています。メリットは、LLMノーコード開発ツールに比べて、独自のカスタマイズがしやすいこと。ただし、コーディングやインフラ設定の知見が必要になりますので、エンジニア向けの方法です。
RAG環境を構築するにあたって、「手間をかけないためにも依頼して進めたい」、「導入後の検証作業や社内浸透が大変そうだから伴走してほしい」という場合は、アウトソーシングがおすすめです。
たとえば「AI Going 生成AI環境構築サービス」では、生成AIを使った業務効率化の検討や、RAG対応チャットボットの構築、独自ノウハウや各種チューニング手法を用いた運用開始後の回答精度の改善までサポートしています。1回15万円~、短期間で構築可能です。
RAG(検索拡張生成)を導入することで、自社の業務マニュアルといった独自情報をもとに、質問への回答ができるようになるため、社内ヘルプデスクの負荷削減、必要な情報へのスムーズなアクセスが可能に。また、通常のLLMよりも回答精度を改善しやすい、格納した情報を安全に扱えるといったメリットも見込めます。
RAGの導入方法は、主に以下の4つが挙げられます。
それぞれメリット・デメリットがありますが、「自社の負担を最低限に抑えたい」「独自性の高い要件をクリアしたい」といった場合には、「4.RAG環境構築を依頼する」がおすすめです。業務の効率化・高度化を大きく進めるためにも、ぜひ利用を検討してみてください。
生成AI関連サービス
生成AIの利用環境を最短1週間で構築。RAGを用いた社内問い合わせ自動化にも対応。初期構築から回答精度の改善までご支援。...
利用規約とプライバシーポリシーに同意の上、資料をダウンロードしてください。
アスピックご利用のメールアドレスを入力ください。
パスワード再発行手続きのメールをお送りします。
サービスの導入検討状況を教えてください。
ご登録いただいているメールアドレスにダウンロードURLをお送りしています。ご確認ください。