RAGとは
LLMは基本的にすでに学習したデータは持っていますが、リリース以降のデータは持っていません。
当然、自分が手元に持っているドキュメントなど知る由もなく、そうしたドキュメントに関する知識を前提に回答をすることはできません。
しかし、実際にAIを利用する場面では社内や自分が持っているドキュメントをAIに読み込ませて、その資料も検索対象として回答してもらうことが重要になります。
そこで登場するのがRAG(Retrieval-Augmented Generation)になります。RAGはLLMによるテキスト生成に、外部情報の検索を組み合わせることで、回答精度を向上させる技術です。
ドキュメントを読み込む際
ドキュメントといっても、Webページもあれば、word, excel, power pointといったファイル、C#, Pythonといったコード、書籍など様々です。
たとえばその中でwordのドキュメントがあったとします。中身は200ページだとしたら、それをわたしたちは一気に読んで理解できるでしょうか?
たいてい大きなドキュメントや書籍を考えればよいですが、目次があって、全体の概要をそこから知ることができます。
そのように、ある程度の区切りでドキュメントを分割することで、理解しやすくなるわけです。
それと同じようにLLMにドキュメントを読み込んでもらう際には、内容を検索しやすいようにある程度のまとまりで区切って、データのベクトル化を行います。
この区切りやまとまりのことをチャンクといいます。
このチャンクをどのように区切るかで、5つのレベルがあります。
Lv1. 固定サイズのチャンク
最も単純で、雑な方法です。
ドキュメントの内容や構造に関係なく、100文字ずつといった固定文字数で区切ってしまう方法です。
DifyとかLangchainでもチュートリアルでは400とか数字で区切っているかと思います。わたしたちも、だいたい1000ぐらいでいいだろうとかいった感じで、embeddingの設定をしているように思います。追加で設定するとしたら、文字が少し重なるように調整したりといったところです。
ところが、当然のことですが、これは意味のない区切りなので、わたしたちが目次などで構造化して理解する考え方とは異なります。
Lv2. 再帰的(反復的)チャンク (Recursive Chunking)
これは改行コードなどの区切り文字を使用してテキストを階層的に分割する方法です。
さらに目的とするチャンクサイズを設定し、分割した結果がそのサイズと合わない場合は、反復(再帰)して、目的のチャンクサイズを生成していきます。
区切り文字を設定していたら、そういうことをしているんだと思ってください。
Lv3. ドキュメントベースのチャンク
このチャンク方法は、ドキュメント特有の構造に基づいて分割を行います。
最初にお話しした目次を使った構造理解に近いですが、目次ではなく、ドキュメント内の段落、図表などをもとに解析していきます。
コンテンツの流れや構造を、文字の大きさ、段落、スペース、表、図などをもとに解析していきますが、これに適しているものとしては、Markdownがあります。
RAGのための元となるドキュメントとして、Markdownが有効なのは、こうした構造を読み込むのに適しているからだと言えます。
Pythonパッケージのなかで、pyMuPDFというものがありますが、これをLLMに適したものにする拡張機能としてpyMuPDF4LLMがあります。これはPDFをMarkdownにしてLLMに読み込ませるためのものです。
Lv4. セマンティックチャンク
Lv1からLv3はドキュメントから一定のサイズのチャンクを作成し、それに基づいて各チャンクの解析(ベクトル化)を行います。
それに対しそれぞれのチャンクの意味的なつながり(セマンティック)を考え、チャンク間の関係性や類似性を使用して、埋め込み処理を行います。
Lv3までは機械的な作業だったのに対し、人間の考え方に近い文書理解の仕方になってきているような感じですね。
Lv5. エージェントチャンク
より人間的な思考に近い方法がエージェントチャンクです。
これはドキュメントの最初から読み進めて、似ている内容、概念などを抽出したり、テーマを見つけて、それらがどのように変化したり、否定されたり、肯定されたりしているかといった感じで、チャンクを構築します。
そのため、最初から500文字でチャンクを区切るのではなく、最初に見つけたテーマに即していれば、そのチャンクに含め、異なれば別のものにするといった、思考的チャートのような流れをしています。
人間的なアプローチといえますが、かなり試行錯誤が必要であることや、何がテーマであるかなど、検証すべきことが多くあり、何回LLMに思考させれば最適となるか、まだまだ解決すべき点が多くあり、実験段階と呼べるものです。
AIの今後
ここからわかるのは、AI(LLM)というのは、あくまでもビッグデータから解析された様々なベクトルを組み合わせて回答を生成しているのであって、自身が何かしらの思考や学習意欲をもって知識を習得しているわけではないということです。これがRAGにおいてはとても難しい課題になるわけです。
しかし、今後のAIの発展においては、このあたりがブレークスルーになるように思います。AIの学習プロセスそのものの変化、思考パターンの変化など、様々なことが課題とは思いますが、RAGの手段の発想が逆にAI開発そのものを変えていく日も近いかもしれません。