---
title: GraphRAGっておいしいの？
tags:  #lt資料  
author: [t_shinnosuke](https://www.docswell.com/user/shinnosuke)
site: [Docswell](https://www.docswell.com/)
thumbnail: https://bcdn.docswell.com/page/LELPRQ3N7R.jpg?width=480
description: 2024.07.26 集まれエンジニアの森 #6 発表用資料
published: July 27, 24
canonical: https://www.docswell.com/s/shinnosuke/ZG1EYM-2024-07-27-003342
---
# Page. 1

![Page Image](https://bcdn.docswell.com/page/LELPRQ3N7R.jpg)

GraphRAGっておいしいのだろうか？


# Page. 2

![Page Image](https://bcdn.docswell.com/page/4JM4R1DQ7W.jpg)

本LTの趣旨
•
最近流行りの(?) GraphRAGについて少しかじってみたのでその
内容を話します。
•
かじった程度の初学者なので至らない点が多々ありますが、ご
了承ください。
•
結論、おいしいかどうかはまだ分かってないです。これからさ
らなる検証と運用を通して味わっていこうと思っています。


# Page. 3

![Page Image](https://bcdn.docswell.com/page/PJRWRL4K79.jpg)

自己紹介
name: しんのすけ
X: @orc_jj
like:
- バイク
- 読書
- 映画
- アニメ
work:
- インフラ
certification:
- Azure Solutions Architect Expert
- Azure Developer Associate
- Azure AI Engineer Associate
- AWS Solutions Architect Professional
etc..
topic:
- 娘の夏休みが始まりました
- コミュ力を上げたい。まじで


# Page. 4

![Page Image](https://bcdn.docswell.com/page/PEXPRW257X.jpg)

GraphRAGとは
GraphRAGは、Retrieval Augmented Generation（RAG）の技術を拡張したもので、ナレッジグラフを利用
して情報検索と生成を行う手法。2024年2月にMicrosoft Researchから発表。
従来のRAGはベクトル検索を用いて関連情報を取得し、新たなテキストを生成するが、GraphRAGはこれ
に加えてグラフ構造を用いることで、単語間の関係性や文脈をより深く理解し、精度の高い検索結果を提
供できる。
1. テキストデータをノード（単語やフレーズ）とエッジ（単語間の関係性）として表現し、ナレッジグ
ラフを作成します。このグラフ構造により、言語モデルが単語同士の関係性を深く理解
1. ユーザーのクエリに対して、ナレッジグラフとベクトルストアの両方を用いて回答を検索。
これにより、単語の類似度だけでなく、文脈上の関連性も考慮した精度の高い回答が得られる。
1. データセット全体から推論。従来のRAGはデータ全体からテーマを抽出するクエリに対して、類似コ
ンテンツからの検索をおこなうが、GraphRAGの場合はナレッジ グラフの構造を活用しデータセット
のテーマを明確にし、意味のあるクラスターを要約して回答する。


# Page. 5

![Page Image](https://bcdn.docswell.com/page/3EKDRVMRJD.jpg)

グラフ構造って？
グラフ構造は、データをノード（実
体）とエッジ（関係）として表現。
この構造により、エンティティ間の複
雑な関係や階層構造を効果的に表現・
検索することができる。
がノード
がエッジ
https://blog.langchain.dev/enhancing-rag-based-applications-accuracy-by-constructing-and-leveraging-knowledge-graphs/


# Page. 6

![Page Image](https://bcdn.docswell.com/page/L73R8MYGJ5.jpg)

ドラゴンボールの情報をグラフDBに格納してみる
# Wikipediaの記事を読みこむ
raw_documents = WikipediaLoader(query=&quot;ドラゴンボール&quot;,lang=&quot;ja&quot;,load_max_docs=1).load()
# チャンキング
text_splitter = TokenTextSplitter(chunk_size=512, chunk_overlap=24)
documents = text_splitter.split_documents(raw_documents[:3])
# gpt-4を使う
llm=ChatOpenAI(temperature=0, model_name=&quot;gpt-4&quot;)
llm_transformer = LLMGraphTransformer(llm=llm)
# LLMを使って記事をグラフ構造にする
graph_documents = llm_transformer.convert_to_graph_documents(documents)
# グラフDBに格納する
graph.add_graph_documents(
graph_documents,
baseEntityLabel=True,
include_source=True
)
LangChainブログからサンプルコードが提供されている


# Page. 7

![Page Image](https://bcdn.docswell.com/page/87DYM65N7G.jpg)

Cypher クエリ
MATCH p=()-[:ATTACK]-&gt;({id: &quot;悟空&quot;}) RETURN p;
MATCH p=()-[:CHILD_OF]-&gt;({id:&quot;ベジータ&quot;}) RETURN p;
悟空に攻撃を仕掛けた人物
ベジータの子供 &amp; トランクスの親


# Page. 8

![Page Image](https://bcdn.docswell.com/page/VJP6RYGNE8.jpg)

LangChain
chain.invoke({
&quot;question&quot;: &quot;ドラゴンボールの作者は?&quot;
})
ユーザーの質問から重要な要素を
LLMで抽出
ドラゴンボール
抽出した要素からLLMでCypher クエリを生成し
て検索 + ベクトル検索
取得した情報を簡単なテキスト形式
に変換する
CALL db.index.fulltext.queryNodes(&#039;entity&#039;, ドラゴンボール~2, {limit:2})
ドラゴンボール - 作成者 -&gt; 鳥山明
ドラゴンボール - 掲載 -&gt; 週刊少年ジャンプ
ドラゴンボール - 主人公 -&gt; 孫悟空
ドラゴンボール - 放送 -&gt; フジテレビ
YIELD node,score
CALL { WITH node MATCH (node)-[r:!MENTIONS]-&gt;(neighbor) RETURN
node.id + &#039; - &#039; + type(r) + &#039; -&gt; &#039; + neighbor.id AS output UNION
ALL WITH node MATCH (node)&lt;-[r:!MENTIONS]-(neighbor) RETURN
neighbor.id + &#039; - &#039; + type(r) + &#039; -&gt; &#039; +
node.id AS output }
RETURN output LIMIT 50;
「ドラゴンボール」に類似したエンティティをフル
テキスト検索し、それらのエンティティと関連する
MENTIONS 関係を持つノードの情報を収集し、最大
50件の結果を返すクエリ。
『ドラゴンボール』（DRAGON BALL）
は、鳥山明による日本の漫画作品。『週
刊少年ジャンプ』（集英社）にて1984年
51号から1995年25号まで連載された。
略称は「DB」。
世界中に散らばった七つの球をすべて集
めると、どんな願いも一つだけ叶えら
れ...


# Page. 9

![Page Image](https://bcdn.docswell.com/page/2EV3RG6Y7Q.jpg)

LangChain
変換されたテキスト
与えられたコンテキストを元に
最終回答を生成
ドラゴンボール - 作成者 -&gt; 鳥山明
ドラゴンボール - 掲載 -&gt; 週刊少年ジャンプ
ドラゴンボール - 主人公 -&gt; 孫悟空
ドラゴンボール - 放送 -&gt; フジテレビ
『ドラゴンボール』（DRAGON BALL）
は、鳥山明による日本の漫画作品。『週
刊少年ジャンプ』（集英社）にて1984年
51号から1995年25号まで連載された。
略称は「DB」。
世界中に散らばった七つの球をすべて集
めると、どんな願いも一つだけ叶えら
れ...
ドラゴンボールの作者は鳥山明です。


# Page. 10

![Page Image](https://bcdn.docswell.com/page/57G3M8NWJL.jpg)

従来のRAGと違いがあるか実験
通常のベクトル検索
result = qa_chain({&quot;question&quot;: &quot;ブルマはどこの
星に行ったことがある?&quot;})
検索
検索結果にどこ
の星行ったか書
いてねーじゃん
検索結果
申し訳ありません。ブルマがどの星に行っ
たことがあるかについては、提供された情
報からは確認できませんでした。
異なる次元に存在し、原則上は死者と神しか立ち入ること
ができないあの世へも移動可能。また対象者は必ずしも厳
密な知人である必要はなく、「ピッコロにそっくりな気」
という曖昧な認識を基に気を探って直接面識のある相手が
一人もいないナメック星への瞬間移動を果たしている。移
動だけでなく攻撃技にも組み込み、かめはめ波を併用した
「瞬間移動かめはめ波」という応用技がある他、敵の攻撃
を回避する際に用いられる。時間が無かったため悟空がヤ
ードラット人に教わったのは瞬間移動のみだが、それでも
ビルス編（エイジ778）
習得にかなり苦労した。漫画版の『超』では、ヤードラッ
魔人ブウ戦から数年後、悟飯とビーデルが結婚した頃にはチチ
ト星人が使える術の基礎でしかないことが明かされた。¥n
とセルゲーム前に交わした約束通り働いており、トラクターを
舞空術（ぶくうじゅつ）¥n全身の気をコントロールしなが
運転し畑仕事に従事している。親戚関係になったサタンから、
ら放出することによって、空中を飛行する。第23回天下一
彼が世界平和大賞を受賞した際に受け取った1億ゼニーをもらい、
武道&#039;
そのお金をチチに渡したことにより北の界王のもとに修行に行
く許可をもらう。界王星での修行中、ブルマの誕生日パーテ
ィーのことを思い出すも元々パーティーが苦手だと話し、ビル
スのことを隠す界王の様子が気になるため行くのをやめた。し
かしその後超サイヤ人ゴッドを探しに来たビルスと戦うことに
なり、超サイヤ人3になっても敵わず、たった2発の攻撃で重傷
を負う。ビルスが地球へと飛び去った後、界王たちから止めら
れながらも仲間たちのことを心配するなど劇場版『ドラゴンボ
ールZ 神と神』以上に仲間思いな部分が出ていた


# Page. 11

![Page Image](https://bcdn.docswell.com/page/4EQ5R9QQJP.jpg)

従来のRAGと違いがあるか実験
グラフ + ベクトル検索
&#039;ブルマ - TRAVEL_TO -&gt; ナメック星&#039;
result = chain.invoke({&quot;question&quot;:
&quot;ブルマはどこの星に行った事がある？&quot;})
検索
ブルマ TRAVEL
TO ナメック星
書いてるう！
検索結果
ブルマはナメック星に行ったことがあります。


# Page. 12

![Page Image](https://bcdn.docswell.com/page/KJ498XNY71.jpg)

参考サイト
サンプルコードでさくっと試す
https://blog.langchain.dev/enhancing-rag-based-applicationsaccuracy-by-constructing-and-leveraging-knowledge-graphs/
もう少し詳しく理解する
https://www.deeplearning.ai/short-courses/knowledge-graphs-rag/


# Page. 13

![Page Image](https://bcdn.docswell.com/page/LE1K2N5NJG.jpg)

GraphRAG Accelerator
https://github.com/Azure-Samples/graphrag-accelerator
Azure上でGraphRagを動かすために必要なリソースをデ
プロイするIaCや、nodebooks形式での実行コードが含ま
れている。デプロイするとGraphRAG APIエンドポイント
が生える。
文字数17万程のドキュメントを前処理し、動作確
認してリソース類を1日放置した際の金額
15,000円近くなってしまった
(ご利用は計画的に...)


# Page. 14

![Page Image](https://bcdn.docswell.com/page/GEWDR4WMJ2.jpg)

まとめ
● GraphRAGっておいしいの？
まだ分かりません！！試しに既存のRAGボットを置き換えてみ
てユーザー体験や、運用するにあたってのつらみがどうなのか
とか色々これからやってみるつもり。
● そもそもRAG以前に...
グラフDBやグラフ構造、クエリ言語のキャッチアップをしない
と良く分からない事が多い！！勉強します


# Page. 15

![Page Image](https://bcdn.docswell.com/page/47ZGR25ME3.jpg)

ご清聴有難うございました。


