안녕하세요🐶
빈지식 채우기의 비니🙋🏻♂️ 입니다.
이전 포스팅을 통해 RAG 의 기초에 대해 알아보았습니다.
오늘은 RAG 의 구성요소 첫 번째 Vector DB 에 대해 알아보도록 하겠습니다.
이전 포스팅을 보고 오시면 좀 더 이해하기 쉽습니다.
1. Vector DB 란
벡터 형식의 데이터를 저장, 쿼리 분석에 특화된 데이터베이스
벡터는 공간상의 점을 나타내는데 사용하며, 다차원 공간에서의 위치를 보여줍니다.
이러한 데이터베이스 아래와 같은 특징을 가지고 있습니다.
- 데이터를 텍스트가 아닌 좌표 및 벡터로 나타냄으로써 단어의 유사성을 좀 더 쉽게 파악할 수 있다.
- 예를 들어 "샌들" 제품을 구매하였고 벡터화를 통해 구매자에게 "쪼리" "샌들" 과 같은 유사한 제품을 추천할 수 있다.
- 컴퓨터 프로그램이 비교를 도출하고 관계를 식별하며 컨텍스트를 이해할 수 있다.
현재 AI 시장에서 RAG의 성장과 함께 떠오르는 분야가 바로 Vector DB 입니다.
왜 갑자기 이렇게 많은 Vector DB 들이 AI 시장에서 중요한 것들 중 하나로 떠오르게 된걸까요?
2. Vector DB 등장 배경
RDS ( 관계형 데이터베이스 ) 는 주로 표 형태의 구조화된 데이터를 다루는데 사용됩니다.
그러나 세상 모든 데이터의 대부분은 이미지, 텍스트, 오디오와 같은 비정형 데이터가 주를 이루고 있습니다.
이러한 데이터를 수집하는데 관계형 데이터베이스는 적합하지 않다는 한계가 있습니다.
2-1. 비정형 데이터 수집의 어려움
관계형 데이터베이스는 주로 표 형태의 구조화된 데이터를 다루는데 사용됩니다.
비정형 데이터들을 테이블에 저장하는 것은 적합하지 않습니다.
2-2. 유사성 검색의 한계
RDS ( 관계형 데이터베이스 ) 는 쿼리에 완전히 일치하는 행을 찾아 반환합니다.
그러므로 유사성을 계산하고 검색하는 기능이 부족하기 때문에, 벡터 데이터를 활용한 유사성 검색이 어렵습니다.
2-3. 보안 데이터 수집의 문제
일반적인 비정형 데이터도 많지만, 업무에 이용하는 자료나 개인정보가 포함된 보안 데이터들을 수집해야할 때가 많습니다.
이러한 보안 데이터를 LLM에 학습을 하게 된다면, 보안에 매우 취약하게 되는 결과를 불러올 수 있습니다.
고로 Vector DB 를 사용하여 보안 데이터를 저장하고 조회할 수 있습니다.
3. Vector DB 동작 방식
- 색인 ( Indexing ) : HNSW 와 같은 검색 알고리즘을 사용하여 벡터를 색인합니다.
- 쿼리 ( Querying ) : 유사도 알고리즘을 적용하여 가장 가까운 벡터를 찾습니다.
- 코사인 유사도
- 두 벡터 간의 각도를 측정하여 유사성을 판단합니다.
- 유클리디안 거리
- 두 벡터 간의 거리를 측정합니다. 거리가 짧을수록 유사성이 높습니다.
- 내적
- 두 벡터 간의 곱셈 연산을 통해 유사성을 측정합니다. 두 벡터가 유사한 방향이면 양수 반대면 음수입니다.
- 코사인 유사도
- 후처리 ( Post Processing ) : 데이터 셋에서 최종 근접 이웃을 검색하고 이를 후처리하여 최종 결과를 반환합니다.
- 사전 필터링
- 벡터를 검색하기 전에 메타데이터 필터링이 수행됩니다.
- 사후 필터링
- 벡터를 검색한 후에 메타데이터 필터링이 수행됩니다
- 사전 필터링
4. Vector DB 종류
Vector DB 이름 | 회사 | Cloud 유무 | 오픈소스 유무 | 사용 알고리즘 | 개인적인 의견 |
Weaviate | SeMI | O | Python, Go, JAVA, JS | Custom HNSW | 쿼리 구현 우수 |
Milvus | Ziliz | X | Python, Go, C++ | ANN, HNSW, ANNOY | 규모가 크다 Document 깔끔 |
Vespa | Yahoo! | O | Java, C++ | HNSW | 기능 풍부, 검증 완료 |
Vald | Yahoo! | X | Go | NGT | |
Chroma | Chroma | O | Python, JS | HNSW | Local 구성, 레퍼런스 다양 AI 쪽에 특화 |
다음 시간에는 Chroma 를 이용한 얼굴 검색을 해보도록 하겠습니다.
감사합니다.
참고
'기타👨🏻💻 > AI' 카테고리의 다른 글
[AI] RAG 의 구성요소 2 ( Embedding ) (2) | 2024.09.04 |
---|---|
[AI] 간단한 RAG 구현 ( Anaconda, Streamlit, OpenAI, Flask, Chroma, Hugging Face ) (7) | 2024.09.03 |
[AI] RAG ( Retrieval Augmented Generation ) 의 기초 (0) | 2024.08.20 |
[OCR] Google Vision Ai 적용 ( 이미지 분석 - Python ) (0) | 2024.03.20 |