안녕하세요, 유라클 CTO입니다.
지난 1편에서는 AI 개발의 초석을 다질 수 있는 언어, 도구, LLM에 대한 학습 커리큘럼을 소개했었는데요. 이번 2편에서는 본격적으로 RAG(Retrieval-Augmented Generation) 서비스 구성을 위한 심화 학습 커리큘럼을 다뤄보겠습니다.
1편 핵심 요약
- Python: AI/GenAI 개발의 표준, 꼭 필요한 언어
- Jupyter Notebook: 코드, 결과, 시각화를 한 곳에서 관리
- Docker: 개발 환경의 일관성, 모델 배포 및 관리를 위한 필수 도구
- LLM: 개발의 패러다임을 바꾸는 거대 언어 모델
- LangChain: LLM을 활용한 애플리케이션 개발을 위한 프레임워크
RAG: LLM 활용의 현실적인 대안
RAG는 검색(Retrieval) 과 생성(Generation)을 결합한 기술로 LLM의 한계를 극복하고 현실적인 문제 해결에 도움을 주는 솔루션으로 각광받고 있습니다.
RAG, 왜 주목받을까요?
- 장점:
- 정확도 향상: 외부 지식(문서)을 검색하여 LLM 답변의 정확도를 높입니다.
- 환각(Hallucination) 감소: LLM이 잘못된 정보를 생성하는 현상(환각)을 줄입니다.
- 최신 정보 제공: 실시간 정보 검색을 통해 최신 정보를 반영한 답변을 생성합니다.
- 근거 기반 답변: 답변의 근거가 되는 문서를 함께 제공하여 신뢰도를 높입니다.
- 단점:
- 구조화되지 않거나, 일관성없는 긴 문서의 경우: 문서의 품질과 일관성이 보장되지 않으면 정확한 정보 검색이 어려울 수 있습니다.
- 부적절한 문서가 선택될 수 있음: 부적절한 문서가 검색될 경우 답변의 정확도에 문제가 발생합니다.
- 복잡성: RAG 시스템은 여러 구성 요소로 이루어져 있어 학습 및 구현이 다소 복잡할 수 있습니다.
현재로서는 RAG가 가장 현실적인 LLM 활용 방안이지만, LLM 기술이 더욱 발전하면 다른 기술이 주목받을 가능성도 있습니다. 예를 들어, LLM의 추론 능력이 향상되면 외부 지식 검색 없이도 정확한 답변을 생성할 수 있을지도 모릅니다. 하지만 당분간은 RAG가 핵심 기술로 자리 잡을 것으로 예상됩니다.
RAG 동작 원리, 이것만 알면 OK!
- 사용자 질문(Query) 입력: 사용자가 질문을 입력합니다.
- 질문 임베딩(Embedding): 질문을 벡터(숫자들의 나열)로 변환합니다.
- 문서 검색(Retrieval): 벡터 데이터베이스(Vector DB)에서 질문과 유사한 문서를 검색합니다.
- 문서 선택 및 순위 재조정(Re-ranking): 검색된 문서 중 가장 관련성이 높은 문서를 선택하고 순위를 재조정합니다.
- 답변 생성(Generation): 선택된 문서를 LLM에 입력으로 제공하여 답변을 생성합니다.
RAG 핵심 구성 요소 학습 커리큘럼
- RAG 개념 이해: RAG의 정의, 장단점, 동작 원리 등을 학습합니다.
- RAG 구성 요소 이해: Retriever, Generator, Embedding Model, Vector DB 등 각 구성 요소의 역할과 특징을 학습합니다.
- RAG 파이프라인 구축: LangChain 등 프레임워크를 활용하여 RAG 파이프라인을 구축하는 실습을 진행합니다.
- RAG 평가: RAG 시스템의 성능을 평가하는 지표와 방법을 학습합니다.
RAG 파이프라인: 조립하듯 착착!
RAG 파이프라인은 사용자 쿼리를 입력으로 받아 최종 답변을 생성하기까지의 과정을 단계별로 정의한 것입니다. 각 단계는 특정 역할을 수행하는 모듈로 구성됩니다.
RAG 파이프라인, 자세히 들여다보기
- 임베딩(Embedding): 텍스트, 이미지 등 데이터를 벡터(숫자들의 나열)로 변환하는 과정입니다. 의미가 비슷한 데이터는 벡터 공간에서 가깝게 위치하도록 표현됩니다.
- 벡터 데이터베이스(Vector DB): 임베딩된 벡터를 저장하고, 효율적으로 검색할 수 있는 데이터베이스입니다.
- Retriever: 사용자 쿼리와 가장 관련성이 높은 문서를 벡터 데이터베이스에서 검색하는 역할을 합니다.
- Generator: Retriever가 제공한 문서를 기반으로 답변을 생성하는 LLM입니다.
- Search: 쿼리와 문서 간의 관련도를 측정하는 과정입니다.
- Re-ranking: 검색된 문서의 순위를 관련도에 따라 재조정하여, 가장 적합한 문서를 상위에 위치시키는 과정입니다.
RAG 파이프라인 학습 커리큘럼
- 파이프라인 설계: RAG 파이프라인의 전체 구조를 설계하고, 각 단계별 모듈의 역할을 이해합니다.
- 모듈별 구현: Embedding, Vector DB, Retriever, Generator, Re-ranker 등 각 모듈을 구현하고 연동합니다.
- 파이프라인 통합: 전체 모듈을 통합하여 RAG 파이프라인을 완성합니다.
- 파이프라인 평가 및 최적화: RAG 파이프라인의 성능을 평가하고, 각 모듈을 튜닝하여 성능을 최적화합니다.
Embedding: RAG의 핵심 기술
임베딩 기초 및 원리 학습
- 임베딩 개념: 임베딩의 정의, 역할, 중요성을 학습합니다.
- 벡터 공간 모델: 단어, 문장, 문서 등을 벡터로 표현하는 벡터 공간 모델의 개념을 이해합니다.
- 임베딩 알고리즘: Word2Vec, GloVe, FastText 등 전통적인 임베딩 알고리즘의 원리를 학습합니다.
- 차원 축소: 고차원 벡터를 저차원으로 축소하는 기법을 학습합니다.
LLM 기반 임베딩 모델 학습
- Transformer 기반 임베딩: BERT, Sentence-BERT 등 Transformer 기반 임베딩 모델의 구조와 원리를 학습합니다.
- 임베딩 모델 선택: 특정 태스크에 적합한 임베딩 모델을 선택하는 기준과 방법을 학습합니다.
- 임베딩 모델 미세 조정(Fine-tuning): 특정 도메인 데이터에 맞게 임베딩 모델을 미세 조정하는 방법을 학습합니다.
Vector DB: 효율적인 검색을 위한 필수 요소
벡터 데이터베이스 기초 및 원리 학습
- 벡터 데이터베이스 개념: 벡터 데이터베이스의 정의, 특징, 기존 데이터베이스와의 차이점을 학습합니다.
- 유사도 검색: 벡터 간 유사도를 측정하는 방법을 학습합니다.
- 벡터 데이터베이스 종류: 다양한 벡터 데이터베이스의 특징과 장단점을 비교 분석합니다.
벡터 데이터베이스 인덱싱: 속도와 정확도를 높이는 기술
인덱스 원리, 설명, 인덱싱 전략 학습
- 인덱싱 개념: 벡터 데이터베이스에서 효율적인 검색을 위한 인덱싱의 개념과 중요성을 이해합니다.
- 인덱싱 알고리즘: 다양한 인덱싱 알고리즘의 원리와 특징을 학습합니다.
- 인덱싱 전략: 데이터의 특성과 검색 요구 사항에 맞는 인덱싱 전략을 선택하고 적용하는 방법을 익힙니다.
- 인덱스 튜닝: 인덱스 파라미터를 조정하여 검색 성능을 최적화하는 방법을 실습합니다.
Re-ranking: 검색 품질을 높이는 마지막 단계
Re-ranking, 이것만 알아도 충분!
- 개념: Retriever가 검색한 문서들의 순위를 관련도에 따라 재조정하여 가장 적합한 문서를 상위에 위치시키는 과정입니다.
- 학습 데이터: Re-ranking 모델 학습에 필요한 데이터 구축 방안 및 고려 사항을 학습합니다.
- 모델 학습: 다양한 Re-ranking 모델을 학습하고, 성능을 비교 분석합니다.
- Hybrid 전략: Elastic Search, Open Search 등과 결합한 다양한 Re-ranking 전략을 학습합니다.
심화 학습: 사전(Dictionary) 구성을 통한 RAG 전략
실제 업무에서는 도메인 특화 용어, 약어, 동의어 등을 효과적으로 처리하기 위해 사전을 구축하고 활용하는 것이 중요합니다.
- 사전 구축: 도메인 특화 용어, 약어, 동의어 등을 수집하고 정제하여 사전을 구축합니다.
- 사전 연동: RAG 파이프라인에 사전을 연동하여, 쿼리 확장, 동의어 처리, 용어 정규화 등을 수행합니다.
- 사전 기반 RAG 성능 개선: 사전 활용 전후의 RAG 성능을 비교 분석하고, 사전의 효과를 검증합니다.
정리하며
AI가 개발자를 대체할 것이라는 견해도 있지만, AI를 이용해 사람들에게 혜택을 주는 소프트웨어를 개발하는 일은 계속 존재할 것 같습니다. 따라서 개발자라면 AI, LLM, GenAI 등에 대해 항상 공부하고, 자신만의 툴박스에서 바로 꺼내어 쓸 수 있는 도구와 사용법을 챙겨두는 것이 필수 생존 기술이라는 생각이 듭니다.
공부할 내용이 무궁무진해서 두서없이 주욱 주제 중심으로 나열하기는 했습니다만, 새로운 영역에 도전하시는 Senior 개발자 선배님들, Junior 개발자 후배님들께 조금이라도 도움이 된다면 좋겠습니다. 유라클 기술 블로그에 앞으로도 많은 관심 부탁드립니다!
