Vector DataBase

참고 자료

위의 포스팅을 참고하여 작성하였다.


벡터 임베딩이란?

벡터 임베딩은 텍스트, 이미지, 영상, 오디오 등 다양한 유형의 데이터를 컴퓨터가 이해하고 처리할 수 있도록 수치 형태로 변환하는 방법이다.

이 변환 과정은 사람이 직접 정의하는 것이 아니라,

데이터를 AI 모델에 입력하여 모델 스스로가 해당 데이터를 의미 있는 벡터로 변환한다.

벡터 임베딩을 통해서 데이터는 고차원 공간에서 저차원 벡터로 변환된다.

벡터 임베딩은 의미상 관련된 항목을 벡터 공간에서 서로 가깝게 매핑한다.

=> 이 과정에서 차원은 축소됨과 동시에 & 데이터의 중요한 정보와 패턴은 보존된다.


벡터 데이터베이스의 등장

Oracle, MySQL같은 관계형 데이터 베이스는 현재까지도 많이 쓰이고 있다.

테이블 형태와 같은 구조화된 데이터를 사용하는 머신러닝을 할 때는 위와 같은 데이터 베이스가 용이하다.

관계형 데이터베이스는 쿼리와 정확히 일치하는 행을 찾아 반환한다.

그러나, 비정형 데이터 또는 다차원 벡터 데이터를 저장하고 관리하긴 어렵다.

이러한 한계로 벡터 데이터베이스가 등장했다.

유사성 검색 데이터베이스라고도 불리는 벡터 데이터베이스는 방대한 양의 다차원 데이터를 벡터 형태로 저장하고 검색할 수 있도록 설계되었다.


벡터 데이터베이스의 작동 과정

1. Indexing

  • PQ, LSH, HNSW와 같은 알고리즘을 사용하여 벡터를 인덱싱한다.
  • 이 단계에서는 더 빠른 검색을 가능하게 하는 데이터 구조에 벡터를 매핑합니다

2. Query

  • 유사도 메트릭(코사인 유사도, 유클리디안 거리, 내적 등)을 적용하여 가장 가까운 벡터를 찾는다.
    • 코사인 유사도 : 두 벡터의 각도를 측정하여 유사도 판단 (-1 ~ 1 사이의 값이며, 값이 1에 가까울수록 두 유사함. -1에 가까울수록 반대 방향에 있음)
    • 유클리디안 거리 : 두 벡터 간의 직선 거리를 측정 (거리가 짧을수록 유사성 높음)
    • 내적 : 두 벡터 간의 곱셈 연산을 통해 유사성 측정 (두 벡터가 얼마나 유사한 방향을 가지고 있는지 측정. 두 벡터가 유사한 방향이면 양수이고, 반대 방향이면 음수이며, 직교하면 0)

3. Post Processing

  • 데이터셋에서 최종 최근접 이웃을 검색하고 이를 후처리하여 최종 결과를 반환한다.
  • 일부 데이터베이스는 벡터 검색을 하기 전에 필터를 적용할 수 있다.
    • 사전 필터링
      • 벡터를 검색하기 전에 메타데이터 필터링을 수행한다.
      • 이 방식은 검색량을 줄이는 데 도움이 될 수 있다.
    • 사후 필터링
      • 벡터를 검색한 후, 메타데이터 필터링이 수행된다.
      • 이 방식은 연관된 모든 결과를 추출하는데 도움은 되지만, 검색이 완료된 후 관련 없는 결과를 필터링해야해서 추가 오버헤드가 발생하고 쿼리 프로세스가 느려질 수 있다.

벡터 데이터베이스 종류

항목 Weaviate Elastic Milvus Qdrant Pinecone Chroma
운영 형태 직접 설치 가능, 서비스형 제공, 오픈소스 직접 설치 또는 서비스형 직접 설치 또는 오픈소스 직접 설치, 서비스형, 오픈소스 클라우드 서비스형 메모리 기반, 오픈소스
벡터 검색 전용 설계 여부 아니오 아니오
DB 롤백 기능(실수 시 되돌리기) 가능 불가능 가능 가능 불가능 불가능
데이터 일관성 보장 방식 상황에 맞게 조절 가능 느슨한 보장(즉시 반영 X) 상황에 맞게 조절 가능 느슨한 방식 + 조절 가능 느슨한 보장 해당 없음
실시간(스트림) + 묶음(배치) 처리 지원 둘 다 가능 둘 다 가능 둘 다 가능 둘 다 가능 둘 다 불가능 둘 다 불가능
바이너리 벡터 지원 여부(압축된 벡터) 지원 지원 지원 지원 미지원 미지원
지원 언어(SDK) Python, Java, Go Python, Java, Go, C++, Node, Rust, Ruby, .NET, PHP Python, Java, Go, C++, Node Python, Go, Rust Python, Node Python, Node