[검색엔진] Vector Store

Vector Store의 역할

Vector Store는 검색과 정보 검색 시스템에서 중요한 역할을 합니다.

데이터를 벡터 형태로 변환하여 저장하고, 이를 기반으로 효율적으로 검색할 수 있게 한다.

 

 

Vector Store의 활용처

  • 유사도검색 (Similarity Search)
  • 추천시스템 (Recommendation Systems)
  • 자연어 처리(Natural Language Processing) 등등..

 

효율적인 Vector Embedding 저장과 검색

기존의 데이터베이스 시스템도 embedding을 저장하고 검색할 수 있지만, 모든 데이터의 embedding과 쿼리 embedding의 유사도를 계산해야 하므로 많은 연산이 필요하고, 결과를 가져오는 속도가 느리다.

 

반면, Vector DB는 자체적인 알고리즘을 사용하여 인덱싱하고, 다양한 ANN(Approximate Nearest Neighbor) 기반의 유사도 알고리즘을 조합하여 훨씬 빠르고 효과적으로 검색할 수 있다.

 

 

그럼... 어디다가 써먹을 수 있을까?

 

 

Vector Store와 LLM의 결합

대형 언어 모델(LLM)은 강력한 자연어 처리 능력을 제공하지만, 몇 가지 주요 문제점이 있긴 하다.

  1. 할루시네이션(Hallucination): 모델이 존재하지 않는 정보를 생성하거나 부정확한 정보를 제공 가능성.
  2. 장기 기억 문제(Long Term Memory): LLM은 대규모 데이터를 한 번에 기억하고 처리하는 데 한계.

 

해결하기 위한 방법은??

 

 

RAG(Retrieval Augmented Generation)

 

이 문제를 해결하기 위한 방법 중 하나가 RAG이다. RAG는 검색과 생성과정을 결합하여 보다 정확하고 신뢰할 수 있는 응답을 생성한다.

  1. 벡터 검색 : 사용자가 입력한 쿼리를 벡터로 변환, Vector Store를 사용하여 관련 데이터를 검색.
  2. 데이터 결합 : 검색된 데이터를 기반으로 LLM이 응답을 생성.

 

 

위 구조처럼 Vector Store를 LLM 모델의 지식 범위로 지정하여 답변을 하게 함으로써 검색된 정보를 기반으로 답변을 생성하게 한다. 이는 할루시네이션을 방지하고 오랜된 대화 기록까지 반영할 수 있도록 한다.

 

Vector Store의 구체적인 작동 방식

벡터 데이터베이스는 기존의 데이터베이스와는 다르게, 복잡한 정보를 처리하기 위해 고유한 검색 방법을 사용하는 꽤나 지능적이라고 할 수 있다. 

기존 데이터베이스가 정확히 일치하는 항목을 찾는 방식이라면, 벡터 데이터베이스는 특수한 유사성 측정 방법을 통해 가장 유사한 항목을 찾습니다. 이를 위해 근사 최인접 이웃(Approximate Nearest Neighbor, ANN) 검색 기술을 쓴다.

임베딩이란?

더보기

이러한 벡터 데이터베이스의 핵심은 "임베딩(embedding)"이라는 개념입니다. 임베딩은 텍스트, 이미지, 오디오와 같은 비정형 데이터를 숫자 기반의 벡터로 변환하는 과정입니다. 이 변환을 통해 머신러닝 모델이 데이터를 이해하고 처리할 수 있게 됩니다.

임베딩 과정은 특수 신경망이 담당하며, 예를 들어 단어 임베딩의 경우 비슷한 단어들이 벡터 공간에서 서로 가까워지도록 변환합니다. 이를 통해 알고리즘이 항목 간의 유사성과 연결성을 파악할 수 있습니다.

 

 

이 과정 표현하자면?

  1. 임베딩 모델 사용: 텍스트, 이미지, 오디오 등의 비정형 데이터를 처리하기 위해 임베딩 모델을 사용하여 벡터로 변환
  2. 벡터 데이터베이스 저장: 변환된 벡터를 벡터 데이터베이스에 저장
  3. 쿼리 수행: 애플리케이션이 쿼리를 보내면, 벡터 데이터베이스는 근사 최인접 이웃 검색을 통해 가장 유사한 벡터를 찾아 반환
  4. 결과 반환: 검색된 결과를 애플리케이션에 반환하여 최종 사용자에게 유용한 정보를 제공

 

종류는?

1. OpenSearch

  • 오픈 소스: 자유롭게 사용하고 확장할 수 있는 오픈 소스 프로젝트.
  • 강력한 검색 기능: 텍스트 검색, 로그 분석, 데이터 시각화 등을 지원.
  • 벡터 유사도 검색: 벡터 임베딩을 사용하여 유사도 기반 검색을 수행.
  • 확장성: 대규모 데이터와 고성능 검색을 위한 클러스터링 및 분산형 아키텍처 지원.
  • 플러그인 지원: 다양한 플러그인을 통해 기능을 확장할 수 있음.
  • 데이터 분석: Kibana와 유사한 OpenSearch Dashboards를 통해 데이터 시각화 및 분석 기능 제공.
  • 보안 및 인증: 데이터 보호를 위한 강력한 보안 기능 제공.

2. Chroma

  • 임베딩 데이터베이스: LLM 애플리케이션 개발을 간소화.
  • 통합 지원: LLM을 위한 지식, 사실, 기술의 통합.
  • 텍스트 임베딩: 텍스트 문서를 임베딩으로 변환하고 유사도 검색 수행.
  • 다양한 기능: 쿼리, 필터링, 밀도 추정 등.
  • 언어 지원: Python 및 JavaScript의 LangChain, 라마인덱스 지원.
  • 확장성: Python 노트북에서의 API 사용과 프로덕션 클러스터로의 확장.

3. FAISS (Facebook AI Similarity Search)

  • 오픈 소스: Facebook AI Research에서 개발된 오픈 소스 라이브러리.
  • 빠른 유사도 검색: 고밀도 벡터 유사도 검색 및 그룹화.
  • 다양한 벡터 크기 지원: RAM 용량을 초과하는 벡터도 검색 가능.
  • 다중 이웃 검색: k번째로 가까운 이웃까지 검색.
  • 동시 검색: 여러 개의 벡터를 동시에 검색 가능.
  • 최적화: 최소한의 검색 대신 가장 많은 내부 제품 검색.
  • 반경 내 검색: 쿼리 위치의 지정된 반경 내 모든 요소 반환.
  • 디스크 인덱싱: RAM 대신 디스크에 인덱스 저장 옵션.

4. 위베이트(Weaviate)

  • 오픈 소스: 오픈 소스 벡터 데이터베이스.
  • 대규모 데이터 관리: 수십억 개의 데이터 개체를 관리.
  • 빠른 검색: 수백만 개의 항목에 대해 밀리초 이내에 10-NN 검색.
  • AI 기반 기능: AI 기반 검색, Q&A, 데이터 병합, 자동 분류.
  • CRUD 기능: 포괄적인 CRUD 기능 제공.
  • 클라우드 네이티브: Kubernetes와 호환, 분산형 워크로드 지원.
  • 네이버 블로그 공유
  • 네이버 밴드 공유
  • 페이스북 공유