MS사의 graphRAG 톺아보기

jiyoon·2024년 8월 28일

KG 지식그래프

목록 보기
2/6

MS사의 GraphRAG에 대한 Q&A ✨

1. 전역 검색과 지역 검색을 분리해서 검색하는지, 통합해서 답변을 내놓는지? 🤔

GraphRAG에서는 전역 검색(Global Search)과 지역 검색(Local Search)이 별도로 제공됩니다. 각 검색 방식은 다음과 같은 특징이 있어요:

  • 전역 검색: 코퍼스 전체를 대상으로 한 포괄적인 질문에 답하기 위해 사용됩니다. 이 방식은 커뮤니티 요약을 활용하여 전체적인 이해를 바탕으로 답변을 제공합니다.
  • 지역 검색: 특정 엔티티에 대한 질문에 답하는 데 사용됩니다. 엔티티와 연결된 이웃 노드 및 관련 개념들을 확장하여 답변하죠.

이 두 가지 방식은 별도로 실행되며, 질문의 성격에 따라 적절한 검색 모드를 선택해서 사용해야 해요. 두 방식을 통합해서 하나의 답변을 내놓는 방식에 대해서는 명시적인 설명은 없지만, 사용자가 상황에 맞게 선택해야 할 것 같아요.

1.1 그럼 사용자가 두 검색 방법을 선택하는 건가요, 아니면 GraphRAG가 알아서 방법을 선택해주나요?

사용자가 검색 방식을 선택합니다.

2. 텍스트 임베딩이 정확히 뭐예요? 인덱스와 임베딩의 차이가 뭔지 알려주세요! 📚

GraphRAG에서 텍스트 임베딩과 인덱스는 중요한 역할을 해요. 간단히 설명드릴게요:

  • 텍스트 임베딩:

    • 목적: 텍스트의 의미를 숫자 벡터로 변환해서 컴퓨터가 이해할 수 있게 만듭니다.
    • 방법: 텍스트를 고차원의 벡터로 변환하죠.
    • 사용: 주로 유사성 검색이나 클러스터링에 활용돼요.
  • 인덱스:

    • 목적: 데이터를 효율적으로 검색하고 접근할 수 있도록 구조화하는 데 있어요.
    • 방법: 텍스트를 분할하고, 엔티티 및 관계를 추출한 후 그래프 구조로 만듭니다.
    • 사용: 쿼리 시 관련 정보를 빠르게 찾고 접근하는 데 사용됩니다.

결론적으로, 임베딩은 텍스트의 의미를 벡터로 표현하는 것이 주 목적이고, 인덱스는 이를 포함한 전체 데이터를 구조화하는 데 목적이 있어요. GraphRAG에서는 텍스트 임베딩이 인덱싱 과정의 일부로 사용된다고 보면 됩니다.

3. Plaintext Input Data - 이해가 잘 안 되네요. 파일 패턴을 .txt로 한다는 건가요? 📝

네, 맞아요! GraphRAG는 .txt 파일뿐만 아니라 다양한 텍스트 기반 파일 형식을 처리할 수 있어요. 지원되는 파일 형식은 다음과 같습니다:

  • .txt (텍스트 파일)
  • .md (마크다운 파일)
  • .pdf (PDF 문서)
  • .docx (Microsoft Word 문서)
  • .html (HTML 파일)
  • .csv (CSV 파일)
  • .json (JSON 파일)

GraphRAG는 다양한 파일 형식을 처리할 수 있도록 설정 파일에서 file_pattern 매개변수를 조정할 수 있어요. 사용자 정의 데이터 로더를 통해 다른 파일 형식도 추가로 지원할 수 있습니다.

3.1 GraphRAG가 처리할 수 있는 파일 형식은 어떻게 되나요?

GraphRAG는 위에 언급한 텍스트 기반 파일 형식을 모두 지원하며, 이 외에도 필요에 따라 추가적인 파일 형식을 지원하도록 설정할 수 있어요. 특히 텍스트 데이터는 주로 .txt, .md, .pdf 같은 형식으로 처리됩니다. 📂

4. blob이 무슨 형식인가요? 🗃️

"Blob"은 "Binary Large OBject"의 약자로, 대용량 바이너리 데이터를 저장하는 형식을 의미해요. GraphRAG에서는 주로 Azure Blob Storage와 관련이 있을 가능성이 큽니다.

Azure Blob Storage는 Microsoft Azure의 클라우드 저장소 솔루션으로, 다양한 비구조화 데이터를 저장할 수 있습니다. Blob 형식의 주요 특징은 다음과 같아요:

  • 비구조화 데이터 저장: 텍스트 파일, 이미지, 비디오 등 다양한 데이터를 저장할 수 있어요.
  • 대용량 데이터 지원: 효율적으로 대량 데이터를 관리할 수 있습니다.
  • 확장성: 필요에 따라 저장 용량을 쉽게 확장 가능해요.
  • HTTP/HTTPS 접근: 표준 프로토콜을 통해 데이터에 접근할 수 있어요.

4.1 GraphRAG의 Input Data 형식은 어떻게 되나요?

GraphRAG는 주로 텍스트 기반 데이터를 처리하도록 설계되었어요. 이미지, 비디오, 음성 등의 비텍스트 데이터를 직접적으로 처리하는 기능은 명시적으로 언급되어 있지 않지만, Azure Blob Storage를 통해 대량의 텍스트 데이터를 저장하고 접근할 수 있습니다.

비텍스트 데이터는 전처리를 통해 텍스트 형태로 변환한 후에야 활용이 가능합니다. 예를 들어, 이미지에 대한 설명을 텍스트로 변환하거나, 음성을 텍스트로 변환하여 처리하는 방식이 있죠. 📄🎥🎧

5. Index를 실행할 때 더 나은 결과를 얻을 수 있기 때문에 강력히 권장한다는데, 인덱스가 뭘 해주길래요? 🔍

인덱스는 GraphRAG에서 매우 중요한 역할을 해요. 인덱싱 과정에서 다음과 같은 작업이 이루어집니다:

  1. 텍스트 분할: 입력된 코퍼스를 관리 가능한 단위로 나눕니다.
  2. 정보 추출: LLM을 사용하여 엔티티, 관계, 주요 내용을 추출합니다.
  3. 그래프 구조화: 추출된 정보를 바탕으로 그래프 구조를 생성합니다.
  4. 클러스터링: Leiden 알고리즘을 사용해 그래프를 계층적으로 클러스터링합니다.
  5. 요약 생성: 각 클러스터와 구성요소에 대한 요약을 생성합니다.

이 과정은 Auto Templating과 밀접하게 연관되어 있어요. 인덱싱을 통해 생성된 구조화된 정보와 요약은 템플릿 생성에 중요한 입력으로 사용될 수 있죠. 이렇게 인덱스를 실행하면 효율적인 검색, 컨텍스트 이해, 요약 활용 등이 가능해져 더 나은 결과를 얻을 수 있습니다.

5.1 그러면 사용자가 자연어로 질문하면, 이를 기반으로 Auto Templating을 새로 작성해서 인덱싱된 정보들과 함께 프롬프트를 만들어 LLM에 넘기면 답변을 주는 건가요? 🧠

네, 맞아요! GraphRAG의 작동 방식은 다음과 같아요:

  1. 사용자가 자연어로 질문을 입력합니다.
  2. 이 질문을 분석하여 관련 엔티티와 관계를 추출합니다.
  3. 추출된 정보를 바탕으로 그래프 쿼리를 생성합니다.
  4. 이 쿼리를 사용해 지식 그래프에서 관련 정보를 검색합니다.
  5. 검색된 정보와 원래 질문을 결합하여 LLM에 전달할 프롬프트를 생성합니다.
  6. LLM이 이 프롬프트를 바탕으로 답변을 생성합니다.

Auto Templating은 질문의 의도와 구조에 따라 적절한 쿼리 템플릿을 선택하거나 생성하는 데 사용됩니다. 이 과정을 통해 사용자에게 자연스러운 답변을 제공합니다.

5.2 관련 엔티티와 관계를 뽑을 때는 LLM을 사용하는지, 전체 과정을 설명해주세요! 🚀

GraphRAG의 전체 프로세스는 다음과 같습니다:

  1. 사용자 입력:

    • 사용자가 자연어로 질문을 입력합니다.
  2. 엔티티 및 관계 추출:

    • LLM을 사용하여 질문에서 엔티티와 관계를 추출합니다.
    • 주로 사용하는 모델: GPT-3.5-turbo 또는 GPT-4.
    • 사용 라이브러리: OpenAI API.
  3. 그래프 쿼리 생성:

    • 추출된 엔티티와 관계를 바탕으로 SPARQL 쿼리를 생성합니다.
    • 사용 라이브러리: RDFLib.
  4. 지식 그래프 검색:

    • 생성된

    SPARQL 쿼리를 사용하여 지식 그래프에서 정보를 검색합니다.

    • 사용 기술: Apache Jena Fuseki.
  5. 프롬프트 생성:

    • 검색된 정보와 원래 질문을 결합하여 프롬프트를 생성합니다.
    • 주로 Python 문자열 처리 기능을 사용.
  6. LLM을 통한 답변 생성:

    • 생성된 프롬프트를 LLM에 입력하여 최종 답변을 생성합니다.
    • 사용 모델: GPT-3.5-turbo 또는 GPT-4.
    • 사용 라이브러리: OpenAI API.
  7. 사용자에게 답변 제공.

이 과정에서 주요 사용 라이브러리는 LLM(OpenAI GPT 모델), 그래프 처리(RDFLib, NetworkX), 데이터 처리(Pandas, NumPy) 등이 포함됩니다.

6. entity_extraction.txt에서 소스-타겟 엔티티 구별에 대해 해야 하는 이유와 반드시 행해야 하는지 확인이 필요합니다. 엔티티를 뽑은 뒤 구분하는 것 같은데 맞나요? 🧩

소스-타겟 엔티티를 구별하는 작업은 반드시 필요한 단계입니다. 그 이유는:

  • 관계 명확성: 엔티티 간의 관계 방향을 명확하게 이해하기 위해 필요합니다.
  • 쿼리 정확성: 정확한 그래프 쿼리 생성을 위해 필수적입니다.
  • 컨텍스트 유지: 질문의 의도를 정확히 파악하고 유지하는 데 도움이 됩니다.

보통 모든 엔티티를 추출한 후 소스와 타겟을 구별하는 것이 일반적이지만, GraphRAG에서는 추출 과정에서 소스와 타겟을 동시에 식별하는 것이 중요합니다.

6.1 그렇다면 entity_extraction.txt에서 소스-타겟 엔티티를 구별하는 작업은 사용자가 질문할 때 이뤄지나요? 아니면 input data를 받아서 Parquet 파일을 만들 때인가요? 🔍

이 작업은 주로 입력 데이터를 처리하여 Parquet 파일을 만들 때 수행됩니다. 사용자의 질문 시에도 유사한 프로세스가 적용되지만, 주요 엔티티 추출 및 관계 설정은 데이터 준비 단계에서 이루어집니다. 전체 과정을 설명하자면:

  1. 데이터 수집:

    • 다양한 소스에서 데이터를 수집합니다.
    • 사용 도구: 웹 스크래핑 도구(예: Beautiful Soup), API.
  2. 데이터 전처리:

    • 수집된 데이터를 정제하고 구조화합니다.
    • 사용 라이브러리: Pandas, NumPy.
  3. 엔티티 추출:

    • LLM을 사용하여 텍스트에서 엔티티를 추출합니다.
    • 사용 모델: GPT-3.5-turbo 또는 GPT-4.
    • 사용 라이브러리: OpenAI API, spaCy(추가적인 NER 작업용).
  4. 관계 추출:

    • 추출된 엔티티 간의 관계를 식별합니다.
    • LLM과 규칙 기반 시스템을 결합하여 사용.
  5. 소스-타겟 엔티티 구별:

    • 관계의 방향성을 결정하여 소스와 타겟 엔티티를 구별합니다.
    • 사용 기술: LLM, 구문 분석(Python의 NLTK 라이브러리 사용 가능).
  6. 그래프 구조 생성:

    • 추출된 엔티티와 관계를 바탕으로 그래프 구조를 생성합니다.
    • 사용 라이브러리: NetworkX, RDFLib.
  7. Parquet 파일 생성:

    • 그래프 데이터를 Parquet 형식으로 변환합니다.
    • 사용 라이브러리: PyArrow 또는 Pandas.

이 과정에서 사용되는 주요 라이브러리는 LLM(OpenAI GPT 모델), NLP 도구(spaCy, NLTK), 데이터 처리(Pandas, NumPy), 그래프 처리(NetworkX, RDFLib) 등이 포함됩니다. 생성된 Parquet 파일은 이후 GraphRAG 시스템에서 빠른 검색과 질의 응답에 사용됩니다.

7. Claim Extraction에서 엔티티 "사양"? 클레임 "설명"? 이게 뭔데 주어지나요? 📄

Claim Extraction에서 중요한 개념들인데요:

  • 엔티티 "사양":

    • 특정 엔티티의 속성이나 특성을 나타내요. 예를 들어, 제품의 기술적 세부사항이나 특정 개념의 정의 등이 포함됩니다.
  • 클레임 "설명":

    • 클레임은 특정 주장이나 진술을 의미해요. "설명"은 이 클레임의 내용을 상세히 기술한 것으로, 주장의 근거나 세부 내용을 포함할 수 있습니다.

이들은 지식 그래프 구축 과정에서 엔티티 간의 관계를 더 명확하게 정의하고, 복잡한 정보를 구조화하는 데 사용됩니다.

8. 그래서 .txt 파일들의 존재 이유는 무엇인가요? 🤷‍♂️

.txt 파일들은 GraphRAG 시스템의 다양한 구성 요소와 프로세스를 설정하고 관리하는 데 사용됩니다:

  • 설정 파일: 시스템 파라미터, 모델 설정 등을 정의합니다.
  • 프롬프트 템플릿: LLM에 전달할 프롬프트의 기본 구조를 정의합니다.
  • 데이터 처리 지침: 엔티티 추출, 관계 정의 등의 규칙을 명시합니다.
  • 로깅 및 디버깅: 시스템 작동 중 발생하는 이벤트나 오류를 기록합니다.

이러한 파일들은 시스템의 유연성을 높이고, 필요에 따라 쉽게 수정할 수 있도록 도와줍니다. 🛠️

9. community_report.txt의 의사결정자는 누군가요? 뭐를 의미하는 거예요? 🤷‍♀️

"의사결정자"는 프로젝트나 조직 내에서 중요한 결정을 내리는 권한을 가진 개인이나 그룹을 의미해요.

  • 역할:
    • 프로젝트의 방향 설정.
    • 자원 할당 결정.
    • 주요 전략적 결정 수행.

GraphRAG 맥락에서의 의사결정자는 시스템 구현에 관한 주요 결정을 내리는 사람들을 의미합니다. 데이터 사용, 모델 선택, 시스템 아키텍처 등에 관한 결정권자일 수 있으며, 이 파일은 그들에게 프로젝트의 진행 상황, 주요 결과, 향후 계획 등을 보고하는 데 사용될 수 있습니다.


이렇게 정리된 내용을 바탕으로 MS사의 GraphRAG에 대해 더욱 명확하게 이해하실 수 있을 거예요! 궁금한 점이 있다면 언제든지 댓글로 남겨주세요! 😊

profile
주니어 개발자

0개의 댓글