지식 그래프와 벡터 데이터베이스를 사용하여 그래프 RAG를 구현하는 방법

 

이 게시물에서는 KG와 LLM이 함께 사용되는 인기 있는 방법 중 하나인 Graph RAG, GraphRAG, GRAG 또는 Semantic RAG라고도 불리는 지식 그래프를 사용하는 RAG에 중점을 둘 것입니다. 검색 증강 생성(RAG)은 관련 정보를 검색하여 응답을 생성하는 LLM으로 전송되는 프롬프트를 보강하는 것입니다. 아이디어는 데이터에 대한 교육을 받지 않은 LLM에 프롬프트를 직접 보내는 대신 LLM이 프롬프트에 정확하게 응답하는 데 필요한 관련 정보로 프롬프트를 보완할 수 있다는 것입니다. 이전 게시물에서 사용한 예는 자기 소개서를 작성하기 위해 직무 설명과 이력서를 ChatGPT에 복사하는 것입니다. LLM은 이력서와 내가 지원하는 직업에 대한 설명을 제공하면 '자기소개서를 작성해 주세요'라는 질문에 훨씬 더 적절한 응답을 제공할 수 있습니다. 지식 그래프는 지식을 저장하기 위해 만들어졌기 때문에 내부 데이터를 저장하고 추가 컨텍스트로 LLM 프롬프트를 보완하여 응답의 정확성과 컨텍스트 이해를 향상시키는 완벽한 방법입니다.

 

중요한 점은 제가 자주 오해하는 부분이 있는데, RAG와 KG(Graph RAG)를 이용한 RAG는 제품이나 기술 자체가 아니라 기술을 결합하는 방법론이라는 점입니다. Graph RAG를 발명하거나 소유하거나 독점하는 사람은 없습니다. 그러나 대부분의 사람들은 이 두 기술이 결합될 때 가질 수 있는 잠재력을 볼 수 있으며, 두 기술을 결합함으로써 얻을 수 있는 이점을 입증하는 연구가 점점 더 많아지고 있습니다.

일반적으로 RAG의 검색 부분에 KG를 사용하는 세 가지 방법이 있습니다.

벡터 기반 검색: KG를 벡터화하여 벡터 데이터베이스에 저장합니다. 그런 다음 자연어 프롬프트를 벡터화하면 벡터 데이터베이스에서 프롬프트와 가장 유사한 벡터를 찾을 수 있습니다. 이러한 벡터는 그래프의 엔터티에 해당하므로 자연어 프롬프트가 제공되면 그래프에서 가장 '관련된' 엔터티를 반환할 수 있습니다. 그래프 없이 벡터 기반 검색을 수행할 수 있습니다. 이는 실제로 RAG가 구현된 원래 방식으로, 때로는 Baseline RAG라고도 합니다. SQL 데이터베이스 또는 콘텐츠를 벡터화하고 쿼리 시 검색합니다.

 

프롬프트에서 쿼리로 검색: LLM을 사용하여 SPARQL 또는 Cypher 쿼리를 작성하고 KG에 대한 쿼리를 사용한 다음 반환된 결과를 사용하여 프롬프트를 강화합니다.
하이브리드(벡터 + SPARQL): 이 두 가지 접근 방식을 모든 종류의 흥미로운 방식으로 결합할 수 있습니다. 이 튜토리얼에서는 이러한 방법을 결합할 수 있는 몇 가지 방법을 보여 드리겠습니다. 주로 초기 검색에 벡터화를 사용한 다음 SPARQL 쿼리를 사용하여 결과를 구체화하는 데 중점을 둘 것입니다.
그러나 검색, 유사성 및 RAG를 위해 벡터 데이터베이스와 KG를 결합하는 방법에는 여러 가지가 있습니다. 이는 각각의 장점과 단점을 강조하고 이를 함께 사용하는 경우의 이점을 강조하기 위한 예시일 뿐입니다. 여기서 이들을 함께 사용하는 방식(초기 검색을 위한 벡터화와 필터링을 위한 SPARQL)은 고유하지 않습니다. 나는 이것이 다른 곳에서 구현되는 것을 보았습니다. 제가 들은 좋은 예는 대형 가구 제조업체의 누군가로부터 들었던 일화입니다. 그는 벡터 데이터베이스가 소파를 구입하는 사람들에게 보푸라기 브러시를 추천할 수 있지만 지식 그래프는 재료, 속성 및 관계를 이해하고 보푸라기 브러시가 가죽 소파를 구입하는 사람들에게 권장되지 않도록 보장할 것이라고 말했습니다.

 

이 튜토리얼에서는 다음을 수행합니다.

의미론적 검색, 유사성 검색 및 RAG(벡터 기반 검색)를 테스트하기 위해 데이터 세트를 벡터 데이터베이스로 벡터화합니다.
데이터를 KG로 변환하여 의미 검색, 유사성 검색 및 RAG(질의 프롬프트 검색)를 테스트하지만 LLM이 자연 언어 프롬프트를 SPARQL 쿼리)
지식 그래프의 태그와 URI가 있는 데이터 세트를 벡터 데이터베이스("벡터화된 지식 그래프"라고 함)로 벡터화하고 의미론적 검색, 유사성 및 RAG(하이브리드)를 테스트합니다.
목표는 이러한 기능에 대한 KG와 벡터 데이터베이스 간의 차이점을 설명하고 함께 작동할 수 있는 몇 가지 방법을 보여주는 것입니다. 다음은 벡터 데이터베이스와 지식 그래프를 함께 사용하여 고급 쿼리를 실행하는 방법에 대한 높은 수준의 개요입니다.

 

더 이상 읽고 싶지 않다면 요약하자면 다음과 같습니다.

벡터 데이터베이스는 몇 가지 주의사항을 제외하고 의미론적 검색, 유사성 계산 및 일부 기본 형태의 RAG를 매우 잘 실행할 수 있습니다. 첫 번째 주의 사항은 내가 사용하는 데이터에 저널 기사의 초록이 포함되어 있다는 것입니다. 즉, 데이터와 관련된 구조화되지 않은 텍스트가 상당히 많이 포함되어 있다는 것입니다. 벡터화 모델은 주로 구조화되지 않은 데이터에 대해 훈련되므로 엔터티와 관련된 텍스트 덩어리가 제공될 때 잘 작동합니다.
즉, 데이터를 벡터 데이터베이스로 가져오고 쿼리할 준비를 하는 데 드는 오버헤드가 거의 없습니다. 구조화되지 않은 일부 데이터가 포함된 데이터 세트가 있는 경우 15분 안에 벡터화하고 검색을 시작할 수 있습니다.

 

당연히 벡터 데이터베이스만 사용할 때의 가장 큰 단점 중 하나는 설명 가능성이 부족하다는 것입니다. 응답에는 세 가지 좋은 결과가 있을 수 있고 하나는 별로 의미가 없는 결과가 있을 수 있으며, 네 번째 결과가 왜 있는지 알 수 있는 방법이 없습니다.
벡터 데이터베이스에서 관련 없는 콘텐츠가 반환될 가능성은 검색 및 유사성 측면에서 귀찮은 일이지만 RAG에게는 큰 문제입니다. 4개의 기사로 프롬프트를 보강하고 그 중 하나가 완전히 관련 없는 주제에 관한 것이라면 LLM의 응답은 오해의 소지가 있을 것입니다. 이를 흔히 '컨텍스트 중독'이라고 합니다.
컨텍스트 중독에서 특히 위험한 점은 응답이 실제로 부정확할 필요는 없으며 부정확한 데이터에 기반한 것이 아니라 질문에 대답하기 위해 잘못된 데이터를 사용한다는 것입니다. 이 튜토리얼에서 제가 찾은 예는 "구강 신생물에 대한 치료법"이라는 프롬프트에 대한 것입니다. 검색된 기사 중 하나는 직장암 치료법에 대해 수행된 연구에 관한 것으로, 요약을 위해 LLM에 전송되었습니다. 나는 의사는 아니지만 직장이 입의 일부가 아니라고 확신합니다. LLM은 구강암과 직장암 모두에 대한 연구와 다양한 치료 옵션의 효과를 정확하게 요약했지만 항상 암 유형을 언급하지는 않았습니다. 따라서 사용자는 LLM에 구강암 치료법을 설명하도록 요청한 후 직장암에 대한 다양한 치료 옵션을 설명하는 LLM을 무의식적으로 읽게 됩니다.

 

KG가 의미론적 검색과 유사성 검색을 잘 수행할 수 있는 정도는 메타데이터의 품질과 메타데이터가 연결되는 제어된 어휘의 함수입니다. 이 튜토리얼의 예제 데이터 세트에서 저널 기사는 모두 이미 주제 용어로 태그가 지정되어 있습니다. 이러한 용어는 국립 보건원(National Institutes of Health)의 MeSH(Medical Subject Headings)라는 풍부한 통제 어휘의 일부입니다. 그렇기 때문에 우리는 의미론적 검색과 유사성을 상대적으로 쉽게 수행할 수 있습니다.
RAG에 대한 지식 기반으로 사용하기 위해 KG를 벡터 데이터베이스로 직접 벡터화하면 몇 가지 이점이 있을 수 있지만 이 튜토리얼에서는 그렇게 하지 않았습니다. 방금 데이터를 표 형식으로 벡터화했지만 벡터를 다시 KG에 연결할 수 있도록 각 기사의 URI에 대한 열을 추가했습니다.

 

의미 검색, 유사성 및 RAG에 KG를 사용하는 가장 큰 장점 중 하나는 설명 가능성입니다. 특정 결과가 반환된 이유를 언제든지 설명할 수 있습니다. 해당 결과에는 특정 개념으로 태그가 지정되었거나 특정 메타데이터 속성이 있습니다.
내가 예상하지 못한 KG의 또 다른 이점은 "향상된 데이터 강화" 또는 "전문가로서의 그래프"라고도 불리는 것입니다. KG를 사용하여 검색어를 확장하거나 구체화할 수 있습니다. 예를 들어 유사한 용어, 더 좁은 용어 또는 특정 방법으로 검색어와 관련된 용어를 찾아 검색어를 확장하거나 구체화할 수 있습니다. 예를 들어, "구강암"으로 검색을 시작할 수 있지만 KG 용어 및 관계를 기반으로 "치은 신생물 및 구개 신생물"로 검색을 세분화할 수 있습니다.
KG 사용을 시작하는 데 가장 큰 장애물 중 하나는 KG를 구축해야 한다는 것입니다. 즉, LLM을 사용하여 KG 구축 속도를 높이는 방법은 여러 가지가 있습니다(위 그림 1).
KG만 사용할 때의 한 가지 단점은 모든 작업을 수행하려면 SPARQL 쿼리를 작성해야 한다는 것입니다. 따라서 위에서 설명한 프롬프트-쿼리 검색의 인기가 높아졌습니다.

Designed by JB FACTORY