knowledge_graph 소개
knowledge_graph는 PDF 같은 텍스트 뭉치를 읽어 그 안의 개념과 개념 사이의 관계를 뽑아내고, 이를 노드와 엣지로 이뤄진 지식 그래프(Knowledge Graph)로 만드는 오픈소스 프로젝트입니다. 위 헤더 이미지는 이 저장소의 코드로 생성한 실제 그래프이고, 브라우저에서 직접 탐색할 수 있는 형태 로도 공개되어 있습니다.
이 프로젝트가 겨냥하는 최종 용도는 그래프 기반 검색 증강 생성(Graph Retrieval Augmented Generation, GRAG)입니다. 벡터 데이터베이스를 검색기로 삼는 기존 RAG 대신 그래프를 검색기로 써서 문서와 대화하는 방식으로, 저자는 이쪽이 텍스트를 훨씬 깊게 다룰 수 있는 접근이라고 설명합니다. 그래프가 만들어지고 나면 노드의 중심성(centrality)을 계산해 어떤 개념이 그 문헌에서 중요한지 따져 보거나, 커뮤니티를 계산해 개념을 묶어 보거나, 언뜻 무관해 보이는 개념 사이의 연결을 확인하는 식으로도 활용할 수 있습니다.
구현 측면에서 이 저장소는 모든 구성 요소를 로컬에 두는 방식을 택했습니다. 저자는 비용을 아끼기 위해 GPT를 쓰지 않는(no-GPT) 접근을 골랐고, 개념 추출에는 시스템 프롬프트를 잘 따르는 Mistral 7B OpenOrca를 사용합니다. 모델은 Ollama로 로컬에 띄우기 때문에 그래프 생성 자체에는 API 호출 비용이 들지 않습니다.
knowledge_graph가 추출하는 것은 개체가 아니라 개념
이 프로젝트는 개체명 인식(NER) 모델로 개체(entity)를 뽑는 대신, LLM으로 개념(concept) 을 추출합니다. 저자는 그 차이를 예시로 구분합니다. "Bangalore" 는 개체이고 "Pleasant weather in Bangalore" 는 개념이며, 경험상 개념 쪽이 더 의미 있는 지식 그래프를 만든다는 것입니다.
엣지를 정의하는 방식도 단순합니다. 서로 가까이 등장한 개념은 관련이 있다고 가정하고, 두 개념이 함께 언급된 텍스트 청크(chunk) 자체를 그 둘을 잇는 엣지로 삼습니다. 아래 그림은 "Mary had a little lamb" 문장으로 만든 최소 예시로, 개념들이 어떤 관계 이름을 달고 연결되는지 보여 줍니다.
knowledge_graph의 그래프 생성 과정
실제 생성 절차는 네 단계입니다. 먼저 텍스트 뭉치를 청크로 나누고 각 청크에 chunk_id 를 붙입니다. 그다음 청크마다 LLM으로 개념 쌍과 둘 사이의 의미적 관계를 추출하고, 이 관계에 가중치 W1을 부여합니다. 같은 개념 쌍 사이에 여러 관계가 있을 수 있고, 그런 관계 하나하나가 엣지가 됩니다.
세 번째 단계는 문맥적 근접성(contextual proximity)입니다. 같은 청크에 함께 등장한 개념들에도 관계를 부여하고 가중치 W2를 매깁니다. 같은 개념 쌍이 여러 청크에서 반복될 수 있으므로, 마지막 단계에서 비슷한 쌍을 묶어 가중치를 합산하고 관계 이름을 이어 붙입니다. 그 결과 서로 다른 개념 쌍마다 가중치와 관계 목록을 가진 엣지 하나만 남습니다. 여기에 더해 노드의 차수(degree)와 커뮤니티를 계산해 각각 노드 크기와 색을 정하는 데 씁니다.
이 절차는 저장소의 extract_graph.ipynb 노트북 에 구현되어 있어, 다른 문서에 적용하려면 이 노트북을 고쳐 쓰면 됩니다. 방법론을 더 자세히 풀어 쓴 Towards Data Science 기고문 도 함께 공개되어 있습니다.
knowledge_graph의 기술 스택
- Mistral 7B OpenOrca: 텍스트 청크에서 개념을 추출하는 LLM으로, 시스템 프롬프트 지시를 잘 따른다는 이유로 선택되었습니다.
- Ollama: 모델을 로컬에 띄우는 역할을 맡습니다. README의 설치 안내는 Ollama를 설치한 뒤
ollama run zephyr로 모델을 내려받고 서버를 띄우도록 적혀 있어, 본문 설명의 Mistral 7B OpenOrca와는 다른 모델을 예로 들고 있습니다. - Pandas: 그래프 스키마를 데이터프레임으로 다룹니다. 저자는 이후 단계에서 그래프 데이터베이스로 바꿀 수 있다고 적어 두었습니다.
- NetworkX: 그래프 자료구조와 알고리즘을 담당합니다.
- Pyvis: 시각화를 담당합니다. Python으로 자바스크립트 그래프 시각화를 만들어 주기 때문에 결과물을 그대로 웹에 올릴 수 있고, 앞서 언급한 GitHub Pages 그래프도 Pyvis로 생성한 것입니다.
knowledge_graph 설치 방법
Docker만 준비되어 있으면 저장소를 받아 이미지를 만들고 실행하는 세 단계로 끝납니다. 실행 후에는 8888 포트로 노트북 환경에 접속합니다.
git clone https://github.com/rahulnyk/knowledge_graph.git
cd knowledge_graph
docker build -t knowledge-graph .
docker run -p 8888:8888 knowledge-graph
knowledge_graph가 남겨 둔 과제
저자는 이 프로젝트를 완성된 도구가 아니라 함께 다듬을 출발점으로 소개하며, Medium과 GitHub에서 받은 제안을 그대로 개선 목록에 적어 두었습니다. 백엔드 쪽 과제로는 임베딩을 써서 의미가 비슷한 개념을 중복 제거하는 작업이 있습니다. "doctor" 와 "doctors" 처럼 LLM이 다르게 표기한 같은 개념을 합치고, "doctor" 와 "medical practitioner" 처럼 강하게 유사한 개념의 군집화를 강화하자는 제안입니다.
여기에 텍스트를 이해하는 데 도움이 되지 않는 지나치게 일반적인 개념이나 이상치를 걸러 내는 작업, 너무 자주 등장하는 개념에 가중치가 과하게 쏠리지 않도록 문맥적 근접성 계산을 개선하는 작업이 함께 올라 있습니다. 프런트엔드 쪽으로는 관심 주제 목록에서 시작해 하위 개념으로 파고드는 탐색 흐름을 갖춘 렌더링 화면을 만들자는 제안이 있습니다.
knowledge_graph의 라이선스
knowledge_graph는 MIT 라이선스로 공개되어 있어 개인 및 상업적 목적으로 자유롭게 사용할 수 있습니다.
knowledge_graph로 생성한 그래프 데모
https://rahulnyk.github.io/knowledge_graph/
knowledge_graph 프로젝트 GitHub 저장소
더 읽어보기
-
MiniKG - LLM 기반 (소규모) 지식 그래프(Knowledge Graph) 작성 및 검색, GraphRAG 시스템 구축 프로젝트
-
LightRAG: 지식 그래프 기반의 이중 검색 구조로 GraphRAG보다 빠른 RAG 프레임워크 (feat. EMNLP 2025)
이 글은 GPT 모델로 정리한 글을 바탕으로 한 것으로, 원문의 내용 또는 의도와 다르게 정리된 내용이 있을 수 있습니다. 관심있는 내용이시라면 원문도 함께 참고해주세요! 읽으시면서 어색하거나 잘못된 내용을 발견하시면 덧글로 알려주시기를 부탁드립니다. ![]()
파이토치 한국 사용자 모임
이 정리한 이 글이 유용하셨나요? 회원으로 가입하시면 주요 글들을 이메일
로 보내드립니다! 텔레그램(Telegram)이나 Slack/Discord/Teams/Dooray/GoogleChat 등으로도 새 글 알림을 받으실 수 있습니다. ![]()
아래
쪽에 좋아요
를 눌러주시면 새로운 소식들을 정리하고 공유하는데 힘이 됩니다~ ![]()


