GPT-4o나 Gemini와 같은 초거대언어모델(LLM)은 얼핏 우리 인간이 그러하듯 문장과 단어를 이해하고 있는 것처럼 보이지만 사실은 여느 컴퓨터 프로그램이 그러하듯 문자를 있는 그대로 이해하지는 못합니다. 따라서 인간이 LLM과 의사소통을 하기 위해서는 이처럼 우리 인간만이 알 수 있는 문자와 단어 형태로 된 텍스트 데이터를 LLM이 쉽게 알아들을 수 있는 숫자로 변환해 주는 과정이 필요했습니다.
지난 시간에 문장과 단어 등으로 이루어진 텍스트 데이터를 -1에서 1 사이의 실수로 이루어진 고차원 벡터로 변환하는 과정인 임베딩(Embedding)에 대해서 배웠습니다. 이번 시간에는 임베딩이라는 과정이 검색증강생성(RAG)에 있어서 왜 중요한지, 그리고 검색증강생성(RAG) 파이프라인의 성능에 있어서 핵심적인 역할을 하는 임베딩 모델이란 무엇인지 살펴보도록 하겠습니다.
1. 검색증강생성(RAG) 속 임베딩의 역할
이러한 임베딩은 검색증강생성(RAG)에서도 매우 중요한 역할을 합니다. 생성형 AI도 구글링을 한다? 에서 다루었던 것처럼 RAG란 검색을 통해 생성형 AI를 더욱 똑똑하게 해주는 일종의 검색 시스템입니다. RAG 파이프라인에 GPT-4o나 Claude-3.5-Sonnet과 같은 LLM을 연동하면, 우리가 인터넷에서 필요한 정보를 검색하듯 LLM도 외부 소스에서 필요한 정보를 검색을 하여 답변 정확도와 품질을 올릴 수 있습니다.
임베딩 과정은 사용자가 검색하고자 하는 검색어를 초거대언어모델(LLM)이 알아들을 수 있는 형태 즉 고차원 벡터로 변환해 줍니다. 또한 검색하고자 하는 내용을 담고 있는 외부 지식문서(pdf, json, doc 등) 속 텍스트의 내용 역시도 고차원의 벡터로 변환하여 벡터 스토어(Vector Store)라는 곳에 저장합니다. 벡터 스토어에는 Elastic Searchi, Chroma DB, Faiss 등 다양한 종류가 있는데, 이러한 벡터 스토어의 특징과 작동 원리에 대해서는 이후에 자세히 다루도록 하겠습니다.
RAG속 Embedding Model의 역할
이 벡터 스토어에 저장된 정보는 이후 검색 요청 시 참조되는데, 원리는 다음과 같습니다. 우선 사용자가 입력한 검색어가 고차원 벡터로 변환되면, 이 벡터와 벡터 스토어 내의 문서 벡터들 간의 유사도를 계산하여 가장 관련성이 높은 문서를 찾아냅니다. 유사도를 계산하는 방법에는 코사인 유사도(Cosine Similarity), 유클리디안 거리(Euclidean Distance) 등 통계 이론에 기반한 다양한 방법들이 있습니다.
이러한 과정에서 임베딩 모델은 단순히 단어의 의미를 파악하는 것에 그치지 않고, 문맥과 의미의 유사성을 기반으로 정보 검색의 효율성을 극대화합니다. 예를 들어 사용자가 "서울의 유명한 관광지"라고 검색했다고 가정해 봅시다. 이 검색어는 LLM이 이해할 수 있도록 고차원 벡터로 변환됩니다. 이제 RAG 시스템은 외부에 있는 여러 문서들—예를 들어 "서울타워", "경복궁", "북촌 한옥마을"에 대한 정보가 담긴 문서들—을 각각 고차원 벡터로 변환해 저장합니다.
검색어 벡터와 저장된 문서 벡터 간의 유사도를 계산합니다. 이 과정은 마치 개인 비서가 "서울의 유명한 관광지"라는 질문을 듣고, 여러 문서에서 그와 관련된 정보를 찾아보는 것과 같습니다. 유사도 계산을 통해 가장 높은 점수를 받은 문서들이 선택됩니다. 예를 들어, "서울타워"와 "경복궁"이 가장 관련성이 높다고 판단될 수 있습니다. 마지막으로, 선택된 문서들에서 정보를 바탕으로 LLM이 답변을 생성합니다. 사용자는 "서울의 유명한 관광지로는 서울타워와 경복궁이 있습니다."라는 답변을 받게 됩니다.
2. 임베딩 모델(Embedding Model)이란 무엇일까?
임베딩 모델(Embedding Model)은 위에서 다루었던 임베딩 과정을 수행하기 위한 별도의 모델로, 텍스트 데이터를 고차원 벡터 공간에 매핑하는 알고리즘입니다. 주로 단어 또는 문장과 같은 언어 단위를 수치적으로 표현하는 데 사용됩니다. 이 모델은 주어진 텍스트의 의미를 효과적으로 포착하여, 컴퓨터가 텍스트의 문맥을 이해하고 관련성을 파악할 수 있도록 돕습니다.
텍스트 데이터를 다차원 벡터로 변환해 주는 임베딩 모델 (출처 : medium)
임베딩 모델은 크게 두 가지 유형으로 나눌 수 있습니다. 바로 단어 임베딩과 텍스트 임베딩입니다. 단어 임베딩은 특정 단어를 고정된 차원의 벡터로 변환하여, 단어 간의 의미적 유사성을 반영합니다. 예를 들어, Word2 Vec이나 GloVe와 같은 단어 임베딩 모델은 "왕"과 "여왕" 같은 유사한 의미를 가진 단어들이 벡터 공간에서 가까이 위치하도록 학습합니다. 이는 단어 수준의 작업—예를 들어, 감정 분석이나 단어 유사도 계산—에 유용합니다.
단어 자체의 관계를 나타내는 단어 임베딩의 예시
반면 텍스트 임베딩은 문장이나 문단과 같은 더 큰 텍스트 덩어리를 벡터로 변환합니다. BERT나 Sentence-BERT와 같은 모델은 전체 문맥을 고려하여, 문장 간의 의미적 관계를 포착하는 데 중점을 둡니다. 텍스트 임베딩은 문서 요약, 정보 검색, 문서 분류 등과 같은 더 복잡한 작업에 적합합니다.
보다 복잡한 문장 간의 관계 등을 고려한 텍스트 임베딩
이처럼 단어 임베딩은 로컬 콘텍스트에 따라 특정 단어를 표현하는 반면, 텍스트 임베딩은 전체 텍스트의 의미 구조를 이해하는 데 초점을 맞추고 있습니다. 이러한 차이는 RAG 시스템에서도 중요하게 작용합니다. 사용자가 입력한 검색어가 고차원 벡터로 변환되면, 이 벡터는 검색할 텍스트의 벡터와 비교되어 가장 관련성 높은 문서를 찾아내는 데 사용됩니다. 다음시간에는 인덱싱(Indexing)과 청킹(Chunking) 등 임베딩을 위한 구체적인 노하우에 대해 배워보도록 하겠습니다.