RAGで人間の脳を再現。「HippoRAG」を理解する
はじめまして。ナレッジセンスの門脇です。生成AIやRAGシステムを活用したサービスを開発しています。本記事では、RAGの性能を高める手法である「HippoRAG」について、ざっくり理解します。
この記事は何
この記事は、RAGの新手法として最近注目されている「HippoRAG」の論文[1]について、日本語で簡単にまとめたものです。
「そもそもRAGとは?」については、知っている前提で進みます。確認する場合は以下の記事もご参考下さい。
本題
ざっくりサマリー
HippoRAGは、RAGの性能を高めるための新しい手法です。オハイオ州立大学の研究者らによって2024年5月に提案されました。HippoRAGを使うメリットは、複数の知識を組み合わせて回答する必要があるような、複雑な質問に強くなることです。HippoRAGが従来のRAGに比べて、複雑な質問に強い理由は、ナレッジグラフと、それを継続的にメンテナンスする仕組みを組み合わせることで、「人間の脳の長期記憶の仕組み」に近いことをやっているからです。
問題意識
大規模言語モデル(LLM)は便利ですが、独自データに基づいて回答することはできません。これを克服するための手法としてRAG(Retrieval-Augmented Generation)が注目されていますが、RAGにも限界があります。
RAGの具体的な限界としては、「回答のために複数の知識を必要とするような質問」への回答精度です。例えば「スタンフォード大でアルツハイマーの研究をしている教授は?」という質問を考えます。
こちらに対する回答が「そのまま」載っているようなドキュメントがあれば、通常のRAGでも回答可能です。しかし、「スタンフォード大の教授一覧」と「教授の研究分野一覧」が別々のドキュメントとして存在していた場合、通常のRAGでは回答できないことがあります。
手法
HippoRAGが従来のRAGと大きく違う点は、ベクトルデータベースやコサイン類似度による検索を用いない点です。これはかなり大きい特徴です。HippoRAGのポイントは、ナレッジグラフを活用した(ベクトルDBを使わない)RAGである点・ナレッジグラフを賢く更新する点です。
(※ナレッジグラフについては、簡単ですが以前こちらのブログでも紹介しました。今回は説明を省略します。)
【事前にやっておくこと】
- アップロードされた独自のドキュメントについて、LLMを使って重要語句を抽出
- 重要語句を元に、OpenIEでトリプル(主語-述語-目的語のセット)を作成
- トリプルをナレッジグラフに追加
- ナレッジグラフ内に同じ意味の単語が複数あれば賢く検出、関連付ける
例えば、"USA"と"米国"みたいなノードがあれば、ナレッジグラフ内でここにパスを作る
(※ここまでが、上の画像の中段「Offline Indexing」の説明です。)
【ユーザーが質問を入力して来たとき】
- ユーザーの質問から重要語句を抽出
-
ナレッジグラフの中から、この重要語句に最も近い意味のノードを検索
(これを「クエリノード」と呼ぶ) -
「クエリノード」を起点として、ナレッジグラフを探索
(Personalized PageRank(PPR)アルゴリズムを利用) - 3で得られた各ノードの重要度(確率)を利用して、各ノードが所属していた元文書のチャンクをランキング
- ランキングの高いチャンクをLLMに渡し、回答を生成させる
人間の長期記憶では、大脳新皮質が情報を処理し、海馬で関連性をインデックスしていると言われています。HippoRAGでは、この仕組みを模倣するシステムを、LLMとナレッジグラフを組み合わせることで実現しています。
成果
HippoRAGでは、以下ような性能向上が報告されています。
- 「複数の知識を活用して回答する必要がある」ような、マルチホップなタスク(MuSiQueとWikiHopQAなど)において、通常のRAGよりも高い性能
- IRCoT(=答えにたどり着くまで何度か検索を繰り返す手法)と同等以上の性能。しかも、検索コストは10〜30分の1、検索時間は6〜13分の1で済んでいる
- IRCoTとHippoRAGを組み合わせることで、さらに4〜20%の性能向上
まとめ
HippoRAGは、RAGのテクニックの中でもかなり応用的だとは思います。とはいえ、「人間の脳の仕組みを再現することでRAGの精度を上げる」というコンセプト自体が面白すぎますし、可能性を感じます。
また個人的にも普段の業務にて、大企業の方にRAGの説明をする際、人間に例えて説明をしています。RAGの裏側のアーキテクチャがさらに人間(というか脳)に近づくことで、一般ユーザーにとってもRAGが分かりやすくなり、使いこなせるようになると、それもまた嬉しいことです。
みなさまが業務でRAGを構築する際も、精度を上げる工夫として参考にしていただければ幸いです。今後も、RAGの回答精度を上げるような工夫や研究について、記事にしていきます。我々が開発しているサービスはこちら。
Discussion