지난 시간에 살펴보았듯이 생성형 AI 모델을 파인튜닝 하는 데에는 생각보다 많은 시간과 노력이 들어갑니다.한 장에 수 천만 원을 호가하는 최신 GPU와 데이터 라벨링 작업에만 3~4개월이 걸리는 수만 건에 달하는 데이터셋을 마련하는 것은 당장의 매출을 걱정해야 하는 스타트업이나 개인이 손쉽게 할 수 있는 작업이 아닙니다.
더군다나 이러한 지난한 과정을 거쳐 파인튜닝을 진행했다고 하더라도 생성형 AI가 우리가 기대하는 만큼의 성능을 보여줄 것이라고는 장담할 수 없지요. 이를 대신할 방법으로 MicroSoft사의 Azure나 AWS Bedrock 혹은 구글 GCP 등 거대 클라우드 플랫폼에서 제공하는 GUI 기반 파인튜닝 솔루션을 활용하는 방법도 있습니다. 그러나 이러한 클라우드 회사들의 GUI 기반 파인튜닝 서비스는 사용한 만큼 비용이 청구되고, 노코딩(no coding) 기반으로 손쉽게 활용할 수 있는 만큼 성능 또한 기대에 못 미치는 경우가 많습니다.
AWS의 GUI 기반 파인튜닝 도구 (출처 : AWS)
그렇다면 우리는 결국 구독료를 내고 챗GPT나 구글 Gemini 혹은 Anthropic사의 Claude 등 거대 기업의 플랫폼에서 제공하는 성능 좋은 생성형 AI를 사용할 수밖에 없는 것일까요? 채팅 인터페이스를 통해 우리는 거대 기업들에게 데이터를 제공하고, 기업들은 그 훈련 데이터를 가지고 더욱 똑똑한 생성형 AI를 만들게 되면 스타트업이나 일반 개발자들이 설 자리는 점점 더 좁아지는 것이 사실입니다.
하지만 아직 포기하기는 이릅니다. 생성형 AI를 직접 파인튜닝하지 않더라도 우리는 여전히 생성형 AI 모델을 똑똑하게 만들 수 있습니다. 한 발 나아가 누구보다 나를 잘 아는 나만의 개인비서를 만들어 볼 수도 있고, 나만의 관심사에 특화된 생성형 AI 애플리케이션을 만들고 업무에 활용해 볼 수도 있습니다. 그 비밀은 바로 검색증강생성(RAG)에 숨어있습니다. 이번 시간에는 고가의 GPU나 수많은 훈련용 데이터셋 없이도 생성형 AI 모델이 신뢰할만한 답변을 할 수 있게 유도하는 검색증강생성의 개념에 대해 쉽고 간단하게 살펴보도록 하겠습니다.
1. 검색증강생성(RAG, Retrieval Augmented Generation)이란?
RAG란 Retrieve (검색하다, 회수해 오다 등)라는 단어에서 알 수 있듯이 '검색'을 통해 생성형 AI를 더욱 똑똑하게 해주는 일종의 검색 시스템입니다. 생성형 AI와 검색이 무슨 상관일까요? 놀랍게도 RAG 파이프라인에 생성형 AI 모델을 연동하면 AI도 우리가 인터넷에서 필요한 정보를 구글링 하듯이 검색을 할 수 있습니다.
출처 : elastic search
프로그래밍(개발)의 90%는 결국 '구글링' 실력이라는 말이 있습니다. 원하는 프로그램을 구현해 내기 위해 필요한 정보를 구글링 해서 적재적소에 배치할 줄 아는 사람은 단순히 자기가 아는 지식 범위 내에서만 프로그래밍을 하는 개발자보다 훨씬 탁월한 실력을 보여줍니다.
사실 개발뿐만 아니라 세상의 모든 분야에서 구글링 능력은 매우 중요합니다. 사회 초년생 시절 컨설팅펌에 다닐 때 불문율과도 같았던 원칙이 있었습니다. 바로 '구글링'입니다. 모르는 것 자체는 부끄러운 것이 아니지만, 지식을 얻기 위한 최소한의 노력도 하지 않고 모른다고 말하는 것만큼 부끄러운 것은 없습니다.
생성형 AI 모델도 사람과 마찬가지로 검색할 줄 알면 훨씬 더 똑똑해집니다. 최신 논문이나 신빙성 있는 기사와 같은 양질의 정보 소스를 제공받은 생성형 AI 모델과 자신이 아는 범위 내에서만 앵무새처럼 답변하는 생성형 AI 모델의 쓸모는 하늘과 땅만큼이나 큰 차이가 난다고 할 수 있습니다.
RAG란 생성형 AI 모델에게 '구글링'이라는 날개를 달아주는 파이프라인입니다. RAG 파이프라인을 보다 깊게 이해하기 위해서는 다음의 네 가지 요소에 대한 기초 개념을 배워야 합니다. 생성형 AI 엔지니어나 연구자들은 네 가지 구성 요소를 적절히 조합하여 모델의 성능을 개선합니다.
1) 프롬프트 엔지니어링: AI에게 명확한 질문을 던지는 기술
RAG 파이프라인에 생성형 AI를 연동한 뒤에 가장 먼저 해야 할 일은 생성형 AI가 어디에서 정보를 가져올지, 어떻게 답변을 생성해 낼지 명확하게 지침을 내리는 것입니다. 또한 마치 검색 엔진에 키워드를 입력하는 것처럼, 우리는 AI에게 명확하고 구체적인 지침을 내려줌으로써 정보를 원하는 형태에 맞게 출력해 내도록 유도합니다. 이를 '프롬프트 엔지니어링'이라고 합니다.
출처 : Chain-of-Thought Prompting Elicits Reasoning in Large Language Models
예를 들어, "사과에 대해 설명해 줘"라는 막연한 질문보다는 "(사전에 제공된) oo논문을 참고하여 사과의 영양 성분과 칼로리에 대해 간략하게 설명해 주고, 사과를 이용한 요리 레시피 3가지를 알려줘. 모르는 것은 모른다고 대답해"와 같이 구체적인 질문을 할수록 생성형 AI 모델은 더욱 정확하고 유용한 정보를 제공할 수 있습니다.
2) 임베딩 모델: 언어를 숫자로 변환하는 마법사
챗GPT의 기초모델인 GPT-4o와 같은 생성형 AI 모델은 일견 우리의 언어(한국어, 영어 등)를 알아듣고 있는 것처럼 보입니다. 하지만 생성형 AI 모델 역시도 수많은 애플리케이션의 뒷단에 있는 소프트웨어와 같이 본질적으로는 컴퓨터 프로그램입니다. 따라서 생성형 AI 모델이 참고할 수 있는 정보의 소스가 텍스트로 되어있다면, 숫자로 변환해 주는 과정이 필요합니다.
출처 : https://qdrant.tech/
임베딩 모델은 인간의 언어를 컴퓨터가 이해할 수 있는 숫자 형태로 변환하는 역할을 합니다. 이는 마치 단어를 좌표 공간에 배치하여 유사한 의미를 가진 단어끼리 가깝게 만드는 것과 같습니다. 예를 들어, '사과'와 '배'는 '과일'이라는 개념과 가까운 위치에 배치될 것입니다. 이렇게 생성된 숫자 벡터는 컴퓨터가 단어 간의 관계를 쉽게 파악하고, 유사한 질문이나 문서를 찾는 데 활용됩니다.
3) 벡터 데이터베이스(Vector DB 혹은 Vector Store): 정보를 효율적으로 저장하는 창고
벡터 데이터베이스는 임베딩 모델을 통해 생성된 숫자 벡터들을 저장하고 관리하는 공간입니다. 마치 도서관에서 책을 분류하여 서가에 꽂아두듯이, 벡터 데이터베이스는 유사한 의미를 가진 벡터들을 그룹화하여 빠르게 검색할 수 있도록 합니다. 이러한 작업들을 인덱싱(Indexing)이라고 합니다. 벡터 데이터베이스를 활용하면 AI는 사용자의 질문과 가장 유사한 정보를 빠르게 찾아 제공할 수 있습니다.
출처: first finger
4) 다양한 검색 기법: 가장 관련성 높은 정보 찾기
출처 : scaler.com
벡터 데이터베이스에 저장된 정보 중에서 사용자의 질문과 가장 관련성이 높은 정보를 찾기 위해 다양한 검색 기법이 사용됩니다. 대표적인 검색 기법으로는 근접 검색(nearest neighbor search)과 유사도 검색(similarity search) 등이 있습니다. Retrieve 즉 검색을 위한 다양한 기법들에 따라서도 RAG 파이프라인의 검색 성능(결과)은 천차만별입니다.
3. 마무리
이처럼 RAG는 생성형 AI 모델이 주어진 데이터 소스에서 스스로 '구글링'을 할 수 있게 해 줍니다. RAG는 생성형 AI가 단순한 챗봇을 넘어 사용자의 질문에 대한 정확하고 신뢰할 수 있는 답변을 제공하는 지능형 시스템으로 발전시킬 것입니다. 다음 시간부터는 RAG를 구성하는 프롬프트, 벡터 DB, 임베딩, 검색 기법의 네 가지 요소에 대해 하나하나 자세히 뜯어보도록 하겠습니다.