LlamaIndex, LLM 지식 그래프 구축을 위한 Property Graph Index 기능 제공
소개
LlamaIndex에서는 LLM을 사용하여 지식 그래프(KG, Knowledge Graph)를 구축할 수 있는 Property Graph Index를 공개하였습니다. LlamaIndex의 Property Grpah Index는 지식 그래프의 표현력을 극대화하며, 다양한 추출 방법과 쿼리 방식을 지원해 효율적인 데이터 관리를 지원합니다.
지식 그래프(KG, Knowledge Graph)는 데이터를 구조화하여 정보 간의 관계를 명확하게 표현하는 데 유용합니다. 전통적인 지식 그래프는 제한된 표현력을 가지고 있지만, LlamaIndex의 Property Graph Index는 이를 극복하기 위해 노드(node)와 관계(relationship) 간에 라벨(label)과 속성(property)을 할당하고, 벡터 임베딩을 사용하여 텍스트 노드를 표현하는 방법을 도입하였습니다. 또한, 임베딩 벡터 검색과 심볼릭 검색 방식을 모두 지원하여 다양한 쿼리 방식을 결합할 수 있습니다.
즉, 기존의 Knowledge Graph Index는 주제-서술어-목적어 구조(subject, predicate, object)로 지식을 구조화(eg. knowledge triples)을 사용하여 데이터의 관계를 표현하지만, Property Graph Index는 이를 넘어 라벨과 메타데이터를 사용하여 더욱 풍부한 모델링을 가능하게 합니다. 예를 들어, 복잡한 쿼리를 Cypher 언어로 표현할 수 있으며, 이는 기존의 방법보다 유연하고 강력합니다.
주요 특징
-
라벨 및 속성 할당: 노드와 관계에 라벨과 속성을 할당하여 데이터를 더 세밀하게 관리할 수 있습니다.
-
벡터 임베딩: 텍스트 노드를 벡터로 표현하여 하이브리드 검색을 가능하게 합니다.
-
다양한 추출 방법: 스키마 기반 추출, 암시적 추출, 자유 형식 추출 등 여러 가지 방법으로 지식 그래프를 구성할 수 있습니다.
-
다양한 쿼리 방식: 키워드/유의어 기반 검색, 벡터 유사성 검색, Cypher 쿼리 등 다양한 방식의 쿼리를 지원합니다.
사용법
- 그래프 구축: 스키마를 정의하여 데이터에서 지식 그래프를 추출합니다. 예를 들어, 스키마 기반 추출을 통해 특정 엔티티와 관계를 정의하고 이를 LLM을 통해 검증합니다.
python
Copy code
from llama_index.indices.property_graph import SchemaLLMPathExtractor
entities = Literal["PERSON", "PLACE", "THING"]
relations = Literal["PART_OF", "HAS", "IS_A"]
schema = {
"PERSON": ["PART_OF", "HAS", "IS_A"],
"PLACE": ["PART_OF", "HAS"],
"THING": ["IS_A"],
}
kg_extractor = SchemaLLMPathExtractor(
llm=llm,
possible_entities=entities,
possible_relations=relations,
kg_validation_schema=schema,
strict=True,
)
- 그래프 쿼리: 다양한 쿼리 방식을 사용하여 그래프 데이터를 검색하고 활용합니다. 예를 들어, Cypher 쿼리를 통해 복잡한 그래프 패턴을 표현하고 검색할 수 있습니다.
from llama_index.core.indices.property_graph import CypherTemplateRetriever
from llama_index.core.bridge.pydantic import BaseModel, Field
class Params(BaseModel):
names: list[str] = Field(description="A list of possible entity names or keywords related to the query.")
cypher_query = """
MATCH (c:Chunk)-[:MENTIONS]->(o)
WHERE o.name IN $names
RETURN c.text, o.name, o.label;
"""
sub_retriever = CypherTemplateRetriever(
index.property_graph_store,
Params,
cypher_query,
llm=llm,
)
Property Graph Index 공개 블로그 원문
더 읽어보기
이 글은 GPT 모델로 정리한 글을 바탕으로 한 것으로, 원문의 내용 또는 의도와 다르게 정리된 내용이 있을 수 있습니다. 관심있는 내용이시라면 원문도 함께 참고해주세요! 읽으시면서 어색하거나 잘못된 내용을 발견하시면 덧글로 알려주시기를 부탁드립니다.
파이토치 한국 사용자 모임
이 정리한 이 글이 유용하셨나요? 회원으로 가입하시면 주요 글들을 이메일
로 보내드립니다! (기본은 Weekly지만 Daily로 변경도 가능합니다.)
아래
쪽에 좋아요
를 눌러주시면 새로운 소식들을 정리하고 공유하는데 힘이 됩니다~