[DB] Vector Database

박상민·2024년 3월 19일
0

개념 정리!

목록 보기
9/18

이번엔 진행하는 프로젝트 중 AI 기술을 담당하시는 분이 Vector DB를 사용해보는건 어떠냐고 권유하셨다.

프로젝트에 적용할 기술이기 때문에 Vector DB가 무엇인지, 사용했을 때 이점은 무엇인지, 어떤 경우에 사용하는 것이 좋을지 등에 대해서 공부해야겠다고 생각해서 정리를 해보려고 한다.

⭐️ 들어가기 전에

우선 Vector DB에 대해서 공부하기 전에 벡터와 임베딩에 대해서 알아야 한다.

Vector
벡터는 다음과 같은 숫자의 리스트다.

[0.3512, 0.4837, 0.1996, ...]

이게 왜 벡터일까?
벡터라고 하면 힘이나 속도같은 물리량을 보통 떠올리기 마련이지만, 사실 벡터는 좀 더 포괄적인 의미로 사용된다.

아래는 위키피디아에서 가져온 벡터의 정의이다.

In mathematics and physics, 
vector is a term that refers colloquially to some quantities that cannot be expressed by a single number (a scalar), 
or to elements of some vector spaces.

위키피디아에 따르면 단 하나의 숫자로 나타낼 수 없는 양을 벡터라고 한다.

기계학습 분야에서는 모델 학습을 위해서 사용하는 데이터나 가중치 혹은 모델의 결과값으로 나타나는 값들을 모두 벡터의 형태로 취급한다.

Embedding
임베딩은 정의에 따르면 "고차원의 데이터를 저차원으로 매핑하면서, 그 의미를 보존하는 것"이다.

차원이라는 건 뭘까? 차원이라는 개념도 벡터와 연관지어서 생각할 수 있다.

세 개의 값을 가지는 벡터는 3차원 벡터, N개의 값을 가지는 벡터는 N차원 벡터. 이런 식이다.

그러므로 "고차원의 데이터를 저차원으로 매핑한다"는 것은 높은 차원의 벡터를(가령 10000차원) 낮은 차원의 벡터로(가령 10차원) 변환한다는 뜻일 것이다.

의미를 보존한다는 건 무슨 뜻일까?
간단한 예시를 들어보자.
두 개의 64x64 사이즈의 고양이 이미지가 있다. 이미지의 크기는 64x64이므로 이 두 이미지는 흑백이라고 가정했을 때 4096차원의 벡터로 표현될 수 있을거다.

임베딩을 통해서 이 고차원의 벡터를 저차원의 벡터로 축소시킬 수 있고, 그 과정을 잘 조율한다면, 두 개체의 임베딩이 비슷할 때 그 개체가 근본적으로 비슷한 경향을 보이도록 할 수 있다.

즉, 차원은 축소되었지만 그 의미는 보존되는 것이다.


왜 굳이 임베딩을 해야할까?
이건 비교적 쉽게 답할 수 있다. 우선, 데이터가 너무 커서 저장할 때 효율적이지 않고 의미적인 '유사도'를 측정하기 어렵다는 문제가 있다. 두 번째로 숫자가 인공지능 모델이 아주 잘 다룰 수 있는 표현 형식이라 그렇다.

어떻게 저 많은 픽셀을 몇 개의 숫자로 표현하면서 의미가 보존될 수 있을까?
사실 저 많은 픽셀 중에 "고양이"라는 의미를 만드는 픽셀의 개수나 조합은 한정적이고, 전체 가능성 중 극히 일부분일 것이다. 이렇게 고차원의 데이터에서 "의미"를 가지는 정보는 극히 일부분이고, 이러한 의미를 잡아내는 어떠한 부분공간(Latent Manifold)이 존재한다는 가설을 Manifold 가설이라고 한다.
임베딩을 잘 사용하면 고차원의 데이터를 저차원으로 변환할 때 Latent Manifold를 따라 놓이도록 만들 수 있을 것이다.
임베딩을 통해서 글, 이미지나 동영상같은 비정형 데이터를 숫자로 표현할 수 있게 되었다.

이 숫자들간의 유사도를 비교하면, 임베딩하기 이전의 원본이 서로 비슷한 것들을 찾아낼 수 있을 것이다. 이렇게 입력 벡터로부터 가장 유사한 벡터를 찾아내는 접근을 Nearest Neighbor 라고 한다.

유사한 벡터를 찾아낼 때, 한 벡터가 다른 벡터와 얼마나 가까운지를 나타내는 metric은 다양한데, 그 중에 몇 개를 소개하면 다음과 같은 것들이 있다.

  • 코사인 유사도: 두 벡터 사이의 각도의 코사인을 측정해서 -1에서 1까지의 범위로 나타냄
  • 맨해튼 거리: 두 벡터의 해당 좌표 사이의 절대 차이의 합을 계산합니다. (L1이라고도 함)
  • 유클리드 거리: 유클리드 공간에서 두 벡터 사이의 직선 거리. (L2라고도 함)
    어렵게 써놓긴 했지만 모두 중고등학교 시절 수학 시간에 배웠던 것들이다. 물론 이것보다 더 복잡한 것들도 있지만.. 기본적인 골자는 "두 벡터(점) 사이의 거리"를 계산하는 것이다. (벡터는 여러 숫자를 가지는 양이고, 각각의 숫자는 좌표계의 한 축에 해당하는 값으로 볼 수 있다.)

⭐️ Vector Database

정보는 다양한 형태로 제공이 된다.
텍스트 문서, 리치 미디어, 오디오와 같이 비정형 정보도 있고 애플리케이션 로그, 테이블, 그래프와 같이 정형화된 정보도 있다. 임베딩은 모든 유형의 데이터를 자산의 의미와 컨텍스트를 캡처하는 벡터로 인코딩한다.
이를 통해 인접 데이터 포인트를 검색하여 유사한 자산을 찾을 수 있다.

벡터 데이터베이스는 벡터를 고차원 포인트로 저장하고 검색하는 기능을 제공한다. N차원 공간에서 가장 가까운 이웃을 효율적이고 빠르게 조회할 수 있는 추가적인 기능을 제공한다.

벡터 데이터베이스는 데이터 관리, 내결함성, 인증 및 액세스 제어, 쿼리 엔진과 같은 추가 기능을 제공한다.

결과적으로 "벡터" 데이터베이스는 일반적인 DB와 다르게 이런 벡터들을 저장하고 있다는 걸 알 수 있다.

📌 사용하는 이유

벡터 데이터베이스는 일반적으로 시각적, 의미 체계, 다중 모달 검색과 같은 벡터 검색 사용 사례를 강화하는 데 사용된다.
최근에는 생성형 인공 지능(AI) 텍스트 모델과 결합하여 대화형 검색 경험을 제공하는 지능형 에이전트를 개발했다. 또한 생성형 AI 모델은 챗봇이 사실적이지는 않지만 믿을 수 있는 응답을 제공하는 것(AI 환각 현상)과 같이 사실 여부를 변별할 수 없도록 하는 것을 방지할 수 있다.

모델 내에서 k-NN(k-Nearest Neighbor) 인덱스는 벡터를 효율적으로 검색하고 코사인과 같은 거리 함수를 적용하여 유사성을 기준으로 결과의 순위를 매긴다.

📌 장단점

벡터 데이터베이스가 기존 DB에 비해 가지는 장점들은 어떤 것들이 있을까?

장점

  • 저장된 데이터들의 의미를 기반으로 하는 쿼리가 가능하다.
  • 언급한 것처럼 벡터들끼리의 유사도를 측정하고 이를 기반으로 쿼리를 하는 것이 중요한데, 기존에 널리 사용되는 DB들은 텍스트를 포함한 다양한 데이터를 저장하고, 스키마들간의 관계를 통한 모델링에 포커스를 맞추고 있기 때문에 이러한 요구 사항을 만족시키기 어렵다. 벡터 데이터베이스는 애초에 벡터를 저장하기 위해 설계된 DB이니 기존 DB에 비해 벡터 저장을 더 효율적으로 할 수 있을 것이다.

단점

  • 벡터 데이터베이스가 저장하는 건 오직 벡터 뿐이다. <- 이 부분 검증 필요
  • "정확히 'Vector'라는 키워드가 포함된 글을 검색하기"와 같은 작업은 오히려 어렵다.
    벡터 데이터베이스가 갑자기 떠오른 키워드이긴 하지만, 이런 특수성때문에 널리 사용되지는 않을 것 같고, AI 모델을 위한 메모리로 사용되거나.. 아니면 기존 검색 시스템에 보조적으로 사용될 수 있을 것 같다.

출처
https://velog.io/@tura/vector-databases
https://aws.amazon.com/ko/what-is/vector-databases/

profile
스프링 백엔드를 공부중인 대학생입니다!

0개의 댓글