Microsoft์ฌ์์ ๋ฐํํ Community Detection์ ํ์ฉํ GraphRAG ๋ฐฉ๋ฒ๋ก ์ Neo4j(Graph Database)๋ฅผ ํตํด ๊ตฌํํ์ฌ ๋ชจ๋ํํ์์ต๋๋ค. ์ฃผ์ ๋ด์ฉ์ LLMGraphTransformer ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ํ์ฉํ์ฌ entity์ relation์ ์ถ์ถํ๊ณ ์ดํ์ entity ๋ ธ๋ id ํน์ discription์ ํ ์คํธ ์๋ฒ ๋ฉ ๊ฐ์ neo4j gds๋ผ์ด๋ธ๋ฌ๋ฆฌ์ KNN๊ณผ WCC(Weakly Connected Components)๋ฅผ ํ์ฉํ์ฌ ์ ์ฌํ ์ํฐํฐ๋ ๋ณํฉ์ ํด์ฃผ๊ณ Leiden ์๊ณ ๋ฆฌ์ฆ์ผ๋ก ์ปค๋ฎค๋ํฐ๋ฅผ ๊ตฌ์ฑํฉ๋๋ค.
- database ์์ฑ
python database_generate.py --DATABASE [name]
[name] ์ ์๋ฅผ ๋ค์ด graphrag-doc-test ๋ก ๋ณธ์ธ์ด ์์ฑํ๊ณ ์ถ์ DB ์ด๋ฆ์ ์ ๋ ฅ.(๋ฐ์ดํ ๋ฃ์ ํ์ ์์)
์์ํ๊ธฐ ์์ ์ฒซ ๋ฒ์งธ๋ก DB๋ฅผ ์์ฑํ๋ ์ด์ ๋ database๋ฅผ ์ค์ ์ ์ํด์ฃผ๋ฉด default ๊ฐ์ธ neo4j ๋ก ์กํ๊ธฐ ๋๋ฌธ์ ํ
์คํธ ๋จ๊ณ์์๋ ์์ฑ์ ํด์ค์ผ ํ๋ค.
- data ์ ์ฒ๋ฆฌ ํ DB ์ ์ฌ ๋ฐ Community Detection
python data_load.py --DATABASE [name] --DATA_PATH [File Directory]
File Directory ์ ๋ฐ์ดํฐ(ํ์ผ) ๊ฒฝ๋ก ์ค์ .
- ํ์ง๋ ์ปค๋ฎค๋ํฐ ๋ณ Summary ์์ฑ
python community_summary.py --level1 [int] --level2 [int] --level3 [int]
[int]์๋ ์ด๋ ํ level ๋จ์ summary๋ฅผ ์์ฑํ ์ง ์ค์
1. DATA LOAD๋ฅผ ํตํด ๊ตฌ์ฑ๋ ์ปค๋ฎค๋ํฐ๋ฅผ ํ์ฉํ์ฌ ์ด๋ป๊ฒ Retrieval์ ํ ์ง์ ๋ํ ๋ด์ฉ์ด ๋ด๊ฒจ์์ต๋๋ค. Local๊ณผ Global๋ก ๋๋์ด์ Retrieval์ด ์งํ๋๊ณ ๋ ๋ฐฉ์์ ์ํคํ ์ณ๊ฐ ๋ค๋ฅด๋ ์ง์ ๋ค์ด๊ฐ์ ํ์ธํด๋ณด์๋ฉด ๋ ๊ฒ ๊ฐ์ต๋๋ค.
ms_graphrag_import.ipynb ์ ms_graphrag_retriever.ipynb ๋ฅผ ํ์ฉํ์ฌ ๋น์ ํ PDF ์์ ๋ฌธ์๋ฅผ 'graphrag-doc-02-ms' ์ ์ ์ฌํ์์ผ๋ ์ฐธ๊ณ ๋ฐ๋๋๋ค.
- Retrieval & Answer Generation
python retrieval.py --index_name [vector_index_name] --question [query]
[vector_index_name] ์ Neo4j๋ฅผ ํตํด ์๋ฒ ๋ฉ ๋ฒกํฐ์ ๋ํด ์ธ๋ฑ์ฑํ ์ด๋ฆ ์ค์
[query]๋ user query๋ฅผ ์ ๋ ฅ
์ฐธ๊ณ ๋ก Retrieval & Answer Generation ๋ฐฉ์์ ์๋ ๊ทธ๋ฆผ์ Local retriever๋ก ๋ต๋ณ ์์ฑํจ.
Local Search ๋ฐฉ๋ฒ๋ก ์ ์ ์ ์ฟผ๋ฆฌ๋ก๋ถํฐ ์ํฐํฐ๋ฅผ ์ธ์ํ์ฌ ๊ทธ ์ํฐํฐ์ ์ ์ฌํ ์ํฐํฐ๊ฐ ํฌํจ๋ 1. Source chunk, 2. Community Summary, 3. Entities, 4. Relationship description, 5. Covariate ๋ฅผ ๊ฐ์ ธ์์ ์ง๋ฌธ์ ๋์์ด ๋์ง ์๋ ๋ต๋ณ์ ํํฐ๋งํ๊ณ ๊ฐ ๊ธฐ์ค์ ๋ฐ๋ผ ์ ์๋ฅผ ๋งค๊ฒจ(Ranking) ๋ด๋ฆผ์ฐจ์์ผ๋ก ํ ํฐ ์ ํ์ ๋๋ฌํ๊ธฐ ์ ๊น์ง context๋ฅผ ๊ตฌ์ฑํ์ฌ LLM์ ๋ณด๋ด ์ต์ข ๋ต๋ณ์ ์์ฑํฉ๋๋ค.
Global Search ๋ฐฉ๋ฒ๋ก ์ ์ฐ์ ๋ชจ๋ Community Summary๋ฅผ ๋๋คํ๊ฒ ์์ ํ LLM์๊ฒ 0~100์ ๊น์ง ์ ์๋ฅผ ๋งค๊ฒจ์ ๋์์ด ๋์ง ์๋๋ค๊ณ ํ๋จ๋ Summary(์ ์ 0)๋ ํํฐ๋งํฉ๋๋ค. ์ด ํ ์์ฑ๋ ์ค๊ฐ ์ปค๋ฎค๋ํฐ ๋ต๋ณ(Rated Intermediate Response)๋ค์ ์ ์ฉ์ฑ ์ ์์ ๋ฐ๋ผ ๋ด๋ฆผ์ฐจ์์ผ๋ก ์ ๋ ฌํ๊ณ , ํ ํฐ ์ ํ์ ๋๋ฌํ ๋๊น์ง ๊ฐ์ฅ ์ ์ฉํ ๋ต๋ณ๋ค์ ์ ํํ์ฌ ์๋ก์ด context ์๋์ฐ์ ์ถ๊ฐํฉ๋๋ค. ์ด ์ต์ข context๋ฅผ ์ฌ์ฉํ์ฌ LLM์ ๋ณด๋ด ์ ์ ์๊ฒ ๊ธ๋ก๋ฒ ๋ต๋ณ์ ์์ฑํฉ๋๋ค. ์ด ๋ฐฉ์์ด ์ ๋ ผ๋ฌธ์์ ์ ์ํ ๋ฐฉ๋ฒ์ด๊ณ ๊ทธ์ ๋ํ ์ํคํ ์ฒ์ ๋๋ค.
Local Search ์ Global Search๋ก ๋๋ ์ด์ ๋ ๋ฏธ์์ / ๊ฑฐ์์ ์ง๋ฌธ์ ๋ฐ๋ผ์ ์ทจ์ฌ ์ ํ(Routing)ํ์ฌ ๋ต๋ณ์ ๋ฐ์ ์ ์๋๋ก ํ๊ธฐ ์ํจ์ ๋๋ค. ์ด๋ฌํ ์ ๊ณต๋ ๋ฐฉ๋ฒ๋ก ์ ์ ํ์ฉํ๋ฉด ์ด๋ ํ level ๋จ์ ์ง๋ฌธ์๋ ์ ๋ต๋ณํ ์ ์๋ GraphRAG๋ฅผ ๊ตฌ์ถํ ์ ์์ ๊ฒ์ ๋๋ค.
1. DATA LOAD : Implementing โFrom Local to Globalโ GraphRAG with Neo4j and LangChain: Constructing the Graph
2. Retrieval : Integrating Microsoft GraphRAG into Neo4j
Paper : From Local to Global: A Graph RAG Approach to Query-Focused Summarization
Microsoft Github Blog : Microsoft_GraphRAG

