
기본 RAG의 주요 구성요소는 인덱싱(indexing), 검색(Retrieve), 생성(Generation)이 있음
데이터 소스에서 데이터를 얻고, 인덱스를 생성하는 과정으로, 오프라인 상태에서 일반적으로 수행됨. 이 과정은 1. 데이터 정제 2. 청크 분할 3. 벡터 인코딩 및 인덱스 생성을 포함함.
데이터 정제: 이 단계는 원본 데이터를 정제하고, 추출하는 것으로 시작함. 여기에는 다양한 파일 형식, 이를테면 PDF, HTML, Word, Markdown 등을 일반 텍스트로 변환하는 작업이 포함됨. 이 과정은 데이터를 효율적으로 처리하고 검색하기 위한 기초를 마련함.청크 분할: 불러온 텍스트를 더 작은 청크로 나누는 작업임. 언어 모델은 일반적으로 처리할 수 있는 맥락의 양에 한계가 있기 때문에, 가능한 한 작은 텍스트 청크를 생성하는 것이 필요함. 이 과정은 검색 과정에서 모델이 처리할 수 있는 데이터 양을 최적화함.벡터 인코딩 및 인덱스 생성: 텍스트를 벡터로 인코딩하는 과정임. 이렇게 생성된 벡터는 후속 검색 과정에서 질문 벡터와의 유사성을 계산하는 데 사용됨. 임베딩 모델은 높은 추론 속도를 요구하며, 사용자가 질문을 할 때 대량의 코퍼스를 실시간으로 인코딩해야 함. 이후에는 원본 말뭉치(Corpus) 청크와 임베딩을 키-값 쌍 형태로 저장하여, 자주 발생하는 검색에 대비함.사용자의 입력을 벡터로 변환하고, 해당 벡터와 문서 블록의 벡터 간 유사성을 계산하여 상위 K 문서 블록을 선택함.
주어진 질문과 관련 문서를 결합하여 새로운 프롬프트를 생성하고, 대규모 언어 모델이 이 정보를 기반으로 질문에 답변함.

고급 RAG의 주요 구성요소는 검색 전 절차(Pre-Retrieval Process), 검색 후 절차(Post-Retrieval Process), RAG 파이프라인 최적화(RAG Pipeline Optimization)이 있음
검색 전 절차는 1. 데이터 인덱싱 최적화 2. 임베딩을 통해서 검색 결과의 관련성과 정확성을 높이는 데 중점을 둠.
데이터 인덱싱 최적화
데이터 인덱싱 최적화의 목표는 인덱싱된 콘텐츠의 품질을 향상시키는 것임. 데이터 인덱싱 최적화를 위해서는 다음 5가지 전략들이 주로 사용됨.
데이터 세분화 강화(Enhancing Data Granularity)
텍스트의 표준화, 일관성, 사실적 정확성 및 문맥적 풍부함을 향상시키기 위한 절차임. 불필요한 정보와 특수 문자를 제거하여 검색기의 효율성을 높이고, 엔티티와 용어의 모호성을 제거하며, 중복되거나 불필요한 정보를 최소화함. 이러한 최적화는 RAG 시스템의 정확도와 맥락적 적합성을 보장하는 데 기여함.
인덱스 구조 최적화(Optimizing Index Structures)
검색의 정확도와 관련성을 향상시키기 위한 방법임. 청크 크기를 조정하거나 인덱스 경로의 변경, 그래프 구조 정보의 도입을 포함함. 이를 통해 검색 결과의 관련성을 높이고 노드 간 관계를 활용하여 정확도를 개선할 수 있음.
메타데이터 정보 추가(Adding Metadata Information)
검색 효율성과 관련성을 향상시키기 위한 방법으로 각 데이터 청크에 날짜, 목적 등과 같은 메타데이터를 포함시키고, 필터링을 통해 검색 효율성을 향상시키는 것이 목표임. 이 메타데이터 필터링을 통해 검색의 효율성과 관련성이 개선됨.
정렬 최적화(Alignment Optimization)
문서 간의 불일치 문제를 해결하기 위한 최적화로 가상의 질문을 생성하고, 이를 각 문서와 결합하여 문서 간의 정렬 문제를 해결함. 이러한 정렬 최적화는 문서 간의 불일치와 차이를 해소하는데 도움을 줄 수 있음.
혼합 검색(Mixed Retrieval)
검색 기술의 강점을 활용하여 가장 관련성 높고 맥락이 풍부한 정보를 검색하기 위한 방법임. 키워드 기반 검색, 의미 검색, 벡터 검색과 같은 다양한 검색 기술을 지능적으로 결합하여 검색 전략을 강화하고, RAG 파이프라인의 전체 성능을 향상시킴.
임베딩(Embedding)
임베딩의 목표는 검색된 내용과 질문 간의 관련성을 강화하고, 최종 생성된 출력에 대한 영향을 최적화하는 것임. 특히 질문과 문서 간의 의미론적 유사성을 측정하고, 이를 개선하는데 필수적임. 임베딩을 위해서는 다음 2가지 전략들이 주로 사용됨.
정밀 조정 임베딩(Fine-Tuning Embedding)
정밀 조정 임베딩은 검색된 내용과 질문 간의 관련성을 향상시키기 위해 임베딩 모델을 정밀 조정하는 방법임. 즉, 도메인 특화하여 맥락에 맞게 임베딩을 조정하고 검색 단계를 최적화함. 전문 분야에서 발전하는 용어나 드문 용어를 다룰 때, 이러한 맞춤형 임베딩 방법이 검색 관련성을 향상시킬 수 있음.
예를 들어, BGE(BAAI 2023) 임베딩 모델은 LLM을 사용하여, 문서 청크를 바탕으로 질문을 구성하고, 이를 통해 정밀 조정 데이터를 생성할 수 있음.
동적 임베딩(Dynamic Embedding)
동적 임베딩은 단어가 등장하는 맥락에 따라 임베딩을 조정하는 방법임. 이는 각 단어에 대해 하나의 벡터만을 사용하는 정적 임베딩과 달리, 주변 단어에 따라 단어의 임베딩이 달라질 수 있음. 이러한 동적 임베딩은 맥락을 포착하는 데 있어 더 정교한 편임.
예를 들어, BERT와 같은 트랜스포머 모델에서는 동일한 단어가 주변 단어에 따라 다른 임베딩을 가질 수 있음.