Background
- Query-Focused Summarization(QFS)
- 어떤 텍스트의 단순 요약이 아닌, 질문에 대한 답변을 포함하는 요약을 생성하는 태스크
- 단순히 원문에서 문장을 발췌할 수도 있지만, 질문에 맞춰 추상적으로 요약하여 자연스러운 답변을 생성할 수도 있음 (abstractive summarization)
- RAG .. 제 블로그에 리뷰해놨으니 참고하시면 좋을 듯합니다!
Problem Definition
- RAG는 local question에는 대답을 잘하지만, global question은 답을 잘 못함
- What are the main themes in the dataset? 과 같이 전체 데이터셋에서 답을 찾아야하는 질문을 global question이라고 함
- QFS의 경우 대규모 데이터를 처리하는 확장성이 부족함
- RAG가 인덱싱하는 데이터의 양을 처리할 수 없음
GraphRAG
- 핵심
- LLM을 사용하여 그래프 기반 텍스트 인덱스를 생성
- 소스 문서에서 엔티티 지식 그래프를 도출
- closely-related 엔티티에 대해 community summary를 사전 생성
- 질문이 주어지면 community summary를 바탕으로 부분 응답을 생성
- 이후 모든 부분 응답이 다시 요약되어 사용자에게 최종 응답으로 제공
1. Source Documents → Text Chunks
-
말 그대로 문서를 추출하고 chunking하는 단계
-
아래 그림에서 볼 수 있듯이 600 크기의 chunk를 사용할 경우 2400 크기의 chunk를 사용할 때보다 두 배나 많은 entity를 추출할 수 있음
- longer text chunks : LLM을 호출 수가 줄어들겠지만, recall-degradation 문제를 겪게 됨
recall-degradation
긴 텍스트에서 모델이 필요한 정보를 모두 기억하거나 정확히 인식하지 못하는 현상
- shorter text chunks : 추출할 세부적인 정보는 많아져 recall은 향상할 수 있으나, 그만큼 불필요한 정보가 추가될 수 있기 때문에 되려 precision이 떨어지는 문제가 발생할 수 있음
→ 적절한 크기의 chunk를 사용하여 recall과 precision의 균형을 맞춰야함
2. Text Chunks → Element Instances
3. Element Instances → Element Summaries
- LLM을 사용하여 소스 텍스트에서 entity, relation, claim에 대한 요약을 추출하는 단계
- 각 그래프의 요소에 대해 개별적으로 생성된 요약을 하나의 설명 텍스트 블록으로 통합하는 추가적인 단계
4. Element Summaries → Graph Communities
- (여러 커뮤니티 감지 알고리즘 중) Leiden 기법을 사용하여 커뮤니티의 계층적 클러스터링이 이루어지는 단계
- Leiden 기법의 경우 대규모 그래프의 계층적 커뮤니티 구조를 효율적으로 복구할 수 있음
- entity(노드)들은 relation(엣지)로 연결
- 노드 간의 탐지된 엣지의 정규화된 개수(degree)로 weight 부여
→ 연결이 강한 커뮤니티로 그래프를 분할
- 각 커뮤니티에 대한 요약을 생성하는 단계
- 리프 수준 커뮤니티
- local한 질문들을 다루기 위한 과정인 듯
- 노드, 엣지, 공변량(covariate)에 대한 요약을 우선순위에 따라 토큰 한도에 다다를때까지 LLM의 context window에 반복적으로 추가
- 여기서 우선순위란 소스 노드와 타겟 노드의 degree를 합쳤을 때의 rank를 의미하는 듯
- 상위 수준 커뮤니티
- global한 질문을 다루기 위한 과정인 듯
- 각 리프 수준 커뮤니티에 대한 요약들을 합쳤을 때 max_context_length보다 적으면 괜찮지만, 이를 넘어서는 경우 짧은 요약들로 대체하여 더 많은 주제를 다룰 수 있게 함
→ 해당 과정들을 통해 대규모 데이터셋에서 전체적인 구조와 의미를 파악하는 데 도움을 줄 수 있음
- 커뮤니티 요약을 이용해 최종 답변을 생성하는 단계
- Prepare Community Summaries
- 위에서 생성했던 커뮤니티 요약을 무작위로 섞고 chunking
→ 관련 정보가 한쪽에 치우쳐지는 것이 아니라 여러 청크에 고르게 분포하도록 함
- Map community answers
- 각 청크마다 중간 답변을 병렬로 생성
- LLM이 중간 답변에 대해 0~100의 점수를 매김
- Reduce to global answer
- 점수가 높은 순으로 중간 답변들을 정렬하고 max_context_length에 도달할 때까지 context window에 추가
Evaluation
- Query 형성 방법
- LLM을 통해 자동으로 생성
- LLM에게 데이터셋에 대한 설명 제공
- LLM이 잠재적 사용자 N명 및 각 사용자별 잠재적 task N개 식별하여 global question에 대한 질문 N개 생성
→ N=5라면 5*5*5=125개의 테스트 데이터셋
- Conditions
- CO : root-level 커뮤니티 요약 사용
- C1 : high-level 커뮤니티 요약 사용. C0의 하위 커뮤니티
- C2 : intermediate-level 커뮤니티 요약 사용. C1의 하위 커뮤니티
- C3 : low-level 커뮤니티 요약 사용. C2의 하위 커뮤니티
- TS(Text Summarization) : 커뮤니티 요약 대신 소스 텍스트를 Map-Reduce 요약 단계에 적용
- SS(Semantic Search) : naive RAG 방식으로 텍스트 청크하여 context window에 추가 및 답변 생성
-
Metrics
- Comprehensiveness : 답변이 질문의 모든 측면과 세부 사항을 잘 다루는지
- Diversity : 답변이 다양한 관점과 통찰을 제공하는지
- Empowerment : 답변이 이해와 판단에 얼마나 도움이 되는지
- Directness : 답변이 얼마나 명확하고 구체적으로 답하는지
평가 detail
LLM을 evaluator로 설정하여 두 답변을 직접 비교하여 평가
(head-to-head 비교 방식)
- Configuration
- context window의 크기의 영향을 비교
- comprehensiveness 측면에서 8k, 16k, 32k, 64k를 비교한 결과 8k에서 가장 좋은 성능을 보였기 때문에 context window의 크기를 8k로 설정
- Results
표 해석법
행 조건이 열 조건과 비교했을 때 승률을 숫자로 나타냄
: 승률은 두 조건이 125개 질문에 대해 5번씩 반복 평가된 결과로 평균을 내어 산출
- global approach > naive RAG (Comprehensiveness, Diversity)
-
일반적으로 커뮤니티 요약(C0, C1, C2, C3) > 원본 텍스트(TS)
(Comprehensiveness, Diversity)
-
Empowerment에서는 복합적인 양상