텍스트 문서를 기업용 Knowledge Graphs로 변환
Source: Dev.to
텍스트 문서를 엔터프라이즈 수준 지식 그래프로 변환하기
기업은 보고서, 매뉴얼, 이메일 등 방대한 양의 비정형 텍스트 데이터를 보유하고 있습니다. 이러한 텍스트를 지식 그래프 형태로 변환하면 검색, 추론, 의사결정 지원이 크게 향상됩니다. 이번 포스트에서는 텍스트 문서를 로드하고, 청크로 나누고, 임베딩을 생성한 뒤, LLM을 활용해 엔터티와 관계를 추출하고, Neo4j에 저장해 쿼리할 수 있는 전체 파이프라인을 단계별로 살펴보겠습니다.
1️⃣ 환경 설정
pip install langchain openai neo4j pandas python-dotenv
langchain– LLM 호출 및 프롬프트 관리openai– 임베딩 및 텍스트 생성용 APIneo4j– 그래프 데이터베이스 드라이버pandas– 데이터 전처리 보조python-dotenv– 환경 변수 로드
.env 파일에 다음과 같이 키를 저장합니다.
OPENAI_API_KEY=your-openai-key
NEO4J_URI=bolt://localhost:7687
NEO4J_USER=neo4j
NEO4J_PASSWORD=your-neo4j-password
2️⃣ 문서 로드 및 전처리
from pathlib import Path
from langchain.document_loaders import TextLoader, PyPDFLoader
def load_documents(folder: str):
docs = []
for file_path in Path(folder).glob("*"):
if file_path.suffix.lower() == ".txt":
loader = TextLoader(str(file_path))
elif file_path.suffix.lower() == ".pdf":
loader = PyPDFLoader(str(file_path))
else:
continue
docs.extend(loader.load())
return docs
documents = load_documents("./data")
- 텍스트와 PDF 파일을 자동으로 감지해 로드합니다.
documents변수는Document객체 리스트이며, 각각page_content와 메타데이터를 포함합니다.
3️⃣ 텍스트 청크로 분할
from langchain.text_splitter import RecursiveCharacterTextSplitter
splitter = RecursiveCharacterTextSplitter(
chunk_size=1000,
chunk_overlap=200,
separators=["\n\n", "\n", " "]
)
chunks = splitter.split_documents(documents)
- 한 번에 1,000자를 초과하지 않도록 청크를 만들고, 200자 정도 겹치게 하여 문맥 손실을 최소화합니다.
4️⃣ 임베딩 생성 (벡터화)
from langchain.embeddings import OpenAIEmbeddings
embeddings = OpenAIEmbeddings(model="text-embedding-ada-002")
vector_store = embeddings.embed_documents([c.page_content for c in chunks])
- OpenAI
text-embedding-ada-002모델을 사용해 각 청크를 고차원 벡터로 변환합니다. - 이 벡터는 이후 유사도 검색 및 관계 추출 단계에서 활용됩니다.
5️⃣ LLM을 이용한 엔터티·관계 추출
프롬프트 예시
다음 텍스트에서 주어‑동사‑목적어 형태의 삼중항(triple)을 모두 추출하세요.
각 삼중항은 JSON 객체 { "subject": "...", "predicate": "...", "object": "..." } 형태로 반환합니다.
텍스트:
{input}
파이썬 구현
from langchain.llms import OpenAI
import json
llm = OpenAI(model_name="gpt-3.5-turbo", temperature=0)
def extract_triples(text: str):
prompt = f"""다음 텍스트에서 주어‑동사‑목적어 형태의 삼중항(triple)을 모두 추출하세요.
각 삼중항은 JSON 객체 {{ "subject": "...", "predicate": "...", "object": "..." }} 형태로 반환합니다.
텍스트:
{text}
"""
response = llm(prompt)
try:
triples = json.loads(response)
except json.JSONDecodeError:
triples = [] # 파싱 실패 시 빈 리스트 반환
return triples
all_triples = []
for chunk in chunks:
all_triples.extend(extract_triples(chunk.page_content))
gpt-3.5-turbo모델을 사용해 삼중항(subject‑predicate‑object) 형태로 구조화된 데이터를 추출합니다.- 반환값은 JSON 리스트이므로 바로 파싱이 가능합니다.
6️⃣ Neo4j에 그래프 저장
from neo4j import GraphDatabase
driver = GraphDatabase.driver(
getenv("NEO4J_URI"),
auth=(getenv("NEO4J_USER"), getenv("NEO4J_PASSWORD"))
)
def create_graph(triples):
with driver.session() as session:
for t in triples:
query = """
MERGE (s:Entity {name: $subject})
MERGE (o:Entity {name: $object})
MERGE (s)-[r:RELATION {type: $predicate}]->(o)
"""
session.run(query, subject=t["subject"], object=t["object"], predicate=t["predicate"])
create_graph(all_triples)
MERGE구문을 사용해 중복 노드와 중복 관계를 방지합니다.Entity라벨은 모든 엔터티에 공통이며,RELATION관계에type속성으로 동사를 저장합니다.
7️⃣ 그래프 쿼리 예시
(1) 특정 엔터티와 직접 연결된 노드 찾기
MATCH (e:Entity {name: "인공지능"})-[:RELATION]->(connected)
RETURN connected.name AS 연결된_엔터티, type(r) AS 관계유형
LIMIT 10;
(2) 두 엔터티 사이의 최단 경로 탐색
MATCH p=shortestPath(
(a:Entity {name: "인공지능"})-[:RELATION*..5]-(b:Entity {name: "클라우드"})
)
RETURN p;
(3) 특정 관계 유형을 가진 모든 삼중항 조회
MATCH (s:Entity)-[r:RELATION {type: "사용한다"}]->(o:Entity)
RETURN s.name AS 주체, r.type AS 관계, o.name AS 객체;
8️⃣ 확장 및 운영 팁
| 항목 | 권장 방법 |
|---|---|
| 스케줄링 | Airflow 또는 Prefect 로 파이프라인을 정기 실행 |
| 대용량 처리 | 청크당 병렬 LLM 호출 (asyncio) 및 Neo4j UNWIND 배치 삽입 |
| 버전 관리 | 추출된 삼중항을 CSV/Parquet 로 백업하고, Git LFS 로 메타데이터 관리 |
| 보안 | OpenAI 키와 Neo4j 비밀번호를 Vault 또는 AWS Secrets Manager에 저장 |
| 모니터링 | Prometheus + Grafana 로 API 호출량, 임베딩 비용, Neo4j 쿼리 지연 시간 추적 |
🎉 마무리
텍스트 문서를 청크 → 임베딩 → LLM 기반 삼중항 추출 → Neo4j 그래프 순으로 변환하면, 기업 내부 지식이 검색 가능하고, 관계 기반 탐색이 가능한 형태로 전환됩니다.
- 검색: 벡터 검색 + 그래프 탐색으로 정확도 향상
- 추론: 관계 패턴을 활용한 자동화된 인사이트 도출
- 통합: 기존 ERP, CRM 시스템과 Neo4j를 연동해 실시간 지식 활용 가능
이 파이프라인을 기반으로 조직 고유의 도메인에 맞는 맞춤형 지식 그래프를 구축해 보세요. 질문이나 개선 아이디어가 있다면 언제든 댓글로 알려 주세요! 🚀
소개
오늘날 데이터 중심 기업에서는 중요한 지식이 PDF, 이메일, 계약서, 보고서, 매뉴얼 및 내부 문서와 같은 비정형 콘텐츠에 묻혀 있는 경우가 많습니다. 이러한 소스에는 귀중한 인사이트가 담겨 있지만, 기존의 키워드 검색은 문서 간 정보를 연결하는 데 한계가 있어 지식을 발견하고 활용하기 어렵습니다.
이때 지식 그래프가 게임 체인저가 됩니다. 문서를 별개의 텍스트 블록으로 취급하는 대신, AI 기반 지식 그래프는 언어를 엔터티와 관계의 연결된 지식 차트로 변환합니다. 이러한 전환을 통해 기업은 기본 검색을 넘어 보다 깊은 이해, 맥락 기반 탐색 및 스마트한 분석을 실현할 수 있습니다.
이 블로그에서는 조직이 비정형 텍스트를 기업용 지식 그래프로 전환하는 과정을 살펴봅니다. 기술 파이프라인을 단계별로 설명하고, LLM, 그래프 데이터베이스 및 RAG 아키텍처가 어떻게 결합되어 흩어진 정보를 의미 있는 비즈니스 인텔리전스로 바꾸는지 보여드립니다.
Source: …
지식 그래프란 무엇인가?
지식 그래프는 **엔터티(노드)**와 관계(엣지) 로 구성된 구조화된 네트워크로, 현실 세계의 개념과 그들 간의 관계를 모델링합니다.
관계형 데이터베이스나 평면 문서와 달리, 지식 그래프 기반 AI 시스템은 다음과 같은 관계를 명시적으로 저장함으로써 의미와 컨텍스트를 보존합니다:
approved byreferencesimpactscomplies with
예시: 법률 계약
| 노드 | 설명 |
|---|---|
| Vendor | 상품/서비스를 제공하는 공급업체 |
| Compliance Clause | 준수를 규정하는 특정 계약 조항 |
| Regulation | 반드시 따라야 하는 외부 법률 또는 규칙 |
| Department | 계약에 의해 영향을 받는 내부 사업 부서 |
지식 그래프에서는 각각을 노드로 만들고 의미 있는 관계로 연결합니다. 이를 통해 다음과 같은 고급 질문이 가능해집니다:
- 고위험 준수 조항이 포함된 계약을 가진 공급업체는 누구인가?
- 새로운 규제에 의해 영향을 받는 부서는 어디인가?
- 조직 전체에서 특정 법률 용어를 참조하는 계약은 어떤 것이 있는가?
이것은 키워드 검색이 아니라 그래프 탐색이며, AI에서 지식 그래프가 제공하는 기능입니다.
수동에서 자동으로: LLM의 역할
전통적으로 지식 그래프를 구축하려면 수동 주석 및 규칙 기반 NLP 파이프라인이 필요했습니다. 오늘날 LLM을 활용한 지식 그래프는 이 과정을 확장 가능하고 자동화합니다.
최신 대형 언어 모델이 할 수 있는 일:
- 맥락 이해
- 엔터티 및 관계 추출
- 구조화된 출력 정규화
- 다양한 도메인에서 작업
LLM Knowledge Graph Builder와 같은 도구는 기업이 수개월에 걸친 수동 작업 없이 원시 텍스트를 연결된 지식으로 자동 변환할 수 있음을 보여줍니다.
실용적인 3‑Step 지식 그래프 파이프라인
- LLM을 사용한 엔터티 및 관계 추출
- 엔터티 모호성 해소 및 통합
- Neo4j에 그래프 로드하여 쿼리 및 분석 수행
완전한 작동 구현은 LLM Knowledge Graph Builder GitHub 저장소에서 확인할 수 있으며, 프롬프트, Python 스크립트, 샘플 데이터셋이 포함되어 있습니다.
Source: …
End‑to‑End Enterprise Pipeline
1. Document Ingestion & Preprocessing
텍스트는 여러 소스에서 먼저 추출됩니다:
- PDF (스캔된 문서는 OCR을 통해)
- Word 파일
- 이메일
- 웹 페이지
이 단계에는 다음이 포함됩니다:
- 텍스트 추출 및 정리
- 잡음 제거 (헤더, 푸터, 포맷)
- 효율적인 LLM 처리를 위한 긴 문서의 청크화
적절한 전처리는 고품질 지식 그래프 추출을 보장합니다. 입력이 부실하면 그래프가 신뢰할 수 없게 됩니다.
2. Intelligent Entity & Relationship Extraction (LLMs)
고급 LLM을 사용하여 시스템은 다음을 식별합니다:
- 엔터티: 사람, 조직, 조항, 제품, 개념
- 관계: 컨텍스트 내에서 엔터티가 어떻게 상호작용하는지
키워드 추출과 달리 LLM은 뉘앙스를 이해합니다:
- “Apple”을 회사와 과일로 구분
- “John approved the contract”를 의미적 관계로 인식
출력은 AI 시스템의 지식 그래프를 구성하는 구조화된 트리플 집합입니다.
3. Entity Disambiguation & Consolidation
문서가 독립적으로 처리되기 때문에 중복이 자연스럽게 발생합니다:
Alice Henderson (Legal Lead)A. Henderson (Legal Dept.)
엔터티 해소를 통해:
- 중복 노드가 병합되고
- 속성이 통합됩니다
그 결과 그래프는 실제 엔터티를 정확히 반영하게 되며, 이는 엔터프라이즈 수준의 신뢰할 수 있는 지식 그래프에 필수적입니다.
4. Ontology & Schema Alignment
엔터프라이즈 지식은 관리되어야 합니다. 온톨로지는 다음을 정의합니다:
- 엔터티 유형 (Person, Policy, Contract)
- 허용되는 관계 유형
- 도메인별 제약 조건
스키마 정렬이 없으면 그래프는 혼란스러워집니다. 정렬이 있으면 AI 기반 지식 그래프는 신뢰성, 설명 가능성, 감사 가능성을 갖게 됩니다.
5. Graph Construction & Database Integration
구조화된 데이터는 다음과 같은 그래프 데이터베이스에 저장됩니다:
- Neo4j
- TigerGraph
- Amazon Neptune
이들 플랫폼은 다음을 지원합니다:
- 빠른 그래프 탐색
- 복잡한 다중 홉 쿼리
- 분석, BI, AI 시스템과의 통합
여기서 지식 차트가 실제 운영 단계에 들어갑니다.
6. Validation, Governance & Continuous Updates
엔터프라이즈 지식은 지속적으로 진화합니다. 프로덕션 급 지식 그래프는 다음을 필요로 합니다:
- 인간이 참여하는 검증 (Human‑in‑the‑loop)
- 버전 관리 및 변경 추적
- 점진적 인제스트 파이프라인
- 품질 점수와 거버넌스 워크플로
이를 통해 장기적인 신뢰와 컴플라이언스를 보장합니다.
Knowledge Graphs + RAG: 강력한 조합
벡터 데이터베이스는 의미 검색을 가능하게 하지만 명시적인 관계는 부족합니다. Retrieval‑Augmented Generation (RAG)용 지식 그래프는 다음을 가능하게 하여 벡터 검색을 보완합니다:
- 관계‑인식 추론
- 다중‑홉 추론
- 설명 가능한 AI 결정
왜 결합해야 할까?
- 벡터 검색은 관련성을 제공합니다.
- RAG의 지식 그래프는 추론을 제공합니다.
LangChain을 활용한 knowledge‑graph‑RAG와 같은 프레임워크는 엔터프라이즈급 RAG 시스템에서 점점 더 인기를 얻고 있습니다.
작동 방식
| 구성 요소 | 역할 |
|---|---|
| 그래프 | 구조화된 컨텍스트 제공 |
| 벡터 | 관련 패시지 검색 |
| LLM | 근거가 있는, 설명 가능한 답변 생성 |
이 하이브리드 접근 방식은 다음을 향상시킵니다:
- 정확도
- 환각 제어
- 엔터프라이즈 신뢰
RAG 시스템의 지식 그래프는 이제 규정 준수, 법률 분석, 의료 인텔리전스, 위험 평가에 필수적인 기반이 되고 있습니다.
실제 비즈니스 영향
- 사일로 간 데이터 연결
- 숨겨진 인사이트 발견
- 기능 전반에 걸쳐 더 나은 의사결정
예시 사용 사례
법률 및 컴플라이언스
법률 및 컴플라이언스 팀에서는 지식 그래프가 **[unfinished – content truncated]**를 돕습니다.
(원본 내용이 여기서 갑자기 끝납니다; 섹션을 직접 상세히 채우고 싶으실 수 있습니다.)
기업 애플리케이션의 지식 그래프
대량의 계약서와 정책에 숨겨진 위험을 파악합니다. 조항, 규정, 공급업체 및 부서를 연결함으로써 조직은 고위험 조항을 신속히 식별하고 규제 변화가 기존 계약에 미치는 영향을 이해할 수 있습니다. 이를 통해 계약 검토 속도가 빨라지고, 컴플라이언스 모니터링이 향상되며, 법적 노출이 감소합니다.
헬스케어
헬스케어 분야에서는 지식 그래프가 환자 기록, 의료 상태, 치료법 및 결과를 하나의 통합된 뷰로 연결합니다. 이는 증상, 진단 및 치료법 간의 관계를 보여줌으로써 임상 의사결정을 지원하고, 보다 개인화된 치료와 향상된 치료 결과를 가능하게 합니다.
금융 서비스
금융 기관은 거래, 계좌, 고객 및 외부 엔터티를 연결하여 사기 탐지와 위험 관리를 수행합니다. 이러한 연결은 기존 시스템으로는 파악하기 어려운 의심스러운 패턴을 발견하도록 도와주며, 조사 및 위험 모델링을 지원합니다.
고객 지원
고객 지원에서는 이슈를 제품, 매뉴얼, 알려진 해결 방법 및 과거 해결 사례와 연결합니다. 이를 통해 지원 팀과 AI 어시스턴트가 정확한 답변을 더 빠르게 찾아 해결 시간을 단축하고 고객 만족도를 높일 수 있습니다.
대부분의 엔터프라이즈 파이프라인은 지식 그래프를 사용합니다
Typical Python‑based workflow:
- LLM 오케스트레이션
- 엔터티 추출
- 그래프 로드
- 검증 로직
Python 생태계는 다음과 원활하게 통합됩니다
- Neo4j 드라이버
- LangChain
- LLM API
- RAG 프레임워크
이로 인해 지식 그래프가 디자인상 AI‑준비됩니다.
주요 과제 해결
- LLM 출력 변동성
- 대규모 성능
- 신뢰성 및 설명 가능성
왜 엔터프라이즈‑레디 지식 그래프를 구축해야 할까요?
텍스트 문서를 엔터프라이즈‑레디 지식 그래프로 변환하면 원시 데이터를 연결된 인사이트로 전환하여 보다 스마트한 검색, 추론 및 AI‑구동 애플리케이션을 가능하게 합니다. 구조화된 추출, 엔터티 해소, 스키마 거버넌스 및 그래프 영속성을 활용함으로써 기업은 이전에 숨겨져 있던 지식을 발굴하고 규모에 맞는 의사결정을 크게 향상시킬 수 있습니다.
RAG 시스템, 규정 준수 엔진, 엔터프라이즈 검색 도구 등을 구축하든, 지식 그래프는 현대 데이터 과제에 대한 구조적이고 확장 가능한 기반을 제공합니다.
이러한 효과를 직접 확인하려면 EzInsights AI 무료 체험을 살펴보고 연결된 지식이 엔터프라이즈 인텔리전스를 어떻게 변화시키는지 경험해 보세요.