-
실제 책의 내용은 RAG를 위한 구축이 중심을 이루며 LLM은 자세히 다루지 않고 있다
-
백터: 데이터 객체이며 다양한 특성을 표현하는 수치 값
- Embedding: 다양한 형태의 데이터를 추출해서 컴퓨터가 이해 할 수 있는 고차원 벡터 값으로 변환하는 행위
-
백터 DB: 다양한 형태의 문서(문서, 이미지, 비디오) 의 의미, 유사성 검색에 유용
- 백터 간 거리(distance), 각도(cosine) 등을 통해 관계를 계산
- 청킹: 검색 정확도와 성능을 위해 데이터 분할에 대한 방식을 정의하는 방법
-
데이터 피처링: 도메인 지식을 사용하여 원시 데이터에서 모델 성능을 향상 시키기 위해 가장 중요한 특징을 선택하고 불필요한 특징을 제거하는 과정
- AI 구축에 있어 데이터 준비 및 설계 작업이 가장 노력이 많이 들어가는 작업이다
-
백터 DB 스키마 설계
- Collection: RDB의 Table과 유사한 의미. 데이터로는 원천 데이터, 백터 값, 메타 데이터를 가질 수 있다
- 원천 데이터: 실제 데이터 값
- Vector 값: 원천 데이터를 임베딩 처리한 값
- 메타 데이터: 비정형 데이터인 백터에 추가적인 정보를 통해 정확히 필터링하고 검색 할 수 있도록 보조
- Multi Collection 유사도 검색
- 여러 컬렉션에 유사도 검색을 위해서는 백터 공간의 일관성이 필요하다
- 데이터 항목이 동일한 차원 수와 동일한 의미적 해석을 가지는 백터 표현으로 변환되어 있어야 한다
- 동일한 차원 수, 임베딩 모델, 처리(토크나이징, 청킹 전략 등) 방식을 지녀야 한다
- Sparse Vector 및 dense Vector
- Sparse Vector: 차원의 대부분의 값이 0인 백터
- dense Vector: 0이 아닌 값만 저장하는 백터
- 대부분 DB에서 두 백터 값 모두 하나의 컬렉션에서 저장하도록 지원한다
- 두 값을 모두 저장하는 사유는 유연한 검색과 분석 기능을 활용하기 위함이다
- 청킹 전략
- 수많은 청킹 전략이 있으나 본 요약에서는 설명하지 않음 → 다양한 전략을 찾아서 가장 유용한 것을 테스트하는 것이 옳다고 생각함
- 메타 데이터 디자인
- 백터 검색은 문서 양이 증가하면 검색의 회수율이 급격히 감소하는 경향이 있음
- 메타 데이터를 통해 검색 범위를 좁히거나 필터링 하여 정확도 및 성능 향상을 보조
-
데이터 평가 및 검증
- 검색 평가: 검색된 문서의 정확성과 관련성 평가
- 신뢰성과 precision@K 를 중심으로 주로 평가
- 응답 평가: 컨텍스트 제공 시 응답의 적절성을 평가
- 정확도와 환각, NDCG 를 중심으로 주로 평가
-
RAG(검색 증강 생성)
- LLM 이 외부 지식 소스를 활용하여 보다 정확한 최신의 정보를 제공하는 기술
- 장점: LLM의 단점인 모델 환각, 적시성, 응답 제한 등의 문제를 보완하기 위해 사용
- 단점
- 질의의 미묘한 차이를 이해하지 못함.
- 복잡한 질의나 다양한 데이터 소스 처리에 부적합
- RAG 단계 ( 아래로 갈 수록 진화)
- 일반 RAG: 단순 검색 및 응답을 LLM에 제공하는 RAG
- 인덱싱(청킹) → 검색 → 생성 단계로 구성됨
- Advanced RAG
- Pre, Post 단계 도입을 통한 일반 RAG의 개선
- 단계: 인덱싱 → Pre → 검색 → Post → 생성
- 중복되는 원천 데이터는 K-means와 같은 클러스터링 알고리즘을 이용하여 청크를 그룹화한다
- Pre-Retrieval
- 데이터 정련과 청크 크기 조정 등을 통해 검색 결과의 퀄리티 향상
- 불필요한 정보 제거, 청크 크기 조정, 메타 데이터 필터링 등의 기법 도입
- Post-Retrieval
- 검색된 데이터를 LLM에 효율적으로 제공하기 위한 최적화 작업
- 프롬프트 압축, 하이브리드 검색, 정보 순위 다시 매기기 등의 기법 도입
- 메타 데이터 필터링 방법
- Pre-Filter: 먼저 관련있는 데이터를 걸러낸 후 백터 검색을 수행 → 정확도와 회수율 중시
- Post-Filter: 백터 검색 후 메타 데이터 필터를 이용하여 결과를 필터링 → 속도와 조건 유연성 중시
- Modular RAG
- 각 단계에서 다양한 모듈과 패턴을 조립해가며 정합성과 성능을 최적화하는 접근 패턴
- 단계: 인덱싱 → Pre → 검색 → Post → 생성
- 패턴
- RRR( Rewrite - Retrieve - Read): 검색 쿼리를 재구성해 검색의 품질을 높이고, 이후 읽기 모듈의 하위 작업 성능을 향상
- Branching: 다양한 조건, 선택지, 상황에 따라 여러 가지 결과로 분기하는 방식
- Adaptive: 동적 환경 변화, 요구사항에 따라 실시간으로 모듈을 조정하는 방식
- Graph RAG
- 지식 그래프의 구조적 정보를 이용하여 더 정교한 질문과 답변 기능을 제공하는 방식
- 원본 문서를 문단 → 명제 → 키워드 수준까지 세분화하여 그래프 모델링을 설계한다
- Leiden 기법 등을 통해 생성된 노드 커뮤니티와 구성 요소를 분석하여, 상향식으로 그래프를 일반화 한다
- 최근에는 Vector Rag와 Graph Rag를 혼합하여 사용하는 추세