문서의 각 내용에 대해 다양한 '예상 질문'을 LLM으로 미리 생성하고, 이를 원본 텍스트와 함께 벡터 DB에 저장하여 사용자의 어떤 질문 스타일에도 대응할 수 있도록 검색 대상을 '증강'하는 기법
- 작동방식
- 문서 분할 및 질문 생성: 문서를 적당한 크기의 '상위 문서(parent document)'로 나누고, 각 상위 문서에서 LLM을 이용해 사용자가 할 법한 여러 개의 '예상 질문'을 생성
- 통합 인덱싱 (Unified Indexing): 원본 문서 조각과 여기서 생성된 모든 예상 질문들을 하나의 벡터 데이터베이스에 함께 저장(인덱싱). 이때, 각 예상 질문은 자신이 어떤 원본 문서 조각에서 나왔는지 출처(메타데이터)를 기억
- 질문 기반 검색 (Question-to-Question Search): 사용자가 실제 질문을 하면, 벡터 DB에서 의미적으로 가장 유사한 대상을 찾음. 이때 사용자의 질문은 DB에 저장된 원본 텍스트보다는 미리 생성해 둔 '예상 질문'과 일치할 확률이 높음.
- 원본 문맥 참조 및 답변 생성: 가장 유사한 '예상 질문'을 찾았다면, 그 질문이 가리키고 있는 '원본 상위 문서' 전체를 최종 컨텍스트로 가져옴. 이 풍부한 컨텍스트를 바탕으로 LLM이 최종 답변을 생성.
- 장점
- 검색 강건성(Robustness) 향상: 사용자가 어떤 표현으로 질문하더라도, DB에 저장된 다양한 스타일의 '예상 질문'과 매칭될 확률이 높아져 검색 실패율을 줄임.
- 고품질 컨텍스트: 최종적으로는 작은 조각이 아닌, 더 크고 풍부한 '상위 문서'를 컨텍스트로 사용하므로 답변의 질이 향상
- HyPE (Hypothetical Prompt Embedding)와 유사하지만, 검색된 대상의 부모 문맥을 활용한다는 점에서 한 단계 더 나아간 접근법
- 구현
- LLM으로 각 문서 단위의 '예상 질문'들을 생성
- 원본 문서 조각과 생성된 질문들을 모두
Document객체로 만들어 하나의 리스트에 통합 - 통합 리스트를
FAISS벡터 저장소에 인덱싱하며, 이때 메타데이터에 원본 상위 문서의 전체 텍스트를 저장 - 검색 후에는 반환된
Document객체의metadata['text']를 참조하여 답변 생성의 최종 컨텍스트로 활용