はじめに
こんにちは、H×Hのセンリツ大好きエンジニアです。(同担OKです😉)
前回の記事ではRAGについて触れましたが、今回はRAGから派生して誕生したGraphRAGについて自分が解釈できた所まで説明したいと思います!
誤った情報があれば修正しますので教えていただければ幸いです🫡
RAGの苦手なこと
RAGを活用することにより、専門的な情報や個人に即した情報の回答精度が向上します。
RAGでは、①外部情報から意味的に似ている情報を検索すること ②検索した内容を基に回答を生成すると言う2つの事が行われています。
しかし、ユーザが抽象的な質問を行った場合は①で情報の関連性を理解して回答することが難しくなります。
言語モデルでは、ベクトル検索により意味的に近いものを検索することで回答を用意していますが、質問の文脈や関連性までを把握することが難しいです。
ベクトル検索は、クエリテキストをベクトルに変換した後、クエリベクトルと高い類似度を持つベクトルを結果として返します。このベクトルは、意味が近いものほど類似度が高くなります。
そのため、抽象的なクエリだと意味合いが捉え方に左右されてしまうことになり、結果として返す回答が即していないケースが発生するのです。
GraphRAGとは
正式名称をGraph-based Retrieval-Augmented Generationと言い、情報の関連性をグラフにより表現し、そのグラフを基に情報検索と回答の生成を行う事ができる技術です。
これは、RAGでは読み取れなかった情報の関連度をグラフによって管理するため抽象的なクエリであっても対応しやすくなります。
例えば、ハンターハンターのセンリツに関する質問をしてみます。
「センリツの特徴は?」と言う抽象的なクエリをRAGで処理しようとすると、外部情報として「センリツは髪が長くて目がキュルキュルの美しい女の子です。」と言う情報を持っていたとしても意味的に近いと認識されずに回答が出来ないケースがあります。
人間からすると、「センリツの特徴は?」と「髪が長い女の子」は会話として成立しますが、RAGでは意味的に近くないと言う理由から回答として相応しくないと認識されます。
これを、GraphRAGを使用するとどうなるでしょうか?
GraphRAGでは、「センリツは髪が長くて目がキュルキュルの美しい女の子です。」と言う文章からグラフを作成します。
センリツと言うノードと女の子というノードを生成し、その関連性を表すものとして、髪が長くて目がキュルキュルといった情報をエッジが生成されるイメージです。
センリツと女の子という言葉を付属の修飾語で関連付けることをグラフ化する際に行います。
センリツというワードが入ったクエリが与えられると、GraphRAGではまずセンリツノードを探します。
次に、センリツノードに関連している情報をグラフから取得することによって情報の関連性を把握する事ができます。
なので、先ほどのような抽象的な質問があった場合でも、言葉の関連性から期待する回答を生成できるようになるんですね。
GraphRAGの実例として、医療業界では患者の診療記録や研究論文を統合し、最適な治療法を提案するシステムに応用されているそうです。
情報の関連性を検索に含められると、既存の意味的マッチングと掛け合わせて更に回答精度が向上しそうですね!😇
おわりに
個人的に気になっていたGraphRAGについて分かる範囲でまとめてみました。
GraphRAGで文章をグラフに落とし込むことで情報の関連性を抽出できて良い手法に思えますね!(学習コストや情報の関連性をグラフに落とし込む精度がネックな気はしますね🤔)
生成AIってどんどん賢くなっていくので仕事取られないか怖いですね。。。
そうならないためにも、勉強は続けていきたいと思います🥶
最後までご覧いただきありがとうございました!
以上、センリツでした。🤓