목적
트렌드에 뒤쳐지지 않고 적극적이고 진취적으로 기술 스택을 개선하여 확장성 있고 안정적인 서비스를 제공하기 위함
목표
- VectorDB가 왜 도입되었는지를 소개한다.
- VectorDB에는 어떤 종류가 있는지 소개한다.
- VectorDB가 가진 장점과 한계점에 대해 소개한다.
선행 용어 및 개념 학습
VectorDB를 학습하기 전에 기본적으로 알아두어야 할 용어를 정리함
Vector란?
벡터 : 크기와 방향을 함께 가진 양
스칼라 : 크기만 가진 양
1번은 벡터의 합
2번은 벡터의 곱
인데 벡의 정의와 화살모양이라는 것만 우선 인지하면 됨.
벡터 DB에서는 이러한 화살모양으로 의미 유사성(x,y,z)을 측정함. ex) [0.1, 0.5 1]
Embedding Vector
Embedding Vector란?
- Embedding vector는 단어나 문장을 고차원의 수치 벡터로 나타내는 것을 의미함
- 이러한 벡터는 텍스트 데이터의 의미와 구조를 포착하기 위해 훈련된 모델(주로 신경망 기반)에 의해 생성
- 또한 벡터는 단어나 문장 간의 의미 유사성을 측정하는 데 사용됨
Embedding Vector가 필요한 이유
- 컴퓨터는 텍스트 데이터를 이해하기 위해 숫자로 변환해야 함(이진수로) 이러한 벡터는 자연어를 수학적으로 표현하여 기계 학습 알고리즘에 입력으로 제공함
- Embedding vector를 사용하면 단어나 문장 간의 유사성을 측정하고, 이를 기반으로 자연어 이해 및 처리 작업을 수행할 수 있음
- 예를 들어 Word Embeddings를 사용하면 기계 번역, 감정 분석, 문서 분류 등 다양한 자연어 처리 작업에서 성능을 향상시킬 수 있음
어떻게 Embedding Vector를 만들 수 있는가?
- 가장 일반적인 방법 중 하나는 Word2Vec, GloVe, FastText와 같은 사전 훈련된 임베딩 모델을 사용하는 것
- 이러한 모델은 대규모 텍스트 코퍼스에서 단어의 분산 표현을 학습하며, 이 분산 표현을 사용하여 단어를 벡터로 나타냄
언제 Embedding Vector를 활용할 수 있는가?
- 문서 분류: 단어의 임베딩을 사용하여 텍스트 문서를 벡터로 표현하고, 분류 작업에 활용
- 기계 번역: 단어 수준 또는 문장 수준의 임베딩을 사용하여 번역 모델을 개선
- 감정 분석: 텍스트의 감정 분석을 위해 텍스트의 임베딩을 활용
- 정보 검색: 문서와 쿼리 간의 유사성을 측정하기 위해 임베딩을 사용
즉, Embedding Vector는 고차원의 인간 언어를 저 차원으로 추상화 및 숫자로 변경하여 컴퓨터가 알아 들을 수 있게 변형한 것이고, 이 수치화된 숫자를 통해 두 글자 사이의 의미 유사성을 파악하는 것
이다. 우리가 코딩한 파이썬 언어를 컴파일러를 통해 컴파일 하면 중간 언어인 어셈블리 언어로 변형되고 이 것이 컴퓨터에게 익숙한 자연어로 다시 변경되는 것. 직접적으로 비교하자면
- 어셈블리 코드 : 프로그래밍 로직을 중심으로 작성된 추상화된 표현(문자)
- Embedding Vector : 둘 사이의 유사성을 중심으로 작성된 추상화된 표현(숫자)
이라고 볼 수 있다.
예를 들어 "사과"가 어떤 문장이나 문단에 자주 등장한다면, 그것을 "0.2, 0.8, 0.4"과 같이 수치화한다. 그리고 "바나나"가 어떤 문장에 자주 등장한다면 이것 또한 "0.9, 0.8, 0.5" 등으로 수치화하여 공간에 표시한다.
이 둘 사이의 거리를 통해 의미 유사성을 파악할 수 있다. 물론 여러 단어가 서로 밀집하게 모여있다면(거리가 가깝다면) 그들은 서로 의미 유사성이 더 크다고 판단할 수 있을 것이다.
LLM(Large Language Model, 대형 언어 모델)
LLM이란?
- 자연어 처리 분야에서 중요한 역할을 하는 모델로 텍스트 데이터를 이해하고 생성하는 데 사용됨
- Embedding Vector는 LLM의 핵심 구성 요소 중 하나로, 텍스트를 수치화하여 모델에 입력하기 위해 사용됨
- LLM은 다양한 응용 분야에서 활용되며, 텍스트 데이터의 이해와 생성을 향상시키는 데 중요한 역할을 함
LLM과 Embedding Vector, Vectordb와의 관계
대규모 텍스트 데이터가 있고 이 것을 LLM이란 녀석이 학습함. 그리고 결과값으로 Embedding Vector라는 데이터를 뱉어냄. 이 것을 VectorDB에 저장하고 여기서 검색 등의 활용을 할 수 있음. 물론 VectorDB에서만 활용할 수 있는 건 아님
정적인 LLM의 경우를 예로 들어보자. ChatGPT를 한번 쯤 써봤다면 환각 증상을 겪어봤을 것이다.
여기서 말하는 환각 증상은, LLM이 자존심이 쌔서 모르겠다고 대답을 안하고 어떻게든 자연어를 생성해서 대답을(정확히는 구라를) 하는 것이다.
이 때, Vector DB를 한번 경유한다면 이 부분을 교정할 수(신뢰성을 늘릴 수) 있다.
LLM과 Embedding Vector, Vectordb, 알고리즘과의 관계
대규모 텍스트 데이터를 LLM에 밀어넣어 학습시킴. 학습 결과로 Embedding Vector라는 결과물이 나오고 이것을 VectorDB에 저장함.
특정 알고리즘(k-NN, HNSW, IVF)을 가지고 VectorDB에 있는 데이터를 활용할 수 있는 일종의 방법론 혹은 논리적 라이브러리라 볼 수 있음
K-NN(k-Nearest Neighbors) 알고리즘
- "k-최근접 이웃"이라고도 불리며, 패턴 인식과 기계 학습 분야에서 사용되는 지도 학습 알고리즘 중 하나
- 데이터 간의 유사성을 측정하여 분류 또는 회귀 작업을 수행하는 데 사용됨
ANN (Approximate Nearest Neighbors) 알고리즘
- k-NN 알고리즘의 변형 중 하나
- 가장 가까운 이웃을 정확하게 찾지 않고 근사적으로 찾는 것을 목표로 함
- 대규모 데이터 집합에서 빠르게 이웃을 검색하는 데 사용되며 정확한 k-NN 검색은 계산적으로 매우 비용이 들 수 있지만, ANN은 이런 비용을 줄이면서도 유용한 근사치를 제공함
HNSW(Hierarchical Navigable Small World) 알고리즘
- ANN 알고리즘의 변형 중 하나
- 벡터 데이터의 검색을 위해 고안된 특별한 그래프 구조를 사용하는 근사적인 최근접 이웃 검색 알고리즘
- 이 알고리즘은 "작은 세상" 네트워크 구조를 사용하여 대규모 벡터 데이터셋에서 빠른 검색을 가능하게 함
K-NN, ANN, HNSW 한줄 비교
- K-NN : 소규모에 적합. 실시간보다는 오프라인에 적합
- ANN : 대규모에 적합. 정확도가 아주 중요할 경우에 사용
- HNSW : 대규모에 적합. 약간의 정확도를 포기하고 빠른 속도가 요구될 때 사용
VectorDB란?
벡터화된 데이터를 저장 및 검색, 활용할 수 있는 데이터베이스이다. DBMS가 아니다. 다시 말하지만 데이터베이스이다. 벡터화된 데이터를 담는다는 건(저장한다는 건) 어떤 느낌일까? 아래 그림을 보면 이해가 좀더 빠를 것으로 생각한다.
벡터를 공간이라고 바꿔 표현한다면 어느정도 이해가 될 것이다. 서로 겹치는 부분이 많을수록 의미 유사성이 증가(비슷하다)하다고 볼 수 있다.
벡터DB는 비정형 데이터를 다룬다.
VectorDB 종류 및 비교표
VectorDB명 | 회사 | Cloud 가능여부 | 오픈 소스여부(지원 언어) | 사용알고리즘 | 비고 |
Weaviate | SeMI | O | O (Python, Go, Java, JS) |
Custom HNSW | 쿼리를 유연하게 가져가고 싶다면 고려할 수 있는 VectorDB 라고 함 |
Milvus | Ziliz | X | O (Python, Go, C++) |
ANN, HNSW, ANNOY | 규모가 큰 경우 상당히 좋다고 알려져있음. document도 깔끔한 편이라고 함 |
Vespa | Yahoo! | O | O (Java, C++) | HNSW (graph) | 기능이 풍부하다고 알려져있고 검증이 충분히 되어있다고 함 |
Vald | Yahoo! | X | O (Go) | NGT | |
Chroma | Chroma | O | O (Python, JS) | HNSW | faiss 와 마찬가지로 설치가 편함(local에 구성) AI 쪽에 특화(Chroma 에서 주장하고 있음)되었다고 함 |
Qdrant | Qdrant | N | O (Rust) | HNSW (graph) | |
Pinecone | Pinecone | O | X | 복합으로 사용하며, 독점 상태 | 자료가 상당히 많은 편이고, 빠르게 Prototype으로 실험, 시작, 검증하기 좋다고 함 |
GSI APU for ES(Elasticsearch)/ Opensearch |
GSI | X | X | Neural hashing / Hamming distance |
VectorDB의 한계점
- embedding 하려는 dimension 크기가 높은 경우, ANN 알고리즘들이 품질 저해
- Vector Database가 차지하는 메모리가 큰 편이기에 인프라 설계 시 사전 요구 사항 검토가 필요
- 실제로 임베딩을 해서 indexing 하는 데에도 시간이 오래 걸리는 이슈 존재. 계산 복잡도가 높고, Cost가 엄청남
- Vector Database는 빠른 계산을 위해서 similarity(의미 유사성)를 미리 계산하지만, 이 부분은 모든 데이터들에 대한 similarity를 계산해야 한다는 의미함
- 배치로 처리할지, 실시간으로 처리할지에 따라 고민이 필요함
참고
- 벡터DB로 악플 구분하기 샘플 코드
Vector DB로 악플 구분하기 feat. Weaviate (breezymind.com) - VectorDB 종류
[Vector DB] 2. Vector Database 종류 & 한계점 (tistory.com) - VectorDB 배경과 필요성
[Vector DB] 1. Vector Database 배경 & 필요성 (tistory.com) - VectorDB 종류
벡터 데이터베이스 (tistory.com)