😺

RAGの概要

2025/01/29に公開

RAGの概要をこの記事でまとめてみたいと思います。

RAGの詳細仕組みについては、様々なテーマを分けてまた勉強して整理してみたいと思いますが、まず頭の中で地図を作るように、RAGの概要を自分なりに整理したいと思います。

まずなぜ生成AI文脈でRAGが注目されていますでしょうか?

例えばChat-GPTのような生成AIを利用する際、明らかに間違っている答えや、質問と関係ない答えが返される経験があったかもしれません。これは実はLLMのチャレンジの一つです。

LLMのトレーニングに大量なデータが使われています。豊富なデータセットが使われても、常に最新のデータでトレーニングする、或いは専門的な領域のデータでトレーニングすることが難しいです。求められている回答に必要な情報がないため、LLMが間違った答えをしてしまうことがあります。2015年からタイムスリップで2024年に来たものすごくスマートな人に、「アメリカの大統領は誰ですか」と聞いたら「オバマ」と答えてくれると同じのようなことです。

その時、このスマートな人に、近年のニュースを見せたら、自分がタイムスリップしてしまって、今のアメリカ大統領はバイデンであることに気づくと思います。RAGがまさにこのようなことをやっています。LLMに質問と関連する参考情報を渡すことによって、回答精度を向上させることが期待できます。

それでは、RAGとは何でしょうか?

RAGの英文はRetrieval-Augmented Generationです。今現在まだ正式な日本語名称がなくて、英訳のままで検索拡張生成と呼ばれていることが多いようです。

Retrievalは検索という意味です。即ち、RAGは検索仕組みと関わっている技術です。ユーザーから質問が来たら、RAGは、質問と関連する情報を大量の参考情報から検索し、そしてLLMに渡して、より正確な回答をLLMからもらう技術です。(参考1

ここで一つの疑問が生じるかもしれません。LLMの回答精度を向上させるには、RAG以外の手法がないでしょうか?もちろんあります。RAG以外に、プロンプトエンジニアリングやLLMに対してのFine-Tuning、Pretrainingの手法があります。これらのRAG以外の手法に関しては、また別の記事でまとめたいと思います。(参考2

RAGはどのように動いていますでしょうか?

一つの例を使って、RAGの利用イメージを示したいと思います。

例えば、ある大型施設が生成AI駆動のチャットボードサービスを提供しています。使っている生成AIのLLMは汎用LLMで、特にこの施設の情報でトレーニングされているLLMではありません。

あるユーザーがチャットボードに「パーキングエリアがありますか?」という質問をすることにします。
LLMのトレーニングデータセットに、この施策の情報がないため、正確な答えが分からないです。でもRAGがありますので大丈夫です。

RAGの仕組みで、この大型施設の参考情報データベースから、パーキングエリアに関連する情報を検索しに行きます。この参考情報データベースは事前に用意する必要があります。後ほどまた述べますが、このデータベースがベクトルデータベースであることが多いです。そして、このデータベースに様々な参考情報が格納されています。その中から、パーキングエリアに関連している情報を検索することがRAGの仕事です。関連情報を検索できたら、ユーザーからの質問と一緒に、関連情報をプロンプトに組み込んで、LLMに渡します。そうすると、LLMがトレーニングされた能力に加えて、この施設の情報を使って、適切な回答をユーザーに返すことができるようになります。(参考3

上記の流れに、一つ非常に重要なポイントがあります。RAGが、ユーザーの質問を読み取って、大量の参考情報から、パーキングエリアに関する情報を検索するところです。RAGがどのように質問を理解した上で検索しているかを含めて、RAGのより詳細な仕組みを見ていきたいと思います。

RAGの仕組みについて。

以下の図は、非常に分かりやすくてそしてシンプルにRAGの仕組みを表現しています。(参考4

まずは参考情報データを準備するパーツです。

様々な参考情報、例えば構造化されているレコード形式のデータや、或いはニュース、Websiteページのような非構造化の文章データを準備します。必要に応じて情報の選別もします。そして、RAGが検索できるように、これらのデータをチャンクして、エンべディングします。

ここに「チャンク」と「エンべディング」というワードがありました。それぞれは掘れる掘るほど奥深いものです。理解しやすいためざっくり言いますと、「エンべディング」はパソコンが理解、そして処理できるようにデータを数値化する仕組みです。但し、文章などのデータが長いと数値化しにくいため、文章をある方法で切った上でエンべディングする必要があります。この長い文章を切ることは「チャンク」と言います。

参考情報データを準備できたら、次は質問に基づいて、関連情報を大量の参考情報データベースから検索して、LLMに渡すパーツです。

ユーザーから質問が来ると、まず質問をエンべディングします。なぜ質問をエンべディングするかというと、RAGが大量の参考情報データベースから、どの情報が質問と関連するかを検索するためです。ここは、RAGの検索仕組みと関連しているところで、後ほども述べたいと思います。RAGが関連情報を検索できたら、関連情報をプロンプトに組み込んで、LLMに渡します。

以上は、非常にシンプルなRAG仕組みになります。

RAGの検索仕組みについて。

RAGはどのように、大量の参考情報データベースから、ユーザーの質問と関連する情報を検索できますでしょうか?なぜ質問をエンベーディングする必要がありますでしょうか?

これを理解するには、検索の技術を登場させる必要があります。

今までよく使われている検索の技術としては、キーワードサーチという技術があります。キーワードサーチのコンセプトは非常にシンプルです。例えば「焼き鳥は何ですか?」を検索すると、「焼き鳥」のようなキーワードが含まれている内容を返す仕組みです。検索エンジンによく使われている検索技術です。もちろん、コンセプトは簡単ですが、技術を深堀すると、また奥深いものです。

キーワードサーチは伝統検索技術の代表ですが、文章の意味を理解した上で検索する、いわゆるセマンティックサーチを実現するためのベクトルサーチという検索技術が近年注目されています。

ベクトルサーチはどのようなイメージでしょうか?

ベクトルサーチをするには、データをまずベクトル化させます。ベクトル化というのは、データを多次元のベクトル空間の中で数字で表現することです。例えば、以下の図が示しているように、猫のイメージデータを「0.21, 1.11,3.29,…」のような数値で各座標での位置を表します。すべての座標が合わせて多次元のベクトル空間になります。このベクトル空間の中で、各座標での位置を合わせて、猫のイメージデータの位置を多次元で表すイメージです。

ベクトル化のイメージが分かったら、ベクトルサーチのイメージを見てみましょう。例えばKittenというものを検索します。Kittenも「0.19, 1.02,…」のように、ベクトル空間の中での位置を表すため、Kittenのイメージデータをベクトル化させます。そうすると、ベクトル空間の中で、Kittenと位置が一番近いものは何ですかと探すと、猫のイメージを特定できました。これはベクトルサーチのイメージです(参考5)。どのように位置の近さを判断しているかの疑問があるかもしれませんが、これはまた今後深掘りをしたいと思います。

キーワードサーチとベクトルサーチのイメージが紹介されましたが、RAGはどの検索技術を使っているかどういうと、結局RAGの実装によります。そして、どちらだけを使うより、ハイブリットでRAGを実装した方はもっと効果が良いという説もあります。

以上は簡単なRAG検索仕組みの紹介になります。

RAGの検索仕組みに、ベクトルサーチという検索技術が使われています。そして、ベクトルサーチをするために、検索対象と検索元をベクトル化させる必要があります。このベクトル化のプロセスは実は上のセクションで紹介した「エンべディング」という工程です。ベクトル化されたデータの保存が必要で、これもこの前ベクトルデータベースが話題になっている背景の一つです。

ここもまた、「エンべディング」がどのように行われているかの疑問があるかもしれません。一言簡単にいうと、AIモデルで行われているという答えですが、ここもまた今後深堀をしたいと思います。もう一つ今後深掘りをしたいこととしては、「エンべディング」をするための「チャンク」という工程です。チャンクも様々な戦略がありまして、データの特性に合わせて適切なチャンク戦略を選択するのは、RAGの効果には非常に重要なことだと言われています。

サマリー

この記事の中で、以下のことを紹介しました:

  • LLMの回答精度を向上させる技術として、RAGが注目されています。
  • RAGが大量情報から、質問と関連する情報を検索し、LLMに渡す仕組みです。
  • RAGの検索仕組みに、従来のキーワードサーチ技術に加え、セマンティックサーチを実現するためのベクトルサーチという技術も使われています。
  • RAG工程の一環として、チャンクとエンべディングがあります。
  • ベクトルサーチの仕組み、エンべディングの仕組み、そしてチャンクの仕組みについては今後もっと深掘りをしたいと思います。
  • そして、RAG以外に、LLMの回答精度を向上させる手法についても、今後もっと深掘りをしたいと思います。

##参考記事:

参考1:https://www.nri.com/jp/knowledge/glossary/lst/alphabet/rag

参考2:https://www.databricks.com/glossary/retrieval-augmented-generation-rag

参考3:https://www.youtube.com/watch?v=P8tOjiYEFqU

参考4:https://gradientflow.com/techniques-challenges-and-future-of-augmented-language-models/

参考5:https://odsc.medium.com/a-gentle-introduction-to-vector-search-3c0511bc6771

Discussion