AI 기반 검색을 위한 임베딩 모델 활용
AI가 계속 발전함에 따라, 특히 방대한 양의 비정형 데이터를 다룰 때 정보를 검색하고 검색 결과를 가져오는 방식이 변화했습니다. 전통적인 키워드 기반 검색 방법은 현대 데이터셋의 복잡성을 처리하는 데 어려움을 겪습니다. 특히 의미와 맥락을 이해하는 데 있어 그렇습니다. 바로 여기에서 임베딩 모델과 벡터 임베딩이 등장하여, 시스템이 단어, 이미지 및 기타 데이터 유형 간의 관계를 파악할 수 있게 합니다.
최근 Unstructured Data Meetup에서 Mixedbread의 공동 창립자인 Aamir Shakir는 고성능 AI 시스템, 특히 대규모 Retrieval Augmented Generation(RAG)을 구축하기 위해 임베딩 모델을 만들고 학습시키는 방법에 대한 인사이트를 공유했습니다. 이 블로그에서는 그의 발표의 핵심 내용을 요약하고, 고급 검색 시스템을 구동하는 데 있어 임베딩 모델의 역할을 살펴보겠습니다. 또한 압축 방법과 Milvus 및 Zilliz Cloud(관리형 Milvus)와 같은 벡터 데이터베이스의 사용을 포함하여, 임베딩을 학습, 확장 및 효율적으로 저장하는 기술도 다룰 것입니다.
8월 SF Unstructured Data Meetup에서 발표하는 Aamir Shakir
이 주제에 대해 더 알고 싶다면 YouTube에서 Aamir의 발표를 시청해 보시기를 권장합니다.
임베딩 모델이란 무엇이며 비정형 데이터에 왜 중요한가요?
데이터 중심의 세계에서 조직은 로그, 내부 문서, 오디오, 비디오 등 방대한 양의 비정형 데이터에 압도되고 있습니다. 이렇게 다양한 데이터에서 의미 있는 인사이트를 추출하는 것은 상당한 도전 과제가 될 수 있습니다. 바로 여기에서 임베딩 모델과 벡터 임베딩이 등장합니다.
임베딩 모델은 비정형 데이터를 수치 표현으로 변환하고 이를 고차원 공간에 투영하도록 설계된 머신 러닝 모델의 한 유형입니다. 이러한 표현을 벡터 임베딩이라고 합니다. 이는 데이터 내의 관계와 의미를 포착하여 컴퓨터가 데이터를 더 효과적으로 이해, 처리 및 분석할 수 있게 합니다. 이러한 벡터가 벡터 공간에서 더 가까이 위치할수록 의미적으로 더 유사합니다.
임베딩 모델은 자연어 처리(NLP)부터 computer vision 및 그 이상에 이르기까지 광범위한 작업에서 기본적인 도구입니다.
의미적 이해
임베딩 모델은 단어, 문장 또는 문서의 의미를 벡터로 인코딩하여 그 의미적 관계를 포착합니다. 이러한 방식으로 데이터를 표현함으로써, 이 모델들은 기계가 맥락과 의미를 이해할 수 있게 하며, 질의응답, 번역, 요약과 같은 더 정교한 작업을 가능하게 합니다.
다국어 및 멀티모달 기능
고급 임베딩 모델은 텍스트, 이미지, 오디오와 같은 여러 언어와 데이터 유형(모달리티)을 처리할 수 있습니다. 이러한 기능은 서로 다른 언어 또는 데이터 형식 간의 정보 비교와 검색을 가능하게 합니다. 예를 들어, 하나의 모델이 동일한 벡터 공간 내에서 텍스트와 이미지 전반의 유사한 콘텐츠를 검색하거나 여러 언어의 텍스트를 번역하고 정렬할 수 있습니다.
전이 가능성
사전 학습된 임베딩 모델은 다양한 다운스트림 작업에 맞게 (파인튜닝과 같은 기법을 통해) 조정될 수 있는 경우가 많습니다. 모델을 처음부터 학습하는 대신, 사전 학습된 모델을 활용하고 특정 작업에 맞게 수정하여 시간과 컴퓨팅 자원을 절약할 수 있습니다. 이러한 전이 가능성은 분류, 추천 시스템 또는 기타 사용 사례 등 AI 애플리케이션 구축에 임베딩 모델을 매우 효율적으로 만듭니다.
고전적 검색 접근 방식의 문제점
임베딩이 부상하기 전에는 term frequency-inverse document frequency(TF-IDF) 또는 키워드 기반 매칭과 같은 전통적인 검색 방법이 정보 검색에 사용되었습니다. 그러나 이러한 접근 방식은 단순한 사용 사례에는 잘 작동하지만 단어 간의 의미적 관계를 포착하지 못합니다. 또한 오늘날의 더 복잡한 정보 요구를 처리하는 데 상당한 한계가 있습니다. 몇 가지 한계는 다음과 같습니다.
모호성 처리의 어려움
전통적인 방법의 주요 과제 중 하나는 모호성을 처리하는 데 어려움이 있다는 점입니다.
여러 의미를 가진 단어(다의성)와 같은 의미를 가진 서로 다른 단어(동의성)는 전통적인 방법에 문제를 일으키고 부정확한 결과로 이어집니다. “bank”라는 단어를 생각해 보세요. “bank”를 검색하면 실제로 사용자는 강둑에 대한 정보를 찾고 있었는데도 금융 기관에 관한 결과가 반환될 수 있습니다.
임베딩은 단어가 나타나는 문맥을 고려함으로써 이 문제를 해결합니다. 금융 분야의 “bank”는 자연의 맥락에서의 “bank”와 다른 벡터 표현을 갖게 됩니다. 이는 검색 시스템이 단지 관련성 있을 뿐만 아니라 문맥적으로도 정확한 결과를 반환하도록 돕습니다.
고정된 표현
전통적인 방법의 또 다른 한계는 단어나 문서에 대해 고정된 표현을 사용한다는 점입니다. 이러한 표현은 시간이 지나도 서로 다른 문맥에 맞게 변하지 않으며, 이는 동적 정보 검색에서의 활용을 제한할 수 있습니다.
제한된 확장성
전통적인 방법은 데이터가 더 커지고 복잡해질수록, 주로 웹 규모의 정보 검색 작업을 처리할 때 성능과 효율성을 유지하는 데 어려움을 겪습니다. 반면, 벡터 임베딩을 다루는 의미 검색 시스템은 확장되도록 설계되어 있습니다. 데이터가 벡터로 변환되어 Milvus와 같은 벡터 데이터베이스에 저장되면, 수십억 규모의 벡터 데이터도 효과적으로 처리되고 빠르고 정확한 검색에 사용될 수 있습니다. 이는 임베딩을 추천 시스템 및 RAG와 같은 시스템에 중요하게 만듭니다.
이러한 한계는 키워드가 아니라 의미를 사용해 관련 콘텐츠를 이해하고 검색할 수 있는 현대적 검색 시스템을 구축하는 데 임베딩이 필요함을 보여줍니다.
임베딩 모델과 그 일반화 문제
임베딩 모델은 RAG부터 추천 시스템 및 그 이상에 이르기까지 AI 애플리케이션의 초석이 되었습니다. 이러한 모델은 데이터를 인코딩하고 검색 및 분류와 같은 작업을 용이하게 하는 데 매우 효과적이지만, 특히 일반화와 관련해서는 한계가 없는 것은 아닙니다.
어휘 외(OOV) 용어 처리: 많은 임베딩 모델은 고정된 어휘를 가지고 있어, 학습 데이터에 포함되지 않았던 새로운 단어를 접할 때 문제가 발생합니다.
롱테일 성능: 임베딩 모델은 일반적으로 흔한 단어와 개념에서는 잘 작동하지만, 매우 구체적인 용어에서는 어려움을 겪을 수 있습니다.
도메인 특수성: 한 도메인의 데이터로 학습된 임베딩 모델은 다른 도메인에 적용될 때 성능이 저하될 수 있습니다. 이러한 한계는 임베딩이 학습 데이터의 통계적 패턴을 포함하고 있으며, 이것이 새로운 유형의 데이터에는 효과적이지 않을 수 있기 때문입니다. 따라서 임베딩 모델은 일반적으로 최상의 성능에 도달하기 위해 도메인별 데이터에 대한 파인튜닝이 필요합니다.
임베딩의 편향: 임베딩 모델은 편향에도 민감합니다. 이들은 대규모의, 때로는 정제되지 않은 데이터셋으로 학습됩니다. 따라서 데이터에 존재하는 사회적 편향을 잘못 흡수할 수 있습니다.
문맥적 변이: 정적 임베딩 모델은 문맥과 관계없이 단어에 동일한 벡터를 할당합니다. 이는 둘 이상의 의미를 가질 수 있는 단어의 경우 문제가 될 수 있습니다.
최첨단 임베딩 모델을 구축하고 학습하는 방법
특히 RAG와 같은 복잡한 시스템을 위한 고품질 임베딩 모델을 구축하려면 확장성, 정확성, 효율성을 보장하기 위한 신중한 접근이 필요합니다. 임베딩 모델은 일반적으로 neural networks를 사용하여 구축되며, 생성하는 임베딩의 품질은 학습 과정에 크게 좌우됩니다. 최첨단(SOTA) 성능을 달성하려면 몇 가지 핵심 단계를 따라야 합니다:
대규모의 다양한 데이터셋에 대한 사전 학습
강력한 임베딩 모델을 구축하는 데 있어 중요한 첫 단계는 대규모의 다양한 데이터셋에 대한 사전 학습입니다. 이러한 사전 학습은 모델을 광범위한 언어 패턴, 구조, 문맥에 노출시켜, 다양한 다운스트림 작업에 적용할 수 있는 일반화 가능한 특징을 학습하게 합니다. 그 아이디어는 모델에 데이터에 대한 폭넓은 이해를 제공하여, 익숙한 입력뿐만 아니라 새롭고 보지 못한 데이터에서도 잘 수행할 수 있게 하는 것입니다.
임베딩에는 다음을 포함한 다양한 유형이 있습니다:
단어 임베딩은 연속 벡터 공간에서 단어를 투영하는 저차원의 dense vectors입니다. 이는 의미론적 및 구문론적 관계를 포착하는 데 유용합니다.
개념 임베딩은 의미 공간에서 개념의 관계와 속성을 포착하는 벡터 표현이며, 이는 대규모 knowledge graphs에서 자주 비롯됩니다.
문맥적 임베딩은 BERT 및 GPT와 같은 모델이 생성하는 동적 단어 표현입니다. 이들은 구문 내 각 단어의 주변 문맥을 고려하여 문맥에 민감한 임베딩을 생성합니다.
다음 그림은 임베딩 모델의 학습 과정을 이해하는 데 도움이 됩니다:
임베딩 모델의 학습 단계
토큰화는 입력 데이터를 단어 또는 하위 단어와 같은 더 작은 단위(토큰)로 분해하여 모델을 위한 어휘를 생성합니다. 어휘는 모델이 학습 중 데이터를 이해하고 표현하는 데 사용할 고유 토큰의 집합입니다.
임베딩 초기화는 데이터셋의 각 토큰을 임베딩 벡터가 표현하는 행렬을 초기화합니다. 이 행렬은 토큰 간의 관계와 의미를 요약하며, 벡터는 일반적으로 50차원에서 1,000차원 범위입니다.
학습은 의미적으로 유사한 단어 간의 거리를 최소화하고 서로 다른 단어 간의 거리를 최대화하도록 모델의 매개변수를 조정합니다.
작업별 최적화를 위한 파인튜닝
사전 학습 이후에는 특정 작업에 맞게 모델을 최적화하기 위해 파인튜닝이 중요합니다. 예를 들어, RAG 시스템이 법률 분야에서 사용되는 경우 법률 문서로 임베딩 모델을 파인튜닝합니다. 이렇게 하면 임베딩이 도메인별 어휘를 유지하여 RAG 시스템 성능이 향상됩니다. 이 단계에서는 멀티모달 및 다국어 검색 작업에 적합한 구조화된 데이터와 비정형 데이터를 처리하도록 모델도 파인튜닝합니다.
대규모 벡터 임베딩 저장
임베딩 모델이 더 발전함에 따라, 모델이 생성하는 벡터는 점점 더 복잡해질 수 있습니다. 모델 복잡성이 항상 더 높은 차원의 벡터를 의미하는 것은 아니지만, 더 큰 모델은 종종 더 상세한 표현을 가진 임베딩을 생성하며, 때로는 수천 개의 차원으로 이어지기도 합니다. 이는 특히 대규모 데이터셋이나 실시간 애플리케이션을 다룰 때 저장과 검색 측면에서 모두 과제를 제시합니다.
이러한 과제를 해결하려면 효율적인 저장 및 검색 방법이 매우 중요합니다. 벡터 데이터베이스, 근사 최근접 이웃(ANN) 검색, 최적화된 인덱싱 구조와 같은 기법이 일반적으로 사용되어 성능을 희생하지 않고도 임베딩을 빠르게 검색할 수 있도록 합니다. 또한 압축 기법도 이러한 고차원 벡터의 의미적 의미를 잃지 않으면서 크기를 줄이는 데 필수적입니다.
벡터 데이터베이스
벡터 데이터베이스인 Milvus와 Zilliz Cloud(Milvus의 관리형 버전)는 벡터 임베딩 형태의 비정형 데이터를 효율적으로 관리하고 검색하도록 특별히 설계되었습니다. Milvus는 메가 스케일에서 벡터를 저장하고 검색하는 데 최적화된 오픈소스 벡터 데이터베이스입니다. 수십억 개의 벡터가 포함된 데이터베이스로 작업할 때도 관련 임베딩을 빠르게 검색하기 위해 근사 최근접 이웃(ANN) 검색을 사용합니다. Zilliz Cloud는 관리형 서비스에서 더 고급 기능을 제공하여 대규모 벡터 데이터베이스 관리의 운영 부담을 줄입니다.
압축 기법
임베딩은 벡터 데이터베이스에 직접 저장할 수 있지만, 대규모로 저장하는 것은 비용이 많이 들 수 있습니다. 이때 압축 기법이 유용합니다. 압축의 핵심 아이디어는 메모리 요구 사항을 줄이고 쿼리 속도를 향상하는 것입니다. 한 유형은 이진 양자화이고, 다른 하나는 스칼라 양자화입니다.
이진 양자화는 주어진 임베딩의 각 특징을 이진 숫자로 줄이는 반면, 스칼라 양자화는 차원의 전체 크기를 2바이트 float나 1바이트 integer와 같은 더 작은 데이터 유형으로 줄입니다.
예를 들어, 이미지가 세 가지 고유한 특징으로 표현되고 각 특징이 FLOAT-32 저장 단위 범위의 값을 가진다면, 이 벡터에 이진 양자화를 수행하면 세 가지 특징 각각이 독립적으로 단일 이진 숫자로 표현됩니다. 따라서 세 개의 FLOAT-32 값을 포함하는 벡터는 [1, 0, 1]과 같은 세 개의 이진 숫자로 이루어진 벡터로 변환됩니다.
이진 양자화는 효율적이고 덜 복잡한 계산 덕분에 대규모 데이터셋에서 벡터 검색을 수행하는 데 매우 효과적입니다. Milvus와 이진 벡터의 경우, Milvus는 유사도 메트릭으로 해밍 거리(Hamming Distance)를 사용합니다. 이 메트릭은 저장된 두 이진 벡터 간의 거리를 빠르게 계산할 수 있습니다. 다음은 해밍 거리 방식이 어떻게 작동하는지 보여주는 예시입니다.
해밍 거리 방식이 작동하는 방식
이제 스칼라 양자화 기법을 사용하여 float32 임베딩을 int8 형식으로 변환하겠습니다. 이 접근 방식은 float32 값의 연속 범위를 -127에서 127까지의 256개 고유한 int8 값으로 이루어진 이산 집합에 매핑합니다.
스칼라 양자화를 수행하려면:
범위 계산: 각 임베딩 차원에 대한 최솟값과 최댓값을 결정합니다.
양자화 단계 결정: float32 값을 int8 범위 전체에 균등하게 분포시키는 데 필요한 단계 크기를 계산합니다.
양자화: 계산된 단계 크기를 사용하여 각 float32 값을 가장 가까운 int8 값으로 반올림합니다.
-1.0에서 1.0까지의 값을 이산적인 int8 값으로 변환
int8로의 스칼라 양자화를 통해 원래 float32 임베딩의 정밀도를 낮추어 각 값이 8비트 정수(4배 더 작음)로 표현되도록 하며, 이를 통해 가능한 한 많은 정보를 보존하려고 하면서 저장에 필요한 메모리 양을 줄입니다.
압축의 경제학
요약
정보 검색에 유연하고 확장 가능하며 의미적으로 풍부한 접근 방식을 제공하는 임베딩 모델은 유사도 검색의 방향을 정의하는 데 도움을 주고 있습니다. 클러스터링과 이중 텍스트 마이닝을 개선하는 것부터 멀티모달 및 다국어 검색을 가능하게 하는 것까지, 임베딩은 기존 방법으로는 도달할 수 없는 많은 기회를 제공합니다.
고품질 RAG 시스템을 위한 최첨단 임베딩 모델을 구축하려면 사전 학습, 미세 조정, 확장성에 세심한 주의가 필요합니다. Zilliz Cloud와 Milvus는 임베딩을 대규모로 관리하고 더 지능적이고 반응성이 뛰어난 신경망 검색 시스템을 만드는 데 도움을 줍니다.
추가 자료
계속 읽기

Vector Lakebase: End the AI Data Silo
Learn how Vector Lakebase unifies vector search, data lakes, and AI data operations so teams can serve RAG and agents without copy-and-sync pipelines.

Announcing the General Availability of Single Sign-On (SSO) on Zilliz Cloud
SSO is GA on Zilliz Cloud, delivering the enterprise-grade identity management capabilities your teams need to deploy vectorDB with confidence.

Zilliz Cloud Delivers Better Performance and Lower Costs with Arm Neoverse-based AWS Graviton
Zilliz Cloud adopts Arm-based AWS Graviton3 CPUs to cut costs, speed up AI vector search, and power billion-scale RAG and semantic search workloads.



