벡터 데이터베이스란 무엇인가?
벡터 데이터베이스 정의
벡터 데이터베이스는 정보를 벡터로 저장하는 데이터베이스입니다. 벡터는 벡터 임베딩이라고도 알려진 데이터 객체의 수치 표현입니다. 이러한 벡터 임베딩의 강력한 기능을 활용하여 이미지, 텍스트 또는 센서 데이터와 같은 비정형 데이터와 반정형 데이터로 구성된 대규모 데이터 세트를 색인하고 검색합니다. 벡터 데이터베이스는 벡터 임베딩을 관리하기 위해 구축되었으므로 비정형 및 반정형 데이터 관리를 위한 완벽한 솔루션을 제공합니다.
벡터 데이터베이스는 벡터 검색 라이브러리 또는 벡터 인덱스와 다릅니다. 이는 메타데이터 저장 및 필터링을 가능하게 하고, 확장 가능하며, 동적 데이터 변경을 허용하고, 백업을 수행하고, 보안 기능을 제공하는 데이터 관리 솔루션입니다.
벡터 데이터베이스는 고차원 벡터를 통해 데이터를 구성합니다. 고차원 벡터에는 수백 개의 차원이 포함되어 있으며 각 차원은 그것이 나타내는 데이터 객체의 특정 기능이나 속성에 해당합니다.
벡터 데이터베이스는 어떻게 작동하는가?
벡터 데이터베이스는 알고리즘을 사용하여 벡터 임베딩을 색인하고 쿼리하는 방식으로 작동합니다. 알고리즘을 사용하면 해싱, 양자화 또는 그래프 기반 검색을 통해 근사 최근접 유사 항목(approximate nearest neighbor, ANN) 검색이 가능합니다.
정보를 검색하기 위해, ANN 검색은 쿼리의 최근접 유사 벡터 항목을 찾습니다. kNN 검색(최근접 유사 항목 또는 실제 k-최근접 유사 항목 알고리즘이라고도 함)보다 계산 집약도가 낮기 때문에, 근사 최근접 유사 항목 검색도 덜 정확합니다. 그러나 고차원 벡터의 대규모 데이터 세트에 대해서는 효율적이고 규모에 맞게 작동합니다.
벡터 데이터베이스 파이프라인은 다음과 같습니다.
색인: 해싱, 양자화 또는 그래프 기반 기술을 사용하는 벡터 데이터베이스는 벡터를 주어진 데이터 구조에 매핑하여 벡터를 색인합니다. 이를 통해 더 빠른 검색이 가능합니다.
- 해싱: 지역성 기반 해싱(Locality-Sensitive Hashing, LSH) 알고리즘과 같은 해싱 알고리즘은 빠른 결과를 제공하고 대략적인 결과를 생성하므로 근사 최근접 유사 항목 검색에 가장 적합합니다. LSH는 스도쿠 퍼즐과 같은 해시 테이블을 사용하여 최근접 유사 항목을 매핑합니다. 쿼리는 테이블로 해시된 다음 동일한 테이블의 벡터 집합과 비교되어 유사성을 결정합니다.
- 양자화: 곱 양자화(Product Quantization, PQ)와 같은 양자화 기술은 벡터를 더 작은 부분으로 나누고 해당 부분을 코드로 표현한 다음 해당 부분을 다시 합칩니다. 결과는 벡터와 해당 구성 요소의 코드 표현입니다. 이러한 코드의 앙상블을 코드북이라고 합니다. 쿼리가 수행되면 양자화를 사용하는 벡터 데이터베이스는 쿼리를 코드로 나눈 다음 코드북과 일치시켜 가장 유사한 코드를 찾아 결과를 생성합니다.
- 그래프 기반: 계층적으로 탐색 가능한 작은 세계(Hierarchical Navigable Small World, HNSW) 알고리즘과 같은 그래프 알고리즘은 노드를 사용하여 벡터를 나타냅니다. 노드를 클러스터링하고 유사한 노드 사이에 선이나 가장자리를 그려 계층적 그래프를 만듭니다. 쿼리가 시작되면 알고리즘은 그래프 계층 구조를 탐색하여 쿼리 벡터와 가장 유사한 벡터가 포함된 노드를 찾습니다.
벡터 데이터베이스는 데이터 객체의 메타데이터도 색인합니다. 이러한 이유로 벡터 데이터베이스에는 벡터 인덱스와 메타데이터 인덱스라는 두 개의 인덱스가 포함됩니다.
쿼리: 벡터 데이터베이스는 쿼리를 받으면 인덱스 벡터를 쿼리 벡터와 비교하여 최근접 벡터 항목을 결정합니다. 최근접 항목을 설정하기 위해 벡터 데이터베이스는 유사성 측정이라는 수학적 방법을 사용합니다. 다음과 같이 다양한 유형의 유사성 측정이 존재합니다.
- 코사인 유사성(Cosine similarity)은 -1에서 1 범위의 유사성을 설정합니다. 벡터 공간에서 두 벡터 사이의 각도의 코사인을 측정하여 정반대(-1로 표시), 직교(0으로 표시) 또는 동일한(1로 표시) 벡터를 결정합니다.
- 유클리드 거리(Euclidean distance)는 벡터 사이의 직선 거리를 측정하여 0부터 무한대까지의 범위에서 유사성을 결정합니다. 동일한 벡터는 0으로 표시되고, 값이 클수록 벡터 간의 차이가 커집니다.
- 점 곱(Dot product) 유사성 측정은 마이너스 무한대에서 무한대까지의 범위에서 벡터 유사성을 결정합니다. 점 곱은 두 벡터의 크기와 그 사이의 각도의 코사인의 곱을 측정하여 서로 떨어진 벡터에는 음의 값을, 직교하는 벡터에 0을, 같은 방향을 가리키는 벡터에 양의 값을 할당합니다.
후처리: 벡터 데이터베이스 파이프라인의 마지막 단계는 때때로 후처리 또는 사후 필터링이며, 이 과정에서 벡터 데이터베이스는 다른 유사성 척도를 사용하여 최근접 항목의 순위를 다시 매깁니다. 이 단계에서 데이터베이스는 메타데이터를 기반으로 검색에서 식별된 쿼리의 최근접 항목을 필터링합니다.
일부 벡터 데이터베이스는 벡터 검색을 실행하기 전에 필터를 적용할 수 있습니다. 이런 경우, 이를 전처리(preprocessing) 또는 프리필터링(pre-filtering)이라고 합니다.
벡터 데이터베이스의 핵심 구성 요소
벡터 데이터베이스에는 다음과 같은 핵심 구성 요소가 있을 수 있습니다.
- 성능 및 내결함성: 샤딩과 복제의 프로세스는 벡터 데이터베이스의 성능과 내결함성을 보장합니다. 샤딩에는 여러 노드에 걸쳐 데이터를 분할하는 작업이 포함되는 반면, 복제에는 여러 노드에 걸쳐 여러 데이터 복사본을 만드는 작업이 포함됩니다. 노드에 장애가 발생하는 경우 이를 통해 내결함성과 지속적인 성능이 가능해집니다.
- 모니터링 기능: 성능과 내결함성을 보장하려면, 벡터 데이터베이스는 리소스 사용량, 쿼리 성능 및 전반적인 시스템 상태를 모니터링해야 합니다.
- 액세스 제어 기능: 벡터 데이터베이스에는 데이터 보안 관리도 필요합니다. 액세스 제어 규정은 규정 준수, 책임성 및 데이터베이스 사용 감사 기능을 보장합니다. 이는 또한 데이터가 보호된다는 것을 의미합니다. 권한이 있는 사람만이 접근할 수 있으며, 사용자 활동에 대한 기록이 보관됩니다.
- 확장성 및 조정 가능성: 우수한 액세스 제어 기능은 벡터 데이터베이스의 확장성과 조정 가능성에 영향을 미칩니다. 저장되는 데이터의 양이 증가함에 따라 수평 확장 기능이 필수가 됩니다. 다양한 삽입 및 쿼리 속도와 기본 하드웨어의 차이는 애플리케이션 요구 사항에 영향을 미칩니다.
- 다중 사용자 및 데이터 격리: 확장성과 액세스 제어 기능을 갖춘 벡터 데이터베이스는 다중 사용자 또는 멀티 테넌시를 수용해야 합니다. 이와 함께 벡터 데이터베이스는 달리 요구되지 않는 한 모든 사용자 활동(예: 삽입, 삭제 또는 쿼리)이 다른 사용자에게 비공개로 유지되도록 데이터 격리를 활성화해야 합니다.
- 백업: 벡터 데이터베이스는 정기적인 데이터 백업을 생성합니다. 이는 시스템 장애 시 벡터 데이터베이스의 핵심 구성 요소입니다. 데이터가 손실되거나 데이터가 손상된 경우 백업을 통해 데이터베이스를 이전 상태로 복원할 수 있습니다. 이를 통해 가동 중단 시간을 최소화할 수 있습니다.
- API 및 SDK: 벡터 데이터베이스는 API를 사용하여 사용자 친화적인 인터페이스를 구현합니다. API는 애플리케이션이 요청과 응답을 통해 서로 "대화"할 수 있도록 하는 애플리케이션 프로그래밍 인터페이스 또는 소프트웨어 유형입니다. API 레이어는 벡터 검색 환경을 단순화합니다. SDK 또는 소프트웨어 개발 키트는 종종 API를 래핑합니다. 데이터베이스가 통신하고 관리하는 데 사용하는 프로그래밍 언어입니다. SDK는 특정 사용 사례(시맨틱 검색, 추천 시스템 등)를 개발할 때 기본 구조에 대해 걱정할 필요가 없기 때문에 개발자 친화적인 벡터 데이터베이스 사용에 기여합니다.
벡터 데이터베이스와 기존 데이터베이스의 차이점은 무엇인가?
기존 데이터베이스는 정보를 표 형식으로 저장하고 데이터 요소에 값을 할당하여 데이터를 색인합니다. 쿼리를 수행하면, 기존 데이터베이스는 쿼리와 정확히 일치하는 결과를 반환합니다.
벡터 데이터베이스는 임베딩 형식으로 벡터를 저장하고 (정확한 일치가 아닌) 유사성 메트릭을 기반으로 쿼리 결과를 반환하는 벡터 검색을 활성화합니다. 벡터 데이터베이스는 기존 데이터베이스가 할 수 없는 작업을 "강화"하며, 의도적으로 벡터 임베딩과 함께 작동하도록 설계되었습니다.
또한 벡터 데이터베이스는 고차원 검색 및 맞춤형 색인이 가능하고 확장성, 유연성 및 효율성이 뛰어나 유사성 검색, 인공 지능 및 머신 러닝 애플리케이션과 같은 특정 애플리케이션에서 기존 데이터베이스보다 더 적합합니다.
벡터 데이터베이스의 애플리케이션
벡터 데이터베이스는 AI, 머신 러닝(ML), 자연어 처리(NLP), 이미지 인식 애플리케이션 등에 사용됩니다.
- AI/ML 애플리케이션: 벡터 데이터베이스는 의미 정보 검색 및 장기 기억을 통해 AI 기능을 향상시킬 수 있습니다.
- NLP 애플리케이션: 벡터 데이터베이스의 핵심 구성 요소인 벡터 유사성 검색은 자연어 처리 애플리케이션에 유용합니다. 벡터 데이터베이스는 컴퓨터가 인간 또는 자연어를 "이해"할 수 있도록 텍스트 임베딩을 처리할 수 있습니다.
- 이미지 인식 및 검색 애플리케이션: 벡터 데이터베이스는 이미지를 이미지 임베딩으로 변환합니다. 유사성 검색을 통해 유사한 이미지를 검색하거나 일치하는 이미지를 식별할 수 있습니다.
벡터 데이터베이스는 이상 징후 탐지 및 얼굴 탐지 애플리케이션에도 사용할 수 있습니다.
벡터 데이터베이스의 미래 동향
벡터 데이터베이스의 미래는 AI와 ML의 개발뿐만 아니라 정형 및 비정형 데이터를 위해 더 강력한 임베딩을 생성하기 위한 딥 러닝의 사용과 관련된 연구와 복잡하게 연결되어 있습니다1.
더 나은 임베딩을 생성하는 능력이 향상됨에 따라, 이러한 임베딩을 더 잘 처리하고 관리하는 벡터 데이터베이스의 능력에는 새로운 기술과 알고리즘이 필요합니다. 실제로 이러한 새로운 방법이 지속적으로 개발되고 있습니다.
추가적인 연구는 하이브리드 데이터베이스 개발에 전념하고 있습니다. 이는 효율적이고 확장 가능한 데이터베이스에 대한 증가하는 요구에 대한 해결책으로 기존 관계형 데이터베이스와 벡터 데이터베이스의 기능을 결합하기 위한 것입니다.
Elasticsearch를 위한 벡터 데이터베이스
Elasticsearch에는 벡터 검색을 위한 벡터 데이터베이스가 포함되어 있습니다. Elastic을 사용하면 개발자는 Elasticsearch Relevance Engine(ESRE)을 사용하여 자체 벡터 검색 엔진을 구축할 수 있습니다.
Elasticsearch 도구를 사용하면 비정형 데이터와 정형 데이터를 검색하고, 필터와 패싯을 적용하고, 텍스트와 벡터 데이터에 하이브리드 검색을 적용하고, 온프레미스, 클라우드 또는 하이브리드 환경에서 실행하면서 문서 및 필드 수준 보안을 활용할 수 있는 벡터 검색 엔진을 구축할 수 있습니다.
각주
1 Gu, Huaping. "Unleashing the Power of Vectors: Embeddings and Vector Databases(벡터의 강력한 활용: 임베딩 및 벡터 데이터베이스) - Linkedin." LinkedIn, 2023년 4월 2일, www.linkedin.com/pulse/unleashing-power-vectors-embeddings-vector-databases-huaping-gu