Skip to content

2betforyou/GraphRAG

Folders and files

NameName
Last commit message
Last commit date

Latest commit

ย 

History

9 Commits
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 

Repository files navigation

GraphRAG ๊ธฐ๋ฐ˜ ๊ธˆ์œต๋ณด์•ˆ ๊ทœ์ œ ํ•ด์„ ํ”„๋ ˆ์ž„์›Œํฌ

ํ•œ๊ตญ์ „์ž๊ฑฐ๋ž˜ํ•™ํšŒ 2025 ์ถ”๊ณ„ํ•™์ˆ ๋Œ€ํšŒ

์ฃผ์„ฑ์šฉ ยท ๋ฐ•์ค€์˜ ยท ์˜ค๋ณ‘ํ›ˆ ยท ์ด์žฌ์šฐ

๊ธˆ์œต๋ณด์•ˆ ๋ฒ•๋ น ํ•ด์„์„ ์œ„ํ•œ Graph-augmented Hybrid RAG ํ”„๋ ˆ์ž„์›Œํฌ์ž…๋‹ˆ๋‹ค. ์ด ํ”„๋กœ์ ํŠธ๋Š” ๋ฒ•๋ น, ์‹œํ–‰๋ น, ์ง€์นจ, MITRE ATT&CK ์ž๋ฃŒ๋ฅผ EXAONE-3.5-7.8B-Instruct ๊ธฐ๋ฐ˜ ์งˆ์˜์‘๋‹ต ํŒŒ์ดํ”„๋ผ์ธ์— ์—ฐ๊ฒฐํ•˜๊ณ , ๋ฒ•๋ น ์กฐํ•ญ ๊ฐ„ ์ฐธ์กฐ ๊ทธ๋ž˜ํ”„์™€ dense/sparse retrieval์„ ๊ฒฐํ•ฉํ•ด ๊ทœ์ œ ์งˆ์˜์˜ ๊ทผ๊ฑฐ ๋ฌธ๋งฅ ๊ฒ€์ƒ‰ ํ’ˆ์งˆ์„ ๋†’์ด๋Š” ๊ฒƒ์„ ๋ชฉํ‘œ๋กœ ํ•ฉ๋‹ˆ๋‹ค.

๋‹จ์ˆœํžˆ ๋ฌธ์„œ๋ฅผ ๋ฒกํ„ฐ DB์— ๋„ฃ๊ณ  ๊ฒ€์ƒ‰ํ•˜๋Š” ๋ฐฉ์‹์ด ์•„๋‹ˆ๋ผ, ํ•œ๊ตญ ๋ฒ•๋ น ๋ฌธ์„œ์˜ ํŠน์ง•์ธ ์กฐํ•ญ ๊ฐ„ ์ฐธ์กฐ, ๊ต์ฐจ ๋ฒ•๋ น ์ฐธ์กฐ, ์‹œํ–‰๋ น/์ง€์นจ ์—ฐ๊ฒฐ, ๋ฒ•๋ น๋ช… ๊ธฐ๋ฐ˜ ๋ผ์šฐํŒ…์„ retrieval ๋‹จ๊ณ„์— ๋ฐ˜์˜ํ•ฉ๋‹ˆ๋‹ค.

ํ•ต์‹ฌ ์•„์ด๋””์–ด

๊ธˆ์œต๋ณด์•ˆ ๊ทœ์ œ ์งˆ์˜๋Š” ํŠน์ • ์กฐํ•ญ ํ•˜๋‚˜๋งŒ์œผ๋กœ ๋‹ตํ•˜๊ธฐ ์–ด๋ ค์šด ๊ฒฝ์šฐ๊ฐ€ ๋งŽ์Šต๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด "๊ฐœ์ธ์ •๋ณด ์ฒ˜๋ฆฌ ์ œํ•œ", "์ „์ž๊ธˆ์œต๊ฑฐ๋ž˜ ์‚ฌ๊ณ  ์ฑ…์ž„", "์ •๋ณดํ†ต์‹ ๋ง ๋ณดํ˜ธ์กฐ์น˜" ๊ฐ™์€ ์งˆ๋ฌธ์€ ์› ์กฐํ•ญ, ์˜ˆ์™ธ ์กฐํ•ญ, ์‹œํ–‰๋ น, ๊ด€๋ จ ์ง€์นจ์ด ํ•จ๊ป˜ ๊ฒ€์ƒ‰๋˜์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

์ด ํ”„๋กœ์ ํŠธ๋Š” ๋‹ค์Œ ๋ฐฉ์‹์œผ๋กœ RAG์˜ ๊ฒ€์ƒ‰ ๋ณ‘๋ชฉ์„ ์ค„์ž…๋‹ˆ๋‹ค.

๋ฌธ์ œ ์ ‘๊ทผ ๋ฐฉ์‹
๋ฒกํ„ฐ ๊ฒ€์ƒ‰๋งŒ์œผ๋กœ ์ •ํ™•ํ•œ ์กฐํ•ญ์„ ๋†“์นจ E5 dense retrieval๊ณผ BM25 sparse retrieval ๊ฒฐํ•ฉ
๋ฒ•๋ น ๋ฌธ๋งฅ์ด ์กฐํ•ญ ๋‹จ์œ„๋กœ ๋ถ„์‚ฐ๋จ ๋ฒ•๋ น ์กฐํ•ญ์„ ๋…ธ๋“œ๋กœ ๋งŒ๋“ค๊ณ  ์ฐธ์กฐ ๊ด€๊ณ„๋ฅผ ์—ฃ์ง€๋กœ ๊ตฌ์„ฑ
"์ œn์กฐ" ์ฐธ์กฐ๊ฐ€ ์—ฌ๋Ÿฌ ๋ฒ•๋ น์— ์ค‘๋ณต๋จ ๋ฒ•๋ น๋ช… + ์กฐํ•ญ ํŒจํ„ด์„ ์šฐ์„  ์—ฐ๊ฒฐํ•˜๊ณ , ๋‹จ์ˆœ ์กฐํ•ญ ์ฐธ์กฐ๋Š” ํ›„๋ณด ์ˆ˜์— ๋”ฐ๋ผ fallback
์ค‘๋ณต ๋ฌธ๋งฅ์ด ๋งŽ์ด ๋“ค์–ด๊ฐ optional reranker์™€ MMR๋กœ ์žฌ์ •๋ ฌ ๋ฐ ๋‹ค์–‘ํ™”
๊ด€๋ จ์„ฑ์ด ๋‚ฎ์€ ๊ฒ€์ƒ‰ ๊ฒฐ๊ณผ๊ฐ€ ์ฃผ์ž…๋จ low-confidence gating์œผ๋กœ RAG ์ ์šฉ ์—ฌ๋ถ€ ์ œ์–ด

Research Framing

1. Goal: what problem are we tackling?

๊ธˆ์œต๋ณด์•ˆ ๊ทœ์ œ ์งˆ์˜์‘๋‹ต์—์„œ๋Š” ๋ชจ๋ธ์ด ์ตœ์‹  ๋ฒ•๋ น, ์‹œํ–‰๋ น, ๊ณ ์‹œ, ์ง€์นจ, MITRE ์ž๋ฃŒ๋ฅผ ์ •ํ™•ํžˆ ์ฐธ์กฐํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ์ผ๋ฐ˜ LLM์€ ํ•™์Šต ์‹œ์  ์ดํ›„์˜ ๊ทœ์ œ ๋ณ€ํ™”๋‚˜ ์„ธ๋ถ€ ์กฐํ•ญ ๊ด€๊ณ„๋ฅผ ์•ˆ์ •์ ์œผ๋กœ ๊ธฐ์–ตํ•˜์ง€ ๋ชปํ•˜๊ณ , naive RAG๋Š” ์˜๋ฏธ์ ์œผ๋กœ ๋น„์Šทํ•œ chunk๋ฅผ ๊ฒ€์ƒ‰ํ•˜๋”๋ผ๋„ ์‹ค์ œ ์ •๋‹ต์— ํ•„์š”ํ•œ ๊ด€๋ จ ์กฐํ•ญ, ์˜ˆ์™ธ ์กฐํ•ญ, ์ค€์šฉ ์กฐํ•ญ, ์‹œํ–‰๋ น ์—ฐ๊ฒฐ์„ ๋†“์น  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋”ฐ๋ผ์„œ ์ด ํ”„๋กœ์ ํŠธ์˜ ๋ชฉํ‘œ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

๊ธˆ์œต๋ณด์•ˆ ๋ฒ•๋ น ๋ฌธ์„œ์˜ ๊ตฌ์กฐ์  ์ฐธ์กฐ ๊ด€๊ณ„๋ฅผ ํ™œ์šฉํ•ด, ๊ทœ์ œ ์งˆ์˜์‘๋‹ต์—์„œ ํ•„์š”ํ•œ ๊ทผ๊ฑฐ ๋ฌธ๋งฅ์„ ๋” ์ •ํ™•ํ•˜๊ฒŒ ๊ฒ€์ƒ‰ํ•˜๊ณ  ์ƒ์„ฑ ๋‹ต๋ณ€์˜ ๊ทผ๊ฑฐ์„ฑ์„ ๋†’์ด๋Š” RAG ์‹œ์Šคํ…œ์„ ๊ตฌ์ถ•ํ•œ๋‹ค.

2. Existing works: how do recent prior works tackle this problem?

์ตœ๊ทผ RAG ์—ฐ๊ตฌ๋Š” ๋‹จ์ˆœ dense retrieval์„ ๋„˜์–ด ๋ฌธ์„œ ๊ฐ„ ๊ด€๊ณ„, ๊ทธ๋ž˜ํ”„ ๊ตฌ์กฐ, retrieval ํ’ˆ์งˆ ํ‰๊ฐ€๋ฅผ ํ•จ๊ป˜ ๋‹ค๋ฃจ๋Š” ๋ฐฉํ–ฅ์œผ๋กœ ๋ฐœ์ „ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

Prior work / trend Main idea Limitation for Korean financial regulation QA
Naive RAG ๋ฌธ์„œ๋ฅผ chunkingํ•œ ๋’ค vector search๋กœ ๊ด€๋ จ ๋ฌธ๋งฅ ๊ฒ€์ƒ‰ ์กฐํ•ญ ๊ฐ„ ์ฐธ์กฐ, ์‹œํ–‰๋ น ์—ฐ๊ฒฐ, ์˜ˆ์™ธ ์กฐํ•ญ์ฒ˜๋Ÿผ ๊ตฌ์กฐ์  ๊ด€๊ณ„๋ฅผ ๋†“์น˜๊ธฐ ์‰ฌ์›€
Hybrid RAG dense retrieval๊ณผ BM25๋ฅผ ๊ฒฐํ•ฉํ•ด semantic match์™€ lexical match๋ฅผ ํ•จ๊ป˜ ํ™œ์šฉ ๊ฒ€์ƒ‰ recall์€ ๊ฐœ์„ ๋˜์ง€๋งŒ ๋ฒ•๋ น ๊ฐ„ ์ฐธ์กฐ ๊ตฌ์กฐ ์ž์ฒด๋ฅผ ๋ชจ๋ธ๋งํ•˜์ง€๋Š” ์•Š์Œ
Microsoft GraphRAG entity graph์™€ community summary๋ฅผ ๋งŒ๋“ค์–ด corpus-level global question answering์— ํ™œ์šฉ (arXiv:2404.16130) global summarization์—๋Š” ๊ฐ•ํ•˜์ง€๋งŒ, ํ•œ๊ตญ ๋ฒ•๋ น์˜ ์กฐํ•ญ ๋ฒˆํ˜ธ/๊ต์ฐจ ๋ฒ•๋ น ์ฐธ์กฐ๋ฅผ ์ง์ ‘ ํ•ด์„ํ•˜๋Š” ๋„๋ฉ”์ธ ๊ทœ์น™์€ ๋ณ„๋„๋กœ ํ•„์š”
LightRAG graph structure๋ฅผ indexing/retrieval์— ํ†ตํ•ฉํ•˜๊ณ  dual-level retrieval๋กœ ํšจ์œจ๊ณผ ๋ฌธ๋งฅ์„ฑ์„ ๊ฐœ์„  (arXiv:2410.05779) ๋ฒ”์šฉ graph retrieval ๊ตฌ์กฐ์ด๋ฉฐ, ๋ฒ•๋ น๋ช… + ์ œn์กฐ ๊ฐ™์€ ๊ทœ์ œ ๋ฌธ์„œ ๊ณ ์œ  ํŒจํ„ด์€ ๋„๋ฉ”์ธ ํŠนํ™” ์ฒ˜๋ฆฌ๊ฐ€ ํ•„์š”
RAG evaluation frameworks context precision, context recall, faithfulness, answer relevancy์ฒ˜๋Ÿผ RAG๋ฅผ retrieval/generation ๋‹จ์œ„๋กœ ๋ถ„ํ•ด ํ‰๊ฐ€ (arXiv:2309.15217) ํ‰๊ฐ€ ํ”„๋ ˆ์ž„์€ ์ œ๊ณตํ•˜์ง€๋งŒ, ๋ฒ•๋ น ์ฐธ์กฐ ๊ทธ๋ž˜ํ”„๋ฅผ ์–ด๋–ป๊ฒŒ retrieval์— ๊ฒฐํ•ฉํ• ์ง€๋Š” ์‹œ์Šคํ…œ ์„ค๊ณ„ ๋ฌธ์ œ๋กœ ๋‚จ์Œ

3. Main challenge: what do recent works fail to solve?

์ตœ๊ทผ GraphRAG์™€ Hybrid RAG๋Š” ๋ฌธ์„œ ๊ด€๊ณ„๋ฅผ ๊ฒ€์ƒ‰์— ํ™œ์šฉํ•œ๋‹ค๋Š” ํฐ ๋ฐฉํ–ฅ์„ ์ œ์‹œํ•˜์ง€๋งŒ, ๊ธˆ์œต๋ณด์•ˆ ๋ฒ•๋ น ์งˆ์˜์—๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๋„๋ฉ”์ธ ํŠนํ™” ๋ฌธ์ œ๊ฐ€ ๋‚จ์•„ ์žˆ์Šต๋‹ˆ๋‹ค.

  1. ๋ฒ•๋ น ์กฐํ•ญ ์ฐธ์กฐ์˜ ๋ชจํ˜ธ์„ฑ

    • "์ œ21์กฐ" ๊ฐ™์€ ํ‘œํ˜„์€ ์—ฌ๋Ÿฌ ๋ฒ•๋ น์— ๋™์‹œ์— ์กด์žฌํ•ฉ๋‹ˆ๋‹ค.
    • ๋ฒ•๋ น๋ช…์„ ํ•จ๊ป˜ ๋ณด์ง€ ์•Š์œผ๋ฉด ์ž˜๋ชป๋œ ์กฐํ•ญ์œผ๋กœ ์—ฐ๊ฒฐ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  2. ๊ต์ฐจ ๋ฒ•๋ น ์ฐธ์กฐ

    • ํ•œ ๋ฒ•๋ น์˜ ์กฐํ•ญ์ด ๋‹ค๋ฅธ ๋ฒ•๋ น, ์‹œํ–‰๋ น, ์‹œํ–‰๊ทœ์น™, ๊ณ ์‹œ๋ฅผ ์ฐธ์กฐํ•˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ๋งŽ์Šต๋‹ˆ๋‹ค.
    • flat chunk retrieval์€ ์ด๋Ÿฐ ์—ฐ๊ฒฐ์„ ๊ฒ€์ƒ‰ ์‹œ์ ์— ์•ˆ์ •์ ์œผ๋กœ ๋”ฐ๋ผ๊ฐ€๊ธฐ ์–ด๋ ต์Šต๋‹ˆ๋‹ค.
  3. ์ •๋‹ต ๊ทผ๊ฑฐ์˜ ๋ถ„์‚ฐ

    • ํ•˜๋‚˜์˜ ์งˆ๋ฌธ์— ๋‹ตํ•˜๊ธฐ ์œ„ํ•ด ์›์น™ ์กฐํ•ญ, ์˜ˆ์™ธ ์กฐํ•ญ, ๋ฒŒ์น™ ์กฐํ•ญ, ์ •์˜ ์กฐํ•ญ์ด ํ•จ๊ป˜ ํ•„์š”ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
    • top-k vector search๋งŒ์œผ๋กœ๋Š” ๊ด€๋ จ ์กฐํ•ญ ๋ฌถ์Œ์ด ๋น ์งˆ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  4. ํ•œ๊ตญ์–ด ๋ฒ•๋ น ํ‘œํ˜„์˜ lexical dependency

    • ๋ฒ•๋ น๋ช…, ์กฐํ•ญ ๋ฒˆํ˜ธ, ์•ฝ์นญ, ๊ณ ์‹œ๋ช… ๋“ฑ์€ semantic similarity๋ณด๋‹ค ์ •ํ™•ํ•œ ๋ฌธ์ž์—ด ๋งค์นญ์ด ์ค‘์š”ํ•œ ๊ฒฝ์šฐ๊ฐ€ ๋งŽ์Šต๋‹ˆ๋‹ค.
    • dense retrieval๋งŒ์œผ๋กœ๋Š” ์กฐํ•ญ ๋ฒˆํ˜ธ ๊ธฐ๋ฐ˜ ์งˆ์˜์—์„œ recall์ด ํ”๋“ค๋ฆด ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

4. Our method: how does it solve the challenge?

๋ณธ ํ”„๋กœ์ ํŠธ๋Š” ๋ฒ”์šฉ GraphRAG๋ฅผ ๊ทธ๋Œ€๋กœ ์žฌํ˜„ํ•˜๊ธฐ๋ณด๋‹ค, ํ•œ๊ตญ ๊ธˆ์œต๋ณด์•ˆ ๋ฒ•๋ น ๋ฌธ์„œ์˜ ๊ตฌ์กฐ๋ฅผ ์ง์ ‘ ํ™œ์šฉํ•˜๋Š” domain-specific lightweight GraphRAG๋ฅผ ์ œ์•ˆํ•ฉ๋‹ˆ๋‹ค.

ํ•ต์‹ฌ ๋ฐฉ๋ฒ•์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

Challenge Our method
์กฐํ•ญ ์ฐธ์กฐ ๋ชจํ˜ธ์„ฑ (law, article) ์—ญ์ƒ‰์ธ์„ ๋งŒ๋“ค๊ณ  "๋ฒ•๋ น๋ช… + ์ œn์กฐ" ํŒจํ„ด์„ ์šฐ์„  ์—ฐ๊ฒฐ
๊ต์ฐจ ๋ฒ•๋ น ์ฐธ์กฐ graph_build_crosslaw.py์—์„œ ๋ฒ•๋ น ๊ฐ„ ์ฐธ์กฐ edge ์ƒ์„ฑ
๋ถ„์‚ฐ๋œ ๊ทผ๊ฑฐ ์กฐํ•ญ FAISS ๊ฒ€์ƒ‰์œผ๋กœ seed ์กฐํ•ญ์„ ์ฐพ์€ ๋’ค graph hop์œผ๋กœ ์ธ์ ‘ ์กฐํ•ญ ํ™•์žฅ
lexical dependency BM25์™€ dense retrieval์„ ๊ฒฐํ•ฉํ•ด ์กฐํ•ญ ๋ฒˆํ˜ธ/๋ฒ•๋ น๋ช… match ๋ณด๊ฐ•
irrelevant context reranker, MMR, low-confidence gating์œผ๋กœ context ํ’ˆ์งˆ ์ œ์–ด

์ฆ‰, ์ด ๋ฐฉ๋ฒ•์€ ๊ฒ€์ƒ‰์„ ๋‹จ์ˆœํ•œ chunk ranking ๋ฌธ์ œ๊ฐ€ ์•„๋‹ˆ๋ผ ๋ฒ•๋ น ๊ตฌ์กฐ๋ฅผ ๋”ฐ๋ผ ๊ด€๋ จ ๊ทผ๊ฑฐ๋ฅผ ํ™•์žฅํ•˜๋Š” ๋ฌธ์ œ๋กœ ์žฌ์ •์˜ํ•ฉ๋‹ˆ๋‹ค.

5. Experimental results: how do we show that the method solves the challenge?

ํ˜„์žฌ ์ฝ”๋“œ๋Š” answer-only PPL ํ‰๊ฐ€์™€ RAG ์‹คํ–‰ ๋กœ๊ทธ๋ฅผ ์ œ๊ณตํ•˜๋ฉฐ, ์ตœ์ข…์ ์œผ๋กœ๋Š” ๋‹ค์Œ ์‹คํ—˜์œผ๋กœ ํšจ๊ณผ๋ฅผ ๊ฒ€์ฆํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

Experiment Comparison Metric
Retrieval ablation dense only vs BM25 only vs hybrid vs hybrid + graph Recall@k, MRR, nDCG
Graph contribution hybrid RAG vs hybrid RAG + graph hop gold article hit rate, cross-law reference hit rate
Context quality retrieved context before/after graph expansion Context Precision, Context Recall
Generation quality no RAG vs FAISS RAG vs GraphRAG accuracy, faithfulness, answer relevancy
Robustness law-name queries, article-number queries, cross-law queries per-type accuracy and retrieval recall
Efficiency FAISS RAG vs GraphRAG latency, context length, tokens/sec

๊ถŒ์žฅ evaluation set์€ ๋‹ค์Œ query type์„ ํฌํ•จํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

  • ํŠน์ • ๋ฒ•๋ น๋ช…๊ณผ ์กฐํ•ญ ๋ฒˆํ˜ธ๊ฐ€ ๋ช…์‹œ๋œ ์งˆ๋ฌธ
  • ์กฐํ•ญ ๋ฒˆํ˜ธ๋งŒ ์ฃผ์–ด์ง„ ์งˆ๋ฌธ
  • ์‹œํ–‰๋ น/์‹œํ–‰๊ทœ์น™๊นŒ์ง€ ํ•จ๊ป˜ ๋ด์•ผ ํ•˜๋Š” ์งˆ๋ฌธ
  • ์ •์˜ ์กฐํ•ญ๊ณผ ๋ฒŒ์น™ ์กฐํ•ญ์ด ํ•จ๊ป˜ ํ•„์š”ํ•œ ์งˆ๋ฌธ
  • MITRE ATT&CK์™€ ๋ฒ•๋ น ๊ทผ๊ฑฐ๋ฅผ ํ•จ๊ป˜ ์š”๊ตฌํ•˜๋Š” ์งˆ๋ฌธ

์„ฑ๊ณต ๊ธฐ์ค€์€ GraphRAG๊ฐ€ ๋‹จ์ˆœ FAISS RAG ๋Œ€๋น„ ํŠนํžˆ cross-law reference hit rate, gold article Recall@k, faithfulness์—์„œ ๊ฐœ์„ ๋˜๋Š”์ง€ ํ™•์ธํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

์ฃผ์š” ๊ธฐ๋Šฅ

  • Domain-specific RAG

    • ๊ธˆ์œต๋ณด์•ˆ ๊ด€๋ จ ๋ฒ•๋ น, ์‹œํ–‰๋ น, ์ง€์นจ, MITRE ์ž๋ฃŒ๋ฅผ ๋กœ์ปฌ ํ…์ŠคํŠธ/JSONL ๊ธฐ๋ฐ˜์œผ๋กœ ์ƒ‰์ธ
    • EXAONE-3.5-7.8B-Instruct ๋ฐ LoRA adapter ๊ธฐ๋ฐ˜ ์ถ”๋ก  ์ง€์›
  • Hybrid Search

    • intfloat/multilingual-e5-base ์ž„๋ฒ ๋”ฉ ๊ธฐ๋ฐ˜ FAISS dense retrieval
    • ์„ ํƒ์  BM25 sparse retrieval
    • rag_alpha๋กœ dense/BM25 ๊ฒฐํ•ฉ ๋น„์œจ ์กฐ์ •
  • Lightweight GraphRAG

    • ๋ฒ•๋ น ์กฐํ•ญ์„ ๊ทธ๋ž˜ํ”„ ๋…ธ๋“œ๋กœ ๊ตฌ์„ฑ
    • ์กฐํ•ญ ์ฐธ์กฐ, ๊ต์ฐจ ๋ฒ•๋ น ์ฐธ์กฐ, ์—ญ์ƒ‰์ธ์„ ํ™œ์šฉํ•ด ์—ฃ์ง€ ์ƒ์„ฑ
    • FAISS๋กœ seed ์กฐํ•ญ์„ ์ฐพ์€ ๋’ค graph hop์œผ๋กœ ๊ด€๋ จ ์กฐํ•ญ ํ™•์žฅ
  • Retrieval Control

    • rag_mode=faiss|graph๋กœ ๊ฒ€์ƒ‰ ๋ชจ๋“œ ์ „ํ™˜
    • rag_topk, rag_max_chars, rag_injection์œผ๋กœ ๊ฒ€์ƒ‰๋Ÿ‰๊ณผ context injection ์ œ์–ด
    • rag_log_top1๋กœ ๊ฒ€์ƒ‰ ์ƒ์œ„ ๊ฒฐ๊ณผ ๋””๋ฒ„๊น…
    • ๊ฐ๊ด€์‹ ๋ฌธ์ œ๋Š” ์งˆ๋ฌธ๊ณผ ๋ณด๊ธฐ๋ฅผ ํ•จ๊ป˜ ์‚ฌ์šฉํ•ด ๊ฒ€์ƒ‰ ์งˆ์˜ ๊ฐ•ํ™”

์•„ํ‚คํ…์ฒ˜

Question
  -> law/MITRE trigger and routing
  -> E5 dense retrieval + optional BM25 retrieval
  -> score fusion
  -> optional reranker / MMR
  -> optional graph hop expansion
  -> context injection into system or user message
  -> EXAONE-3.5-7.8B-Instruct + LoRA generation
  -> answer post-processing

Repository Structure

.
โ”œโ”€โ”€ README.md
โ”œโ”€โ”€ dataset/
โ”œโ”€โ”€ fin/
โ””โ”€โ”€ pjy/
    โ”œโ”€โ”€ build_index.py              # ํ…์ŠคํŠธ/JSONL ๊ธฐ๋ฐ˜ FAISS/BM25 ์ธ๋ฑ์Šค ์ƒ์„ฑ
    โ”œโ”€โ”€ rag_searcher.py             # hybrid retrieval, routing, reranker, MMR, gating
    โ”œโ”€โ”€ inference_graphrag.py       # FAISS/GraphRAG ์ถ”๋ก  ํŒŒ์ดํ”„๋ผ์ธ
    โ”œโ”€โ”€ evals.py                    # answer-only PPL ํ‰๊ฐ€
    โ””โ”€โ”€ graphrag/
        โ”œโ”€โ”€ graph_build_crosslaw.py # ๊ต์ฐจ ๋ฒ•๋ น ์ฐธ์กฐ ๊ทธ๋ž˜ํ”„ ์ƒ์„ฑ
        โ”œโ”€โ”€ build_index_embed.py    # ๊ทธ๋ž˜ํ”„ ๋…ธ๋“œ ์ž„๋ฒ ๋”ฉ ๋ฐ FAISS ์ธ๋ฑ์Šค ์ƒ์„ฑ
        โ””โ”€โ”€ query_graphrag_embed.py # ๊ทธ๋ž˜ํ”„ ๊ธฐ๋ฐ˜ ๊ฒ€์ƒ‰ ํ…Œ์ŠคํŠธ

Requirements

pip install "transformers>=4.41.0" \
  "accelerate>=0.31.0" \
  "sentence-transformers>=3.0.1" \
  "faiss-cpu>=1.8.0" \
  rank_bm25 \
  "bitsandbytes>=0.43.1" \
  "peft>=0.11.1"

CUDA ํ™˜๊ฒฝ์—์„œ๋Š” ํ™˜๊ฒฝ์— ๋งž๋Š” faiss-gpu wheel ์‚ฌ์šฉ์„ ๊ถŒ์žฅํ•ฉ๋‹ˆ๋‹ค.

1. Hybrid RAG Index Build

๋กœ์ปฌ ํ…์ŠคํŠธ/JSONL ์ž๋ฃŒ๋ฅผ chunkingํ•œ ๋’ค E5 ์ž„๋ฒ ๋”ฉ, FAISS ์ธ๋ฑ์Šค, ์„ ํƒ์  BM25 ์ธ๋ฑ์Šค๋ฅผ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.

cd pjy

python build_index.py \
  --sources "/mnt/data/*.txt" "/mnt/data/*.jsonl" \
  --index-dir "./data/index/law_rag" \
  --embedding-model "intfloat/multilingual-e5-base" \
  --chunk-chars 900 \
  --chunk-overlap 200 \
  --bm25

2. Basic RAG QA

cd pjy

python ask_rag.py \
  --index-dir "./data/index/law_rag" \
  --base-model "LGAI-EXAONE/EXAONE-3.5-7.8B-Instruct" \
  --topk 6 \
  --alpha 0.2 \
  --max-new-tokens 320 \
  --temperature 0.2

alpha๋Š” BM25์™€ ๋ฒกํ„ฐ ์Šค์ฝ”์–ด ๊ฒฐํ•ฉ ๊ฐ€์ค‘์น˜์ž…๋‹ˆ๋‹ค. 0์€ ๋ฒกํ„ฐ ๊ฒ€์ƒ‰๋งŒ, 1์€ BM25 ๊ฒ€์ƒ‰๋งŒ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

3. Law Graph Build

๋ฒ•๋ น ๊ตฌ์กฐ JSON์—์„œ ์กฐํ•ญ ๋‹จ์œ„ ๋…ธ๋“œ๋ฅผ ๋งŒ๋“ค๊ณ , ์กฐํ•ญ ์ฐธ์กฐ์™€ ๊ต์ฐจ ๋ฒ•๋ น ์ฐธ์กฐ๋ฅผ ์—ฃ์ง€๋กœ ์—ฐ๊ฒฐํ•ฉ๋‹ˆ๋‹ค.

cd pjy/graphrag

python graph_build_crosslaw.py \
  --json_dir ../../dataset/laws/parsed_laws \
  --out_json ../../dataset/laws/graphrag/law_graph.json \
  --out_html ../../dataset/laws/graphrag/law_graph.html

graph_build_crosslaw.py๋Š” ๋‹ค์Œ ์ „๋žต์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

  • "๋ฒ•๋ น๋ช… + ์ œn์กฐ" ํŒจํ„ด์€ ๋ช…์‹œ์  ๊ต์ฐจ ๋ฒ•๋ น ์ฐธ์กฐ๋กœ ์šฐ์„  ์—ฐ๊ฒฐ
  • "์ด ๋ฒ•", "๊ฐ™์€ ๋ฒ•"์€ ํ˜„์žฌ ๋ฒ•๋ น์œผ๋กœ ํ•ด์„
  • "์ œn์กฐ"๋งŒ ์žˆ๋Š” ๊ฒฝ์šฐ ์ „์ฒด ๋ฒ•๋ น์—์„œ ํ›„๋ณด๊ฐ€ ํ•˜๋‚˜๋ฉด ์—ฐ๊ฒฐ
  • ํ›„๋ณด๊ฐ€ ์—ฌ๋Ÿฌ ๊ฐœ๋ฉด ํ˜„์žฌ ๋ฒ•๋ น์˜ ํ•ด๋‹น ์กฐํ•ญ์œผ๋กœ fallback
  • ์ค‘๋ณต ์กฐํ•ญ์€ ๋ณ‘ํ•ฉํ•˜๊ณ  (law, article) ์—ญ์ƒ‰์ธ์œผ๋กœ ํƒ์ƒ‰ ํšจ์œจ ๊ฐœ์„ 

4. GraphRAG Index Build

๊ทธ๋ž˜ํ”„ ๋…ธ๋“œ ํ…์ŠคํŠธ๋ฅผ ์ž„๋ฒ ๋”ฉํ•˜๊ณ  FAISS ์ธ๋ฑ์Šค๋ฅผ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.

cd pjy/graphrag

python build_index_embed.py \
  --graph_json ../../dataset/laws/graphrag/law_graph.json \
  --faiss_index ../../dataset/laws/graphrag/law_graph.index \
  --emb_path ../../dataset/laws/graphrag/embeddings.npy \
  --model_name intfloat/multilingual-e5-base

5. Inference with FAISS or GraphRAG

inference_graphrag.py๋Š” FAISS ๊ธฐ๋ฐ˜ RAG์™€ ๊ทธ๋ž˜ํ”„ ๊ธฐ๋ฐ˜ RAG๋ฅผ ๋ชจ๋‘ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค.

cd pjy

python inference_graphrag.py \
  --adapter out-exaone-law-qlora/20250828_040425/adapter \
  --rag on \
  --rag_mode graph \
  --index_dir ../dataset/laws/graphrag \
  --graph_json_path ../dataset/laws/graphrag/law_graph.json \
  --rag_topk 3 \
  --rag_max_chars 600 \
  --rag_injection user \
  --rag_log_top1 \
  --bf16

์ฃผ์š” ์˜ต์…˜:

์˜ต์…˜ ์„ค๋ช…
--rag_mode faiss E5 + FAISS + optional BM25 ๊ธฐ๋ฐ˜ ๊ฒ€์ƒ‰
--rag_mode graph ๊ทธ๋ž˜ํ”„ seed ๊ฒ€์ƒ‰ ํ›„ ์ธ์ ‘ ์กฐํ•ญ ํ™•์žฅ
--rag_alpha dense/BM25 ๊ฒฐํ•ฉ ๋น„์œจ
--rag_topk ๊ฒ€์ƒ‰ ์ƒ์œ„ ๋ฌธ๋งฅ ์ˆ˜
--rag_max_chars ๋ฌธ๋งฅ๋‹น ์ตœ๋Œ€ ๋ฌธ์ž ์ˆ˜
`--rag_injection system user`
--rag_log_top1 ๊ฒ€์ƒ‰ ์ƒ์œ„ 1๊ฐœ ๊ฒฐ๊ณผ ๋กœ๊ทธ ์ถœ๋ ฅ

Evaluation

ํ˜„์žฌ pjy/evals.py๋Š” answer-only perplexity(PPL) ์ค‘์‹ฌ ํ‰๊ฐ€๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.

cd pjy

python evals.py \
  --base LGAI-EXAONE/EXAONE-3.5-7.8B-Instruct \
  --adapter out-exaone-law-qlora/20250816_014322/adapter \
  --val_jsonl ../dataset/all/val.jsonl \
  --per_device_eval_batch_size 2

ํ–ฅํ›„ RAG ํ’ˆ์งˆ ํ‰๊ฐ€๋Š” ๋‹ค์Œ ์ง€ํ‘œ๋กœ ํ™•์žฅํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

ํ‰๊ฐ€ ์ถ• ๊ถŒ์žฅ ์ง€ํ‘œ
Retrieval quality Recall@k, MRR, nDCG
Context quality Context Precision, Context Recall
Generation quality Answer Relevancy, Faithfulness
System efficiency latency, tokens/sec, context length
Error analysis retrieval miss, wrong graph expansion, irrelevant context, hallucination

Positioning

์ด ๋ ˆํฌ๋Š” Microsoft GraphRAG์˜ full pipeline, ์ฆ‰ entity extraction, community detection, community summary ๊ธฐ๋ฐ˜ global QA ์‹œ์Šคํ…œ์„ ๊ทธ๋Œ€๋กœ ์žฌํ˜„ํ•˜๋Š” ํ”„๋กœ์ ํŠธ๋Š” ์•„๋‹™๋‹ˆ๋‹ค. ๋Œ€์‹  ํ•œ๊ตญ ๋ฒ•๋ น ๋„๋ฉ”์ธ์˜ ๊ตฌ์กฐ์  ํŠน์ง•์ธ ์กฐํ•ญ ์ฐธ์กฐ ๊ด€๊ณ„๋ฅผ ํ™œ์šฉํ•˜๋Š” domain-specific lightweight GraphRAG์— ๊ฐ€๊น์Šต๋‹ˆ๋‹ค.

๋”ฐ๋ผ์„œ ์ด ํ”„๋กœ์ ํŠธ์˜ ํ•ต์‹ฌ ๊ฐ€์น˜๋Š” "GraphRAG๋ฅผ ์‚ฌ์šฉํ–ˆ๋‹ค"๋ณด๋‹ค ๋‹ค์Œ ๋ฌธ์žฅ์— ๋” ๊ฐ€๊น์Šต๋‹ˆ๋‹ค.

๋ฒ•๋ น ์กฐํ•ญ ๊ฐ„ ์ฐธ์กฐ ๊ทธ๋ž˜ํ”„์™€ hybrid retrieval์„ ๊ฒฐํ•ฉํ•ด ๊ธˆ์œต๋ณด์•ˆ ๊ทœ์ œ ์งˆ์˜์‘๋‹ต์˜ ๊ฒ€์ƒ‰ ๋ณ‘๋ชฉ์„ ์ค„์ด๋Š” RAG ์‹œ์Šคํ…œ

Current Limitations and Next Steps

  • ์ •๋Ÿ‰ RAG ํ‰๊ฐ€๋Š” ์•„์ง answer-only PPL ์ค‘์‹ฌ์ด๋ฉฐ, retrieval metric๊ณผ faithfulness metric ๋ณด๊ฐ•์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.
  • ์งˆ์˜๋ณ„ retriever ์„ ํƒ, top-k ์ ์ˆ˜, graph hop, context length, latency, generation token ์ˆ˜๋ฅผ ์ €์žฅํ•˜๋Š” ๊ตฌ์กฐํ™” tracing์ด ์•„์ง ๋ถ€์กฑํ•ฉ๋‹ˆ๋‹ค.
  • LLM์ด ๊ฒ€์ƒ‰ ์ „๋žต์„ ๋™์ ์œผ๋กœ ๊ณ„ํšํ•˜๊ณ  ์ˆ˜์ •ํ•˜๋Š” agentic RAG ๊ตฌ์กฐ๋Š” ์•„์ง ํฌํ•จ๋˜์–ด ์žˆ์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
  • ํ–ฅํ›„ ablation study๋กœ dense only, BM25 only, hybrid, hybrid + graph, hybrid + graph + rerank/MMR๋ฅผ ๋น„๊ตํ•˜๋ฉด ํ”„๋กœ์ ํŠธ์˜ ๊ธฐ์—ฌ๊ฐ€ ๋” ๋ช…ํ™•ํ•ด์ง‘๋‹ˆ๋‹ค.

Keywords

GraphRAG ยท Hybrid Search ยท Dense Retrieval ยท BM25 ยท FAISS ยท Korean Legal RAG ยท Financial Security Regulation ยท EXAONE ยท LoRA ยท MITRE ATT&CK

About

GraphRAG framework for Korean financial-security regulatory interpretation

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages