
1. VectorDB란 무엇인가?
- 데이터를 임베딩 벡터로 저장하고 검색하는 db
- 관계형 db는 정보를 scalar data를 행, 열에 테이블 형태로 저장 - 정형 데이터
- 이런 형태로 저장하면 비정형 데이터를 저장하고 검색하기 어려움 - 이미지, 음성, 큰 자연어 텍스트
- AI에 들어가는 데이터들은 비정형 데이터가 많음
- AI에게 넣어줄 정보를 빠르게 검색하기 위해서 빠른 임베딩 벡터 검색 시스템이 필요했음.
- 이런 니즈를 만족시켜준 것이 벡터 디비임.
- - Document 단위로 저장, ID 부여
- - 해시를 활용해 유사도가 높은 벡터들 추려서 비교
- - Embeddings - attributes, features 포함
2. Vector db를 쓰는 이유는?
- long-term 메모리 - ai의 컨텍스트 길이 문제를 해결하기 위해서 ai 와의 대화를 저장해놓고 상기시켜줌
- semantic search - 효율적인 의미 기반 검색, Similarity search - 유사성 기반 검
- 비정형 데이터의 효율적 관리
- 유연한 확장성과 빠른 검색 속도
3. Vector db의 원리는?
- 임베딩 벡터
- 해시 함수: 벡터를 해시값으로 변환하는 핵심 요소. 이 함수는 유사한 벡터가 같은 해시값으로 매핑될 가능성을 높인다
- 해시값 생성 방법 : 유사성 보존 해시
- LSH(Locality-Sensitive Hashing): 유사한 벡터들이 동일한 해시값을 가질 확률이 높도록 설계됩니다. 유사도 검색에 필수적입니다.
- 인덱싱:
- IVF 인덱스
- 벡터를 여러 개의 클러스터로 나누고, 각 클러스터에 인덱스를 생성합니다.
- 클러스터를 찾는 과정에서 해시를 사용해 가장 유사한 클러스터를 빠르게 찾을 수 있습니다.
- HNSW( Hierarchical Navigable Small World ):
- 그래프 기반 인덱싱 방법
- ANN 검색을 위한 고급 인덱싱 방법
- IVF 인덱스
- 해시 테이블: 각 해시값(H1, H2 등)이 관련 벡터 ID를 가리키는 버킷을 형성합니다.
- 검색 과정:
- 쿼리가 입력됩니다
- 쿼리가 해시 함수를 통해 해시값으로 변환됩니다
- 해당 해시값의 버킷에서 후보 벡터들을 검색합니다
- 후보군 중에서 가장 유사한 벡터를 최종 결과로 선택합니다
4. 사용할 수 있는 DB의 종류와 특성
| Chroma | Faiss | Milvus | |
| 유형 | 오픈소스 벡터 데이터베이스 | 고성능 벡터 검색 라이브러리 | 오픈소스 벡터 데이터베이스 |
| 인덱싱 방식 | HNSW 기반 | Flat, IVF, HNSW 등 다양한 인덱싱 제공 | HNSW, IVF, PQ 등 다양한 인덱싱 지원 |
| 메타데이터 관리 | 벡터와 함께 저장 및 관리 가능 | 별도의 데이터베이스에서 관리 필요 (예: PostgreSQL) | 메타데이터 관리 용이 |
| 영속성 | 영속성 보장 | faiss.write_index()로 인덱스 파일 저장 가능 | 영속성 보장 |
| 실시간 검색 | 가능 | 가능 | 가능 |
| 분산형 아키텍처 | 미지원 | 미지원 | 지원 |
| 로컬 환경 사용 가능 여부 | 가능 | 가능 | 가능 |
| 주요 특징 | Python 환경과의 연동 용이, 사용이 간편하지만 복잡한 커스텀 인덱싱 제한 | GPU를 활용한 초고속 검색 가능 | 대규모 데이터셋에 적합한 분산형 아키텍처 제공, 고급 쿼리 지원 |
5. DB 성능 평가 지표
- 검색 속도: 주어진 쿼리에 대해 얼마나 빠르게 결과를 반환할 수 있는가.
- 정확도 (Precision): 검색된 결과 중 얼마나 관련성이 높은가.
- 재현율 (Recall): 전체 관련 데이터 중 얼마나 많이 검색되었는가.
- F1-Score: 정밀도와 재현율의 조화 평균을 통해 종합적인 성능을 평가할 수 있음.
- 메모리 사용량: 인덱싱 및 검색 과정에서 소모되는 메모리의 효율성.
- 확장성: 데이터가 많아질 때도 성능이 유지되는가.
6. 실제 내 데이터로 테스트
1) HTML 데이터 정리
2) 데이터 DB에 저장 - 청킹 단위 지정
3) 사용한 임베딩 모델
4) 쿼리 넣어보고 성능 테스트
'project' 카테고리의 다른 글
| [DevPrep] 6. koalpaca 모델 저장 (1) | 2024.03.28 |
|---|---|
| [DevPrep] 5. koalpaca fine-tuning test (1) | 2024.03.07 |
| [DevPrep] 4. gpt 프롬프팅 테스트 & 데이터 (1) | 2024.03.04 |
| [DevPrep] 3. gpt 파인튜닝과 프롬프트 엔지니어링 (1) | 2024.02.17 |
| [DevPrep] 2. llm 비교해서 선정하기 (2) | 2024.02.17 |