오늘은 LLM의 한계를 뛰어넘는 새로운 기술, GraphRAG에 대해 소개해 드리고자 합니다. 아래 포스팅을 기반으로 정리한 내용입니다.

참고 자료: https://microsoft.github.io/graphrag/


개요

최근 LLM(거대 언어 모델)의 성능을 높이기 위해 외부 정보를 활용하는 RAG 기술이 널리 사용되고 있습니다. 하지만 여러 문서에 흩어진 정보를 종합하거나, 방대한 데이터 속에서 전체적인 맥락을 파악해야 하는 복잡한 질문에는 명확한 한계를 보여주었습니다. 마치 흩어진 점들을 연결하지 못하는 것과 같았죠.

이러한 문제를 해결하기 위해 GraphRAG가 등장했습니다. GraphRAG는 단순히 텍스트를 작은 단위로 쪼개 검색하는 기존 방식에서 벗어나, 데이터 간의 관계를 구조화한 지식 그래프(Knowledge Graph)를 활용하는 한 단계 진보한 접근법입니다.


GraphRAG란?

  • 기존 RAG의 한계: 벡터 유사도 기반의 검색은 여러 문서에 걸친 복합적인 질문이나, 방대한 데이터의 전체적인 의미를 파악하는 데 어려움을 겪었습니다.
  • GraphRAG의 접근: 원본 텍스트에서 개체(Entity)와 관계(Relationship)를 추출하여 지식 그래프를 생성합니다. 이를 통해 데이터의 구조와 맥락을 파악하여 훨씬 더 정교하고 깊이 있는 답변을 제공할 수 있습니다.

실제로 GraphRAG는 여러 문서의 정보를 종합하여 추론해야 하는 질문이나, 데이터셋 전체의 요약된 개념을 이해해야 하는 질문에 대해 기존 방식보다 월등히 뛰어난 성능을 보여주었습니다.


GraphRAG의 구조

GraphRAG는 크게 인덱싱(Indexing)과 쿼리(Query) 두 단계로 나뉩니다.

1. 인덱싱 (Indexing)

  • 입력된 데이터를 분석 가능한 작은 단위(Text Units)로 분할합니다.
  • 각 단위에서 개체, 관계, 핵심 주장을 추출하여 지식 그래프를 구축합니다.
  • Leiden 클러스터링 기법 등을 사용해 그래프를 계층적 커뮤니티로 구조화하고, 각 커뮤니티를 요약하여 데이터셋 전체에 대한 이해도를 높입니다.

2. 쿼리 (Query)

생성된 지식 그래프를 활용해 다양한 방식으로 질문에 답합니다.

  • Global Search: 데이터 전체에 대한 종합적인 질문에 답하기 위해 커뮤니티 요약 정보를 활용합니다.
  • Local Search: 특정 개체와 관련된 질문에 답하기 위해 주변 노드와 관련 개념으로 탐색을 확장합니다.

이 외에도 Prompt 튜닝, 데이터 변경에 따른 버전 관리 기능 등을 통해 지속적으로 성능을 최적화할 수 있습니다.


정리

최근 RAG 프로젝트를 하면서 단순한 벡터 서치 기반의 RAG 만으로 내가 RAG를 사용한다고 말할 수 있을지 의문이 들었다. 또 복잡한 질문과 데이터를 활용해야하는 프로젝트에서 벡터서치만을 활용해서는 검색이 정말 맥락을 이해하고 있는건지 의문이 들었다. 또 단순히 청크 이상의 다양한 정보가 있는데도 적절하게 활용을 하고 있는 건지에 대해서도 의문이 들었다. GraphRAG는 이러한 문제를 해결할 가능성을 제시해줄 것 같다는 느낌이 들었다. 무엇보다 다양한 메타 데이터를 활용할 수 있고 데이터 간의 관계를 활용할 수 있다는 점에서 꼭 배워야 하는 기술이라고 느꼈다. 기본적인 내용을 정리했으니 다음에는 구현을 해봐야 겠다.

profile
AI 엔지니어 김태종입니다. 추천시스템, 이상탐지, LLM에 관심이 있습니다. 블로그에는 공부한 기술, 논문 혹은 개인적인 경험을 올리고 있습니다.

0개의 댓글