Retrieval
Retrieval 개념
LangChain이나 자연어 처리에서 사용자가 입력한 질문(query)에 대해 외부 데이터베이스나 문서 저장소 등에서 관련 정보를 찾아오는 과정
특히 대형 언어 모델(LLM)은 훈련된 데이터에 기반하지만, 특정한 질문에 대한 답변이 부족할 수 있기 때문에 retrieval은 모델이 외부 지식 소스를 활용해 더 정확한 답변을 제공하도록 도와줌
Retrieval의 구성요소
Retrieval의 구성 요소는 LangChain과 같은 시스템에서 질문에 맞는 정보를 외부 데이터 소스에서 효과적으로 가져오기 위한 일련의 단계들로 나눌 수 있습니다. 각 구성 요소는 서로 협력하여 retrieval 프로세스가 원활하게 작동하도록 돕습니다. 주요 구성 요소는 다음과 같습니다:
- Document Loader
- 설명: 외부 소스(파일 시스템, 웹, 데이터베이스 등)에서 문서를 불러오는 역할을 합니다.
- 기능: 다양한 형식의 문서(PDF, CSV, 텍스트, 웹페이지)를 읽어와 시스템에서 처리할 수 있도록 준비합니다.
- 예시: PDF 로더, 웹 크롤러, SQL 데이터베이스 로더 등.
- Chunking (문서 분할)
- 설명: 긴 문서를 작은 단위로 나누는 과정입니다.
- 기능: 모델의 처리 한계를 고려해, 문서를 문단, 페이지, 또는 의미 단위로 나눕니다. 이로 인해 대형 문서에서도 효율적으로 정보 검색이 가능합니다.
- 예시: 책 한 권을 챕터나 문단 단위로 나누는 것.
- Text Embedding (텍스트 임베딩)
- 설명: 텍스트를 수치화(벡터화)하여 모델이 의미적으로 비교할 수 있도록 변환하는 과정입니다.
- 기능: 텍스트를 벡터 공간으로 변환하여 질문과 문서 사이의 의미적 유사성을 계산합니다. 이를 통해 문서와 질문의 의미가 비슷한지 확인할 수 있습니다.
- 예시: 문서와 질문을 임베딩한 후, 유사한 벡터를 찾는 과정.
- Retrieval Mechanism (검색 메커니즘)
- 설명: 검색 메커니즘은 특정 방식으로 문서에서 답변을 추출하는 방법을 말합니다. 이 방법에는 다양한 기술이 포함됩니다.
- 종류:
- Exact Match: 사용자의 질의와 동일한 문장을 문서에서 찾는 방식.
- Vector Similarity Search: 질문과 문서를 벡터로 변환하고, 벡터 간 유사도를 비교해 가장 관련 있는 문서를 찾는 방식.
- BM25: 정보 검색에서 자주 사용되는 통계 기반 검색 알고리즘으로, 텍스트의 키워드 기반 유사도를 평가합니다.
- Query Processor (질문 처리기)
- 설명: 사용자가 입력한 질문을 처리하고, 검색 과정에서 필요한 형태로 변환하는 역할을 합니다.
- 기능: 질문을 벡터로 변환하거나, 특정 키워드를 추출하는 등의 전처리 작업을 수행합니다.
- Retriever (검색기)
- 설명: 처리된 질문을 바탕으로 적절한 문서를 찾아내는 역할을 합니다. Retriever는 주어진 데이터베이스나 문서 저장소에서 가장 관련성 높은 문서를 찾습니다.
- 종류:
- Dense Retriever: 문서와 질문을 벡터화하고 벡터 유사성을 비교하여 문서를 검색.
- Sparse Retriever: 키워드 기반 검색으로 BM25 등의 전통적인 정보 검색 기법을 사용.
- Document Processor (문서 처리기)
- 설명: 검색된 문서에서 사용자가 필요로 하는 답변을 찾아내고 요약하는 과정을 담당합니다.
- 기능: 여러 문서를 하나로 합치거나, 문서 내 특정 부분을 추출하거나, 문서를 요약하여 사용자에게 최종 답변을 제공.
- 예시: Stuff Documents, Map Reduce, Refine 등 다양한 방식의 문서 처리 체인을 사용.
Retrieval의 종류
-
Stuff Documents
Stuff Documents 방식은 가장 단순한 형태의 retrieval입니다. 여기서는 여러 문서나 텍스트 조각을 한꺼번에 모델에 넣고, 이 모든 정보를 기반으로 답변을 생성합니다. 간단히 말해, 문서들을 “하나로 묶어서” 모델이 처리하도록 하는 방식입니다.
- 장점:
- 구현이 매우 간단합니다.
- 모델이 전체 문서를 한꺼번에 처리할 수 있다면 빠르게 답변을 생성할 수 있습니다.
- 단점:
- 처리할 문서의 길이가 길어지면 모델의 토큰 한계를 초과할 수 있습니다.
- 대량의 문서를 다룰 때 비효율적일 수 있습니다.
- 활용 사례:
- 비교적 짧은 문서에서 답을 찾을 때 유용합니다.
- 장점:
-
Map Reduce Document Chain
Map Reduce 방식은 대량의 문서를 처리할 때 효과적인 retrieval 방법입니다. 이 방식은 두 단계로 이루어집니다:
- Map: 각 문서에 대해 모델이 독립적으로 답변을 생성합니다.
- Reduce: 생성된 답변들을 모아서 하나의 최종 답변을 만듭니다.
- 장점:
- 대량의 문서를 처리할 수 있습니다.
- 병렬 처리가 가능해 속도를 높일 수 있습니다.
- 단점:
- 각 문서의 개별 답변이 중요한데, 잘못된 답변이 포함되면 최종 답변에 영향을 미칠 수 있습니다.
- 활용 사례:
- 수백 개 이상의 문서를 처리해야 하는 상황에서 적합합니다.
- 검색된 문서들에서 통합된 답변을 도출해야 할 때 유용합니다.
-
Refine Document Chain
Refine 방식은 하나의 문서를 처리한 후, 해당 결과를 바탕으로 다음 문서를 처리하는 방식입니다. 이 과정은 문서마다 이어져 최종 답변이 정교하게 보완됩니다.
- 장점:
- 이전 문서의 결과를 바탕으로 다음 문서의 결과를 향상시킬 수 있습니다.
- 더 정밀한 답변을 생성할 수 있습니다.
- 단점:
- 처리 속도가 느릴 수 있습니다. 각 문서를 순차적으로 처리해야 하기 때문입니다.
- 문서 수가 많아지면 부담이 커질 수 있습니다.
- 활용 사례:
- 각 문서에서 단계적으로 정보가 추가되어야 하는 경우, 또는 답변이 지속적으로 개선되어야 하는 상황에서 적합합니다.
- 장점:
-
Map Re-Rank Document Chain
Map Re-Rank 방식은 각 문서에 대해 답변을 생성하고, 이 답변들을 다시 순위를 매기는 방식입니다. 즉, 모델이 모든 문서에서 답변을 생성한 후, 가장 관련성이 높은 답변을 최종적으로 선택합니다.
- 장점:
- 많은 문서 중에서 가장 적합한 답변을 선택할 수 있습니다.
- 답변의 질을 높이기 위한 좋은 방법입니다.
- 단점:
- 모든 문서에서 답변을 생성한 후 다시 랭킹을 매겨야 하므로 처리 비용이 증가할 수 있습니다.
- 활용 사례:
- 문서가 많을 때, 각 문서에서 얻은 답변의 정확도를 평가해 최선의 답변을 선택하는 상황에서 유용합니다.
- 장점: