RAG(Retrieval Augmented Generation) 시스템은 LLM(Large Language Model)이 외부 지식을 활용하여 더욱 정확하고 풍부한 답변을 생성할 수 있도록 도와주는 핵심적인 기술이에요. 솔직히 말해서, LLM만 가지고는 답변의 정확성이나 최신 정보 반영에 한계가 있었거든요. 특히, 엉뚱한 답변을 내놓는 환각 현상(Hallucination)은 정말 골치 아팠죠. 그런데 RAG는 이런 문제들을 해결해 줄 수 있는 멋진 기술이에요.
외부 지식을 활용하는 RAG의 매력적인 면모
RAG는 외부 지식을 검색하고, 이를 LLM의 입력으로 활용하여 더욱 정확하고 풍부한 답변을 생성하는 방식이에요. 쉽게 말해, LLM이 혼자 고민하는 대신, 외부 지식 베이스를 참고하여 답변을 만드는 거죠. 마치 우리가 어려운 문제를 풀 때 참고서를 찾아보는 것과 비슷하다고 할 수 있어요. 이렇게 외부 지식을 활용하면 LLM이 더욱 똑똑해지고, 정확한 정보를 제공할 수 있게 되는 거죠.
하지만 RAG 시스템을 구축하고 개선하는 과정이 쉽지만은 않았어요. 특히, 어떤 문서를 먼저 LLM에 제공해야 더 좋은 답변을 얻을 수 있을지 고민이 많았어요.
Bi-Encoder: 빠른 속도를 자랑하는 인코더
RAG 시스템에서 가장 먼저 만나게 되는 인코더는 바로 Bi-Encoder에요. Bi-Encoder는 질문과 문서를 각각 독립적으로 임베딩하고, 이를 통해 유사도를 계산하는 방식이에요. 마치 질문과 문서에게 각자의 고유한 주소를 부여하고, 이 주소를 비교하여 얼마나 가까운지 확인하는 것과 같아요.
Bi-Encoder의 매력적인 속도
Bi-Encoder의 가장 큰 장점은 속도가 엄청나게 빠르다는 거예요. 문서를 미리 임베딩해 놓고 질문이 들어오면 빠르게 유사한 문서를 찾아낼 수 있거든요. 마치 지도에서 목적지를 검색하면 빠르게 경로를 찾아주는 것과 같아요. 특히, 대규모 데이터셋을 다룰 때 Bi-Encoder의 속도는 빛을 발휘해요. 엄청난 양의 문서를 빠르게 처리해야 하는 RAG 시스템에 딱 맞는 인코더죠.
Bi-Encoder의 아쉬운 정확도
하지만 Bi-Encoder는 속도가 빠른 대신 정확도가 다소 떨어지는 단점이 있어요. 질문과 문서를 독립적으로 임베딩하기 때문에, 질문과 문서의 맥락을 제대로 고려하지 못할 수 있거든요. 마치 지도에서 두 장소의 거리를 직선 거리로만 계산하는 것과 같아서, 실제 이동 경로와 차이가 발생할 수 있어요.
Bi-Encoder의 활용
그래서 Bi-Encoder는 RAG 시스템에서 초기 검색 단계에 주로 활용돼요. 즉, 엄청난 양의 문서 중에서 질문과 관련성이 높은 문서를 빠르게 추려내는 역할을 수행하는 거죠. 마치 지도에서 목적지 근처의 역이나 랜드마크를 먼저 찾아주는 것과 같아요.
Cross-Encoder: 정확한 유사도를 찾는 인코더
Bi-Encoder의 속도는 정말 매력적이지만, 정확도가 좀 아쉽다는 생각이 들었어요. 그래서 등장한 것이 바로 Cross-Encoder에요. Cross-Encoder는 질문과 문서를 함께 임베딩하여 유사도를 계산하는 방식이에요. 마치 질문과 문서가 서로 대화를 나누면서 얼마나 잘 어울리는지 확인하는 것과 같아요.
Cross-Encoder의 뛰어난 정확도
Cross-Encoder는 질문과 문서를 함께 처리하기 때문에, 질문과 문서의 맥락을 훨씬 잘 이해할 수 있어요. 마치 두 사람이 서로 대화를 나누면서 서로의 생각을 이해하는 것처럼, 질문과 문서의 의미를 정확하게 파악할 수 있죠. 그래서 Cross-Encoder는 Bi-Encoder보다 훨씬 높은 정확도를 자랑해요.
Cross-Encoder의 아쉬운 속도
하지만 Cross-Encoder는 정확도가 높은 대신 속도가 느리다는 단점이 있어요. 질문과 문서를 함께 처리해야 하기 때문에 연산량이 많아지고, 추론 시간이 오래 걸리거든요. 마치 두 사람이 길고 복잡한 이야기를 나누는 것처럼, 시간이 오래 걸릴 수 있어요.
Cross-Encoder의 활용
Cross-Encoder는 RAG 시스템에서 Bi-Encoder로 추려낸 문서들의 순위를 재정렬하는 데 사용돼요. 즉, Bi-Encoder로 찾은 문서들 중에서 질문과 가장 관련성이 높은 문서를 뽑아내는 역할을 수행하는 거죠. 마치 지도에서 찾은 랜드마크들 중에서 목적지와 가장 가까운 곳을 최종적으로 선택하는 것과 같아요.
Bi-Encoder와 Cross-Encoder의 조합: RAG 시스템 개선
Bi-Encoder와 Cross-Encoder는 서로 다른 장점을 가지고 있어요. Bi-Encoder는 빠르고, Cross-Encoder는 정확하죠. 그래서 두 인코더를 조합하여 RAG 시스템의 성능을 극대화할 수 있어요.
Two-Stage 전략
일반적으로 Bi-Encoder를 활용하여 빠르게 후보 문서를 추출하고, Cross-Encoder를 활용하여 후보 문서들의 순위를 재정렬하는 Two-Stage 전략을 사용해요. 즉, Bi-Encoder는 넓은 범위에서 후보를 빠르게 선별하고, Cross-Encoder는 선별된 후보들을 꼼꼼하게 비교하여 최적의 문서를 찾는 역할을 수행하는 거죠. 마치 넓은 바다에서 섬을 먼저 찾고, 그 섬들 중에서 가장 아름다운 섬을 선택하는 것과 같아요.
Bi-Encoder | 빠른 속도 | 낮은 정확도 | 초기 검색 |
Cross-Encoder | 높은 정확도 | 느린 속도 | 순위 재정렬 |
인코더 장점 단점 활용
Onnx 변환 및 양자화를 통한 속도 개선
Cross-Encoder의 단점인 속도 문제를 해결하기 위해 Onnx 변환 및 양자화를 적용할 수 있어요. Onnx 모델로 변환하면 다양한 환경에서 모델을 활용할 수 있고, 양자화를 통해 모델의 크기와 연산량을 줄여 속도를 향상시킬 수 있거든요. 마치 무거운 짐을 가볍게 만들어서 더 빨리 이동할 수 있도록 하는 것과 같아요.
실제 적용 사례
실제로 Sentence-Transformer를 사용하여 Cross-Encoder를 학습시키고, Onnx 모델로 변환한 후 양자화를 적용한 결과, 속도는 개선되면서도 높은 정확도를 유지할 수 있었어요. "안녕" 다음에 "오 안녕 반가워"가 오는 것이 99% 자연스럽다는 결과가 나왔고, "안녕" 다음에 "자동차"가 오는 것은 12% 정도 자연스럽다는 결과가 나왔어요. 이러한 결과는 기존 Cross-Encoder의 결과와 동일했어요.
마무리
RAG 시스템을 개선하기 위해 Bi-Encoder와 Cross-Encoder를 활용하는 방법에 대해 알아봤어요. Bi-Encoder는 빠른 속도로 초기 검색을 수행하고, Cross-Encoder는 높은 정확도로 순위를 재정렬하는 역할을 수행해요. 두 인코더를 조합하여 Two-Stage 전략을 사용하면 RAG 시스템의 성능을 극대화할 수 있고, Onnx 변환 및 양자화를 통해 Cross-Encoder의 속도를 개선할 수 있어요.
앞으로도 RAG 시스템은 더욱 발전하고, 다양한 분야에서 활용될 것으로 예상돼요. 저도 RAG 시스템을 꾸준히 연구하고, 더욱 개선된 RAG 시스템을 개발하기 위해 노력할 거예요.
QnA
Q1. RAG 시스템이 왜 필요한가요?
A1. RAG 시스템은 LLM이 외부 지식을 활용하여 더욱 정확하고 풍부한 답변을 생성할 수 있도록 돕기 위해 필요해요. LLM만으로는 답변의 정확성이나 최신 정보 반영에 한계가 있고, 환각 현상(Hallucination)이 발생할 수 있기 때문이에요.
Q2. Bi-Encoder와 Cross-Encoder의 차이점은 무엇인가요?
A2. Bi-Encoder는 질문과 문서를 각각 독립적으로 임베딩하고 유사도를 계산하는 반면, Cross-Encoder는 질문과 문서를 함께 임베딩하여 유사도를 계산해요. Bi-Encoder는 속도가 빠르지만 정확도가 떨어지는 반면, Cross-Encoder는 정확도가 높지만 속도가 느려요.
Q3. Two-Stage 전략은 무엇인가요?
A3. Two-Stage 전략은 Bi-Encoder를 활용하여 빠르게 후보 문서를 추출하고, Cross-Encoder를 활용하여 후보 문서들의 순위를 재정렬하는 전략이에요. 이를 통해 RAG 시스템의 성능을 극대화할 수 있어요.
키워드:rag, 검색증강생성, llm, 대규모언어모델, 바이인코더, 교차인코더, 투스테이지, 자연어처리, nlp, 임베딩, 유사도, 검색, 추론, 속도, 정확도, onnx, 양자화, 센텐스트랜스포머, 한국어, 챗봇, 인공지능, 딥러닝, 머신러닝, 데이터과학, 개발, 기술, 솔루션, 효율성, 성능향상, 개선, 실무