NLP | LLM

고도화된 RAG: 단순히 검색만으로는 한계가 있다 (Self-RAG, GraphRAG)

삐롱K 2025. 6. 20. 12:57
728x90
반응형
전통적인 RAG 기술 👀
chunking, query 변형, 검색 알고리즘, re-rank, ...

 

1️⃣ Self-RAG

💫 Self-Reflection (자체 반영)

LLM이 기존 RAG의 각 단계에 직접 개입하여 보다 정교한 제어를 수행하는 방식

 

1) 작동방식

  • 검색: 사용자의 질문을 분석하여 외부 데이터 검색이 필요한지 결정(Retrieve=yes 토큰 출력)
  • 생성: 검색된 정보가 있으면, 이를 바탕으로 답변
    • 관련성 평가: 검색된 문서의 관련성 평가
    • 답변 생성: 관련 정보가 있는 문서가 존재할 경우 → 자신의 기존 지식 + 검색 정보 결합한 포괄적인 답변   
                       관련 정보가 있는 문서가 없다면 → 검색된 문서 무시 + 기존 지식 활용한 답변
  • 평가: 생성된 답변의 유용성 평가, 필요 시 추가 검색이나 수정을 통해 답변 개선
    • 지원 평가: 생성된 답변의 각 부분이 검색된 정보로 얼마나 뒷받침 하는가 (Fully supported, Partially supported, No support)
    • 유용성 평가: 생성된 답변이 사용자 질문에 얼마나 유용한지 평가 (1~5점)
  • 최종 출력
    • 생성된 텍스트 답변
    • 사용된 정보 출처에 대한 인용
    • 각 세그먼트에 대한 평가 결과

 

2) 구현

[RAG 마스터]_관련 코드

  • 주요 메서드
- init: 클래스 초기화
- determine_retrieval: 검색 필요 여부 결정
- retrieve_documents: 관련 문서 검색
- evalute_relevance: 검색된 문서의 관련성 평가
- generate_responses: 관련 컨텍스트로 응답 생성
- generate_without_retrieval: 검색 없이 응답 생성
- assess_and_evaluate: 생성된 응답의 지원 및 유용성 평가
- select_best_response: 최고의 응답 선택
- process_query: 전체 쿼리 처리 프로세스

 

2️⃣ GraphRAG

💫 knowledge graph + RAG (지식그래프 + 검색 증강 생성)

기존 RAG는 문서를 검색하고 정보를 추출하는데 집중했다면, 그래프 RAG는 복잡한 데이터 간의 연결성을 파악하여 다층적인 질의응답이 가능하도록 함.

 

1) 기존 RAG 방식의 한계

  • 정보 연결의 어려움: 질문에 답하기 위해 개별 문서에서 정보를 검색할 수 있지만, 데이터 간의 관계를 분석하여 새로운 통찰을 제공하는데 한계가 있음.
  • 대규모 데이터 이해 한계: 데이터의 규모가 클수록 개념들을 전체적으로 파악하는데 어려움이 있음.

2) 지식그래프

  • 노드(개체)와 에지(관계)로 표현
  • 그래프는 네트워크를 수학적으로 표현하는 모델이고, 이를 통해 복잡한 시스템의 구조를 명확하게 모델링하고, 다양한 수학적 기법을 적용하여 네트워크의 특성을 분석할 수 있다. 하지만, 단순히 "연결되어 있다"는 사실만을 표현하는 경우가 많음
  • 지식 그래프: 개체와 관계에 의미론적 정보를 부여하여 각 요소가 무엇을 의미하는지 명확하게 정의

3) GraphRAG 동작 과정

  • 그래프 DB 구축: 문서 내용을 분석하여 지식 그래프 생성
  • 검색: 방대한 문서 컬렉션에서도 관련성 높은 정보를 빠르게 찾아내고, 이를 바탕으로 포괄적이고 정확한 답변 생성
    • 로컬 검색: 질문과 직접적으로 관련된 개체들을 식별하고, 연관된 정보를 수집하여 상세한 답변 제공. 특정 주제, 세부정보 묻는 질문에 효과적
    • 글로벌 검색: 문서 전체를 아우르는 포괄적인 질문에 대해, 여러 커뮤니티 요약을 활용하여 종합적인 답변 제공

4) 그래프 DB 구축 과정

  • 문서 분할
  • 지식 그래프 구축: 핵심 개체+관계 추출
    • 규칙 기반 접근법: 미리 정의된 언어 규칙이나 패턴을 사용하여 엔티티와 관계를 기계적으로 추출
    • 기계학습 모델: 머신러닝 알고리즘을 활용하여 엔티티 및 관계 추출 모델 만듦. 대표적으로 SVM, CRF
    • 딥러닝 모델: RNN, Transformer와 같은 신경망 구조를 사용하여 추출. 대규모 데이터셋이 필요
    • 대규모 언어 모델 활용: LLM. 높은 컴퓨터 자원이 필요하거나 API 비용 발생, 처리속도가 상대적으로 느림. 출력 결과가 일관성이 완벽하지 않아 후처리가 필요함.
  • 그래프 증강
  • 커뮤니티 요약

4-1) 지식그래프 생성

  • 엔티티와 관계 추출
    • 엔티티: 이름, 타입, 설명
    • 관계: 출발점, 도착점, 설명, 강도
  • 그래프 통합: 추출된 엔티티와 관계들을 통합하여 중복을 제거
  • 설명 요약: LLM을 활용하여 통합된 설명들을 하나의 간결한 설명으로 요약
  • 주장 추출(선택): 텍스트에서 사실적 진술을 추출하고, 상태와 시간 정보를 포함하여 구조화된 주장으로 변환, 공변량(covariate) 형태로 저장되어 시간적 맥락이나 상태 변화를 반영한 고도화된 질의응답에 활용

4-2) 그래프 증강

  • 커뮤니티 탐지: 지식 그래프 내에서 서로 밀접하게 연관된 엔티티들의 그룹을 커뮤니티라 하고, 엔티티를 그룹화하여 커뮤니티로 분류하면 정보 검색과 처리가 훨씬 효율적임.
    • Louvain algorithm(로우벤 알고리즘): 복잡한 관계망에서 서로 밀접하게 연결된 노드들을 그룹으로 묶는 방식. 계산 효율성, 간단한 구현. 결과의 불안정성과 모듈성의 함수 한계
    • Leiden algorithm(레이든 알고리즘): 로우벤 알고리즘의 개선 버전으로 때때로 서로 연결되지 않은 노드들이 같은 커뮤니티로 묶이는 문제를 해결하기 위해 노드를 다른 커뮤니티로 이동할 때 이동 후에도 커뮤니티가 항상 서로 연결된 상태를 유지하도록 설계됨. 비연결 커뮤니티 문제 해결, 탐지의 정확성 높임. 모듈성 함수 자체의 한계, 계산량 증가 단점
    • 계층적 커뮤니티: MS의 구조, 계층 구조를 도입하면서 데이터의 추상화 수준을 조절하여 다양한 사용자 요구에 대응할 수 있게 함.
      • 정보의 효율적 조직화
      • 대규모 언어 모델의 토큰 제한 관리
  • 그래프 임베딩
    • 행렬 분해 기반 방법: 그래프의 인접 행렬이나 라플라시안 행렬 등을 분해하여 노드의 임베딩을 얻음. 예) Laplacian Eigenmaps
    • 확률적 방법: 랜덤워크나 확률 모델을 활용하여 노드 간의 유사성 추정. 예) DeepWalk, Node2vec
    • 딥러닝: GNN을 기용하여 그래프 구조 학습

5) 그래프 RAG 질의

  • 로컬 검색: 질문과 가장 관련 있는 엔티티들을 선택 후, 그래프 DB에서 이들 엔티티와 연관된 컴포넌트들을 수집하여 필터링하여 사용하는 방식 → 단순 키워드 매칭이나 임베딩 유사도만 사용하는 것이 아니라 그래프 구조를 활용하여 다양한 컨텍스트를 종합적으로 고려할 수 있음.
  • 글로벌 검색: 데이터셋 전체를 아우르는 질문에 답하기 위한 방식. map-reduce 방식으로 답변
    • 사용할 커뮤니티의 레벨 선택: 응답의 상세함과 효율성 사이에서 균형을 조절하는 역할
    • map 단계: 커뮤니티 리포트들은 작은 텍스트 조각들로 분할한 후, 이 조각들을 컨텍스트로 활용하여 LLM에 투입해 '중간 응답' 리스트를 생성하고, 최종 답변 구성에 얼마나 중요한지를 계산하여 '중요도 점수' 부여
    • reduce 단계: 이전 단계에서 생성된 중간 응답들 중, 중요도 점수가 높은 것들을 선별하여 통합

 


Last Updated. 2025.06.20

🔖 참고 자료

📘 RAG 마스터: 랭체인으로 완성하는 LLM 서비스

728x90
반응형