Embedding
머신러닝에서 Embedding이란 무엇인가 — 단어·문장·이미지처럼 사람이 다루는 데이터를 의미 관계가 보존된 고차원 벡터로 바꾸는 것을 말합니다.
키워드 검색
- TF-IDF(Term Frequency-Inverse Document Frequency) 단어 빈도와 역 문서 빈도를 곱하여 특정 문서에서 단어의 중요도를 나타내는 통계적 측정 방법입니다.
- BM25(Best Matching 25) 검색어와 문서 간의 관련성을 계산해 가장 적합한 문서를 찾아주는 검색 랭킹 알고리즘이다.
의미론 검색
문장을 **임베딩(embedding)**으로 바꿔서 의미적으로 유사한 문서를 찾습니다.
Vector Database(벡터DB)
Sparse(희소) Vector 와 Dense(밀집) Vector
글을 벡터DB에 저장할 때는 글 전체를 임베딩할 수도 있고, 주요 키워드만 뽑아 임베딩할 수도 있습니다. 키워드만 뽑아 변환하면 벡터가 표현할 수 있는 차원 중 일부만 사용하게 되고 나머지 많은 차원은 0으로 '비어' 있게 되는데, 이를 희소 벡터라고 합니다. 반면 글 전체를 임베딩 벡터로 변환하면 거의 모든 차원을 사용하게 되며, 이를 밀집 벡터라고 합니다.
희소 벡터는 특정 키워드와 일치하는 문서를 찾는 데 적합하고, 밀집 벡터는 콘텐츠 전체의 의미를 검색하는 데 적합합니다. 희소 벡터는 차원 값 대부분이 0이라 압축하기 쉬워 메모리 효율이 좋다는 장점이 있고, 밀집 벡터는 모든 차원에 값이 들어 있어 의미를 담아내기 좋다는 장점이 있습니다. 다만 희소 벡터는 키워드만으로 완전한 의미를 파악하기 어렵고, 밀집 벡터는 모든 차원의 값을 저장하므로 메모리 사용량이 크다는 단점이 있습니다. 실무에서는 희소 벡터를 BM25 같은 키워드 검색에, 밀집 벡터를 코사인 유사도 기반의 의미 검색에 주로 활용합니다.
벡터DB 검색 방법
- HNSW(Hierarchical Navigable Small World) 그래프 기반의 검색 알고리즘으로, 대규모 벡터 데이터베이스에서 빠르게 유사한 벡터를 찾는 데 사용됩니다. HNSW는 벡터 간의 유사성을 기반으로 그래프를 구성하여 검색 효율성을 높입니다.
- IVF(Inverted File) 벡터를 여러 개의 클러스터로 나누고, 각 클러스터에 대한 인덱스를 생성하여 검색 효율성을 높이는 방법입니다. 검색 시에는 먼저 클러스터를 선택한 후 해당 클러스터 내에서 유사한 벡터를 찾습니다.
- PQ(Product Quantization) 벡터를 여러 개의 하위 벡터로 분할하여 각 하위 벡터를 양자화하는 방법입니다. 이를 통해 벡터의 차원을 줄이고, 검색 시에는 양자화된 하위 벡터 간의 유사성을 계산하여 빠르게 유사한 벡터를 찾습니다.
- LSH(Locality-Sensitive Hashing) 유사한 벡터가 동일한 해시 버킷에 매핑되도록 하는 해싱 방법입니다. 이를 통해 검색 시에는 동일한 해시 버킷에 있는 벡터들만 비교하여 유사한 벡터를 빠르게 찾을 수 있습니다.
벡터DB
- FAISS(Facebook AI Similarity Search) Facebook에서 개발한 라이브러리로, 대규모 벡터 데이터베이스에서 유사한 벡터를 빠르게 검색할 수 있도록 다양한 알고리즘과 인덱싱 방법을 제공합니다. HNSW, IVF, PQ 등 다양한 검색 방법을 지원하며, GPU 가속을 통해 대규모 데이터에서도 효율적으로 검색할 수 있습니다.
- Annoy(Approximate Nearest Neighbors Oh Yeah) Spotify에서 개발한 라이브러리로, 대규모 벡터 데이터베이스에서 유사한 벡터를 빠르게 검색할 수 있도록 다양한 알고리즘과 인덱싱 방법을 제공합니다. HNSW, IVF, PQ 등 다양한 검색 방법을 지원하며, 메모리 효율적인 인덱싱을 통해 대규모 데이터에서도 효율적으로 검색할 수 있습니다.
- ScaNN(Scalable Nearest Neighbors) Google에서 개발한 라이브러리로, 대규모 벡터 데이터베이스에서 유사한 벡터를 빠르게 검색할 수 있도록 다양한 알고리즘과 인덱싱 방법을 제공합니다. HNSW, IVF, PQ 등 다양한 검색 방법을 지원하며, GPU 가속을 통해 대규모 데이터에서도 효율적으로 검색할 수 있습니다.
- NMSLIB(Non-Metric Space Library) 대규모 벡터 데이터베이스에서 유사한 벡터를 빠르게 검색할 수 있도록 다양한 알고리즘과 인덱싱 방법을 제공합니다. HNSW, IVF, PQ 등 다양한 검색 방법을 지원하며, 메모리 효율적인 인덱싱을 통해 대규모 데이터에서도 효율적으로 검색할 수 있습니다.
- Milvus 대규모 벡터 데이터베이스에서 유사한 벡터를 빠르게 검색할 수 있도록 다양한 알고리즘과 인덱싱 방법을 제공합니다. HNSW, IVF, PQ 등 다양한 검색 방법을 지원하며, GPU 가속을 통해 대규모 데이터에서도 효율적으로 검색할 수 있습니다.
참고 링크