벡터 데이터베이스 (Vector Database)

1. 벡터 데이터베이스 (Vector Database)의 개념, 필요성

개념필요성
대량의 고차원 데이터 저장 및 조회 위해 컨텐츠 벡터 임베딩 및 쿼리 벡터 유사도 비교 기반 신속하게 인덱싱하는 데이터베이스– 고차원 데이터 저장 및 조회 수요 증가
– 데이터 내용 유사성에 따른 맥락 이해
– AI 서비스의 신속한 연산 처리 요구
– 대규모 언어 모델에 장기 기억 메모리 필요
  • AI 어플리케이션은 Vector Embedding에 의존하고 다수 Attribute/Feature로 관리가 어렵기 때문에 임베딩 데이터 최적화 및 저장/조회 위해 특화된 벡터 데이터베이스 필요
  • 벡터DB 기반 AI 서비스에 시맨틱 정보 검색, 장기 기억 메모리 등 고급 기능 구현 가능

 

2. 벡터 데이터베이스 동작 과정 및 RAG 동작 절차

(1) 벡터 데이터베이스 동작 과정

#주요 과정세부 동작
Indexing– HNSW, LSH, IVF 등 알고리즘 사용하여 벡터 Indexing
– 빠른 검색이 가능한 데이터 구조에 벡터 Mapping
Querying– 해당 index의 similarity metric을 통해 Query Vector와 Indexed Vector 간 유사도 계산
Post Processing– 다른 유사도 메트릭 기반 순위 재구성 등 검색 결과 후처리

(2) 벡터 데이터베이스 기반 검색 증강 생성(RAG) 동작 절차

  • 문서 등 수집 데이터에 대해 임베딩 모델을 활용하여 문서 임베딩을 벡터DB에 저장 후 사용자 질의 발생 시 연관된 정보를 시맨틱 검색하여 획득된 정보를 바탕으로 질의 컨텍스트 개선 및 최적화

3. 벡터 데이터베이스의 기술 요소

구분기술 요소역할
임베딩워드 임베딩– 벡터 기반 의미적 유사 데이터를 근접 배치
TF-IDF, CBOW, Skip-gram, Word2Vec
사용자 질의 임베딩– 문서 임베딩과 같은 임베딩 모델 사용
– 단어 단위 Fast Text, 문장 단위 ELMo, BERT
인덱싱KNN 기반 인덱싱– 가까운 거리를 Class화하는 확률 밀도 추정
– 최소 거리 후보집합 생성, 클래스 맵핑
SPTAG 기반 인덱싱– 입력 쿼리를 벡터로 변환하여 신속한 검색
– 그래프 분할 기법, 빠른 이웃 검색
유사도 비교코사인 유사도 비교– 두 벡터 사이의 각도 기반 유사도 측정
– 각도가 작을수록 유사도 증가
유클리디안 거리 비교– 두 벡터 사이의 직선 거리 기반 유사도 측정
– 직선 거리가 가까울수록 유사도 증가
LLM
프롬프트
프롬프트 엔지니어링– 생성형 AI 입력 프롬프트 설계 및 제작
– 퓨샷 러닝, 메트릭 러닝, GNN
결과 추출 및 시각화– 결과 추출 데이터의 시각화 도구 연계
– Grafana, Tableau, Kibana, Metabase 등
프레임워크검색 증강 생성(RAG)– 외부의 신뢰 가능한 지식 베이스 참조, 최적화
– 검색기, 생성기, 파인튜닝, 추론, 데이터 증강
랭체인(LangChain)LLM 서비스의 언어 모델, 콜백 등 기능 연결
– Callback, Data Connection, Chain, Model I/O
  • 기존 스칼라 기반 데이터베이스 및 Standalone 벡터 인덱스에 비해 고차원 데이터 접근성, 확장성 등 장점 보유하지만 대용량 스토리지가 요구되고 쿼리 및 데이터 최적화가 어려움

 

4. 벡터 데이터베이스의 한계점 및 대응 방안

한계점대응 방안
– 검색 정확도와 속도 간 Trade-off 관계
– 임베딩 관리용 대용량 스토리지 요구
– 전문 쿼리 및 데이터 최적화 어려움
KNN 기반 유사도 작업, SPTAG 활용 검색성능 향상
– 효율적인 임베딩 모델로 벡터 임베딩 개선, 최적화
GPGPU, 뉴로모픽칩 등 AI 전용 컴퓨팅 반도체 활용
  • 향후 벡터 데이터베이스 기반 대규모 언어 모델을 통해 장기 기억 메모리 및 데이터 내용 유사성에 따른 고품질 생성형 AI 서비스 가 제공될 것으로 예상

 
[참고]

  • Pinecone, What is a Vector Database
  • Smilegate, 벡터 임베딩을 저장하고 검색하는 가장 효율적인 방법

콘텐츠 사용 시 출처 표기 부탁 드리고, 궁금한 점이나 의견은 댓글 남겨주세요^^