벡터 데이터베이스란 무엇인가요?

벡터 데이터베이스란 무엇인가요?

벡터 데이터베이스는 고차원 벡터 임베딩을 저장, 관리, 검색하도록 설계된 특수 데이터베이스입니다. 주요 기능은 대규모 언어 모델(LLM)이 쿼리할 수 있는 외부 지식 기반으로 활용되어, 지식 기반에 저장된 데이터를 바탕으로 모델의 응답을 '그라운딩(grounding)'하고, 환각 발생 위험을 줄이는 것입니다. 벡터 데이터베이스의 핵심 기능은 단순히 키워드를 일치시키는 것이 아니라, 개념적으로 유사한 데이터 포인트를 식별하는 의미적 유사성(semantic similarity) 검색을 수행하는 것입니다. 머신 러닝 모델의 밀집 벡터 임베딩과 희소 벡터 임베딩을 모두 인덱싱하고 저장하여, 빠른 유사성 검색을 지원합니다. 이러한 임베딩은 텍스트, 이미지, 오디오와 같은 비정형 데이터 내의 의미론적 관계를 포착합니다. 데이터베이스가 생성한 벡터 공간에서 관련 항목이 서로 가까이 배치되어 있어, 시스템이 관련성에 따라 결과의 순위를 매길 수 있습니다.


벡터 임베딩

벡터 임베딩의 정의와 생성 방식

벡터 임베딩은 단어, 구문, 전체 문서 등의 데이터를 나타내는 부동소수점 값의 숫자 배열입니다. 대규모 언어 모델과 같은 머신러닝 모델에 의해 생성되며, 디지털 미디어를 고차원 공간 내의 점으로 변환합니다. 이 프로세스는 원본 데이터의 근본적인 의미론적 의미와 관계를 포착합니다. 예를 들어, '공원에서 노는 골든 리트리버' 이미지의 임베딩은 '밖에 있는 행복한 개'라는 텍스트의 임베딩과 수치적으로 가까운 임베딩으로 변환될 수 있습니다. 한 제공업체의 모델에서 생성된 임베딩은 다른 제공업체의 모델에서 이해할 수 없다는 점에 유의하세요. 예를 들어, OpenAI 모델의 임베딩은 다른 제공업체의 임베딩과 호환되지 않습니다.

밀집 벡터(임베딩)란 무엇인가요?

밀집 벡터는 거의 모든 요소가 0이 아닌 값으로 구성된 고차원 수치 임베딩입니다. 밀집 벡터의 중요한 특징은 특정 모델에서 생성된 모든 벡터가 동일한 차원 고정 개수를 가져야 한다는 점이며, 이는 유사성 측정을 위한 전제 조건입니다. 예를 들어 Azure OpenAI 모델의 임베딩에는 1,536개의 차원이 있습니다. 일반적으로 트랜스포머 모델에 의해 생성되며, 풍부하고 미묘한 의미론적 의미를 포착하여 의미적 유사성 검색에 적합합니다. 예를 들어, '고양이'라는 단어의 밀집 벡터는 [0.135, -0.629, 0.327, 0.366, ...]로 나타날 수 있습니다.

희소 벡터(임베딩)란 무엇인가요?

희소 벡터는 대부분의 요소가 0인 고차원 수치 임베딩으로, 저장 공간과 계산 효율성을 모두 최적화한 구조입니다. 밀집 검색기와 달리 희소 검색기는 TF-IDF(Term Frequency - Inverse Document Frequency, 단어의 빈도 - 역 문서 빈도) 또는 BM25와 같은 전통적인 검색 기법을 사용해 키워드를 기반으로 쿼리를 문서와 일치시킵니다. 예를 들어, '건강한 간식'을 검색하면 관련 용어에 가중치를 부여하여 확장되는 희소 벡터가 생성될 수 있습니다. 가령, ["사과" (3.0), "당근" (2.5), "비타민" (1.2)]와 같이 일부 용어에 가중치를 할당하고, 나머지 어휘의 모든 용어는 가중치가 0입니다. 이 구조는 전통적인 역색인(iinverted index)과 호환성이 높아 효율적인 검색이 가능합니다.

유사성 측정

벡터 유사성과 거리는 어떻게 측정하나요?

벡터 검색에서 유사성은 고차원 공간에서 두 벡터 사이의 거리나 각도를 계산하여 정량화되며, 벡터가 서로 가까울수록 의미적으로 더 유사하다고 간주됩니다. 이 근접성을 측정하는 데 사용되는 일반적인 지표로는 코사인 유사도(cosine similarity), 유클리드 거리(Euclidean distance), 내적(dot product), 해밍 거리(Hamming distance), 맨해튼 거리(Manhattan distance) 등이 있습니다.

  • L2 거리(유클리드 거리)는 가장 일반적인 측정 지표로, 두 벡터 점 사이의 직선 거리를 나타냅니다.
  • L1 거리(맨해튼 거리)는 벡터 구성 요소의 절대 차이를 합산하여 거리를 측정하는 지표로, 격자형 도시에서 거리를 계산하는 것과 유사합니다.
  • Linf 거리(체비셰프 거리)는 단일 차원에서의 최대 차이입니다.
  • 코사인 유사도는 두 벡터 사이의 코사인 각도를 측정해 크기에 관계없이 두 벡터가 유사한 방향을 가리키는지 여부를 결정합니다. 점수 1은 두 벡터가 동일함을, –1은 정반대임을 의미합니다. 이는 OpenAI 모델과 같은 정규화된 임베딩 공간에서 자주 사용되는 지표입니다.
  • 내적 유사도는 벡터의 각도와 크기를 모두 고려합니다. 정규화된 벡터에서는 코사인 유사도와 동일하지만, 계산 효율이 더 높은 경우가 많습니다.
  • 해밍 거리는 두 벡터가 서로 다른 차원의 개수를 계산합니다.
  • 최대 내적(MaxSim)은 단일 데이터(예: 문서)가 여러 벡터(예: 각 단어에 대한 벡터)로 표현될 때 사용되는 유사성 지표입니다. 한 문서의 각 벡터를 다른 문서에서 가장 유사한 벡터와 비교한 후, 그 결과를 집계해 유사성을 계산합니다.

효율적인 검색 알고리즘

벡터 검색 시스템에서 다단계 검색이란 무엇인가요?

다단계 검색 또는 검색 프레임워크(간단히 '검색 파이프라인'이라고도 함)는 쿼리를 처리하는 단계의 순서를 정의하는 오케스트레이션된 워크플로우입니다. 일반적으로 여기에 포함되는 단계로는 쿼리 분석, 하나 이상의 색인에서의 초기 검색(예: 하이브리드 접근 방식을 위해 어휘 검색과 벡터 검색을 결합), 결과 필터링, 사용자에게 결과를 반환하기 전 최종 순위 재지정 단계 등이 있습니다.


검색 파이프라인을 구축하는 데 검색 프레임워크를 사용하면 어떤 이점이 있나요?

가장 큰 장점은 모듈화와 유연성입니다. 이에 따라 개발자들은 전체 시스템을 처음부터 구축할 필요 없이, 다양한 검색 및 순위 전략(예: 하이브리드 검색)을 손쉽게 결합하고, 특정 요구에 맞춘 복잡한 다단계 검색 파이프라인을 구성할 수 있습니다.

시맨틱 순위 재지정이란 무엇인가요?

시맨틱 순위 재지정은 검색 결과의 관련성을 개선하는 2단계 프로세스입니다. 초기의 빠른 검색 단계에서 광범위한 후보 문서 세트를 가져온 후, 보다 계산 집약적이지만 더 정확한 모델을 사용해 이 작은 세트의 순위를 다시 지정하여 최종적으로 더 정밀한 순위를 산출합니다.

'검색-순위 재지정' 다단계 프로세스는 어떻게 작동하나요?

'검색-순위 재지정' 파이프라인은 두 가지 단계로 작동합니다.

  1. 검색: 효율적이고 확장 가능한 검색 방법(예: ANN 벡터 검색 또는 어휘 BM25 검색)을 사용해 전체 색인에서 초기 후보 문서 세트를 가져옵니다.
  2. 순위 재지정: 이 작은 후보 집합은 더 강력한 모델(예: 교차 인코더)로 전달됩니다. 이 모델은 쿼리와 각 문서 간의 의미론적 관계를 심층 분석하여 최종 관련성을 개선하기 위해 순서를 재지정합니다.

순위 재지정 시 바이 인코더와 크로스 인코더 아키텍처의 차이는 무엇인가요?

  • 바이 인코더는 쿼리와 문서에 대해 독립적으로 별도의 임베딩을 생성합니다. 문서 임베딩을 미리 계산하고 색인할 수 있기 때문에 이 아키텍처는 매우 빠르며 초기 검색 단계에 사용됩니다.
  • 크로스 인코더는 쿼리와 문서를 하나의 입력으로 처리합니다. 이를 통해 훨씬 더 심층적인 컨텍스트 상호 작용을 포착할 수 있어, 정확도는 높지만 속도가 훨씬 느립니다. 계산 비용으로 인해 작은 후보 결과 세트에 대한 순위 재지정 단계에만 적합합니다.

저장 공간 및 최적화

벡터는 일반적으로 벡터 데이터베이스에 어떻게 저장되며, 어떤 저장 공간 문제가 발생하나요?

벡터는 일반적으로 32비트 부동 소수점 숫자(float32)의 배열로 저장됩니다. 주요 과제는 막대한 저장 공간으로, 단일 384차원 벡터가 약 1.5KB를 차지합니다. 따라서 1억 개의 문서 색인은 벡터 필드를 하나 추가하는 것만으로 크기가 7배 증가할 수 있습니다. HNSW와 같은 벡터 검색 알고리즘은 성능을 위해 인덱스를 RAM에 로드해야 하므로, 메모리 비용과 확장성에 관련된 상당한 과제가 발생합니다.

벡터 양자화란 무엇인가요?

벡터 양자화는 손실 압축 기법으로, 더 적은 비트로 파라미터를 표현하여 모델의 메모리와 계산 요구 사항을 줄입니다. 이는 수십억 개의 매개변수를 가질 수 있는 LLM에 특히 유용합니다. 고정밀 float32 값을 낮은 정밀도의 정수(int8 또는 int4)로 변환하면, 양자화는 모델 크기를 크게 줄이고 정확도에 거의 영향을 미치지 않으면서 추론 속도를 높일 수 있습니다.

스칼라 양자화(SQ)란 무엇인가요?

스칼라 양자화는 float32 값의 연속 범위를 더 낮은 정밀도의 정수 값(예: int8)으로 이루어진 불연속 세트에 매핑하여 벡터를 압축합니다. 이를 통해 관련성에 중요한 벡터의 크기 정보를 상당량 보존하면서 저장 공간을 최대 4배까지 줄일 수 있습니다.

이진 양자화(BQ)란 무엇인가요?

이진 양자화는 float32 벡터의 각 구성 요소를 이진 표현(예: 1비트)으로 변환하는 보다 과감한 압축 기법입니다. 이를 통해 최대 32배까지 압축할 수 있어 메모리를 최대한 절약하고 정수 기반 연산을 사용해 더 빠른 계산이 가능하지만, 정밀도가 일부 손실될 수 있습니다.

통합된 벡터 저장 공간(데이터베이스)과 검색 플랫폼이 가진 이점은 무엇인가요?

벡터 저장 공간 및 검색 기능을 전통적인 데이터베이스 기능(예: 어휘 검색 및 필터링)과 결합한 통합 플랫폼은 상당한 이점을 제공합니다. 별도의 시스템 간에 데이터를 동기화할 필요가 없어 아키텍처가 간소화됩니다. 가장 중요한 점은 어휘 검색, 벡터 검색, 메타데이터 필터링을 단일 통합 쿼리로 수행할 수 있는 강력한 하이브리드 검색을 지원하여, 보다 관련성 높은 결과를 제공하고 개발자 경험을 개선한다는 것입니다.