Post

Vector DB - 개요

Vector DB

1. 개요

원래는 No-SQL에 포함할까 했지만 분류에 대해 의견이 분분하여 그냥 별도의 항목으로 분리했다.
현재 LLM에 대한 관심이 뜨거운 가운데 이 Vector DB도 굉장히 유명해졌는데 LLM에서 취급하는 데이터가 바로 이 Vector Data이고, 이를 이용하여 학습되지 않은 문제에 대해서도 어느정도 답변을 내놓을 수 있는 Rag(Retrieval-Augmented Generation)라는 기술이 유행하고 있기 때문이다.

Vector DB란 말 그대로 Vector 데이터(고정된 길이의 숫자 목록)를 저장되어있는 DB라고 생각하면 된다. 특정 데이터를 입력하면 이를 Vector화 해서 데이터를 저장하고, 이를 쿼리를 통해 찾아서 반환할 수 있게 해준다.

이러한 Vector DB의 예시로는 Milvus, Chroma, Qdrant, Pinecone 등이 있으며, 기존 RDBMS나, No-SQL을 지원하던 Database도 Vector 데이터에 대한 저장 및 검색을 구현하기 위해 많은 개발이 이어지고 있다.

이에 대해 다룰 내용은 아래와 같다.

2. Vector DB에 데이터를 저장하는 방식

말 그대로 데이터를 어떤식으로 저장하는가에 대한 내용이다.
만약에 어떤 배열에 대해서 이진 탐색을 한다고 하자. 이진 탐색에 앞서 선행되어야할 조건은 해당 배열이 정렬되어있어야한다는 점이다.
무언가 빠르게 찾고 싶다면 저장 방식 자체를 달리할 필요성이 있는것이다. 물론, VectorDB에서 다루는 것은 임베딩 벡터에 대한 부분이니 어떤 방식으로 임베딩 벡터로 바꾸지는 역시 다룰 예정이다.

3. Vector DB에서 값을 가져오는 방식

별도의 포스팅을 통해 세부적으로 다룰 생각이지만 대략적으로 말하자면 크게 두 가지로 나눈다.

말 그대로 모든 Documents에 대해서 거리 계산을 하는 방식으로 정확한 값을 알 수 있지만 시간이 너무 오래걸려서 현재는 쓰지 않는 방식이다.

2) 유사도 기반 검색

완전 정확하지는 않지만 근사적으로 비슷한 것들을 빠른 시간내에 찾는 방법을 말한다.
Milvus나 다른 VectorDB들도 ANN(Approximate Nearest Neighbor, 유사 근접 이웃)을 찾는 방식을 통해 결과를 반환한다. 이에 대한 내용은 다음 포스팅을 통해 세부적으로 다루겠다.

※ 추가 업데이트 및 검증 예정이고, 아직 완벽하지 않으니 참고만 바란다.

참고자료

This post is licensed under CC BY 4.0 by the author.