희소 벡터(Sparse Vector)는 전체 차원 중 대부분의 값이 $0$이고, 텍스트에 나타난 주요 단어(토큰) 위치에만 0이 아닌 가중치(가령 단어 중요도나 빈도)가 매핑되는 고차원 벡터 표현 방식입니다.
조항 번호, 고유명사, 전문 용어와 같은 정밀한 키워드 매칭을 수행하면서도 고차원 역색인(Inverted Index)을 통해 빠르게 검색할 수 있습니다.
1. 희소 벡터 생성 원리
희소 벡터는 전체 단어 사전(보통 3만~25만 차원)을 기반으로 문서를 벡터화합니다. 생성 방식은 크게 통계 기반(Lexical/BM25)과 신경망 기반(Neural/SPLADE)으로 나뉩니다.
[입력 텍스트]
──> [토크나이징 (Subword/Word)]
──> [가중치 산출 (통계 or 신경망)]
──> [Sparse Vector: (indices, values)]
- 토크나이징 및 인덱스 매핑:
- 텍스트를 사전에 등록된 고유 정수 ID(indices)로 분해합니다.
- 가중치(values) 산출 방식:
- 통계 기반 (BM25 / FastEmbed BM25): 단어 출현 빈도(TF)와 전체 문서 집합 내의 희귀도(IDF, 역문서 빈도)를 수식으로 계산하여 가중치를 부여합니다.
- 신경망 기반 (SPLADE, BGE-M3 Sparse 등): BERT/Transformer 인코더의 출력 로짓(Logits)에 $\text{ReLU}$ 및 Sparsification 정규화를 적용합니다. 본문에 없는 잠재 동의어까지 문맥적으로 확장하여 가중치를 부여합니다.
- 최종 데이터 구조:
- 메모리 효율을 위해 $0$인 차원은 제외하고 {indices: [102, 405, 899], values: [0.85, 0.45, 0.92]} 형태로 저장합니다.
2. 희소 벡터 검색 원리
희소 벡터 검색은 검색 엔진의 역색인(Inverted Index) 구조와 벡터 내적(Dot Product) 연산이 결합되어 동작합니다.
[Query 텍스트]
──> [Query Sparse Vector]
──> [Inverted Index 포스팅 리스트 조회]
──> [Dot Product 유사도 합산]
- 역색인(Inverted Index) 기반 포스팅 리스트 탐색:
- 각 토큰 인덱스(Index ID)마다 해당 단어를 포함하고 있는 문서(Point ID)와 그 가중치가 연결 리스트(Posting List) 형태로 저장되어 있습니다.
- 쿼리에 포함된 소수의 유효 인덱스에 매핑된 문서 목록만 즉시 추출하므로, 전체 문서를 전수 조사하지 않고도 밀리초 단위로 후보군을 추려냅니다.
- 벡터 내적(Dot Product) 유사도 계산:
- 쿼리 벡터 $\vec{q}$와 문서 벡터 $\vec{d}$의 유사도 점수는 공통으로 존재하는 인덱스들의 가중치 곱의 합으로 계산됩니다.$$Score(\vec{q}, \vec{d}) = \vec{q} \cdot \vec{d} = \sum_{i \in (\text{indices}_q \cap \text{indices}_d)} v_{q, i} \times v_{d, i}$$
- 결과 정렬 및 반환:
- 내적 점수가 높은 상위 Top-$K$ 문서를 정렬하여 반환합니다.
3. 밀집 벡터(Dense Vector)와의 차이점 및 하이브리드 결합
| 구분 | 희소 벡터 | 밀집 벡터 |
| 차원 크기 | 초고차원 ($30,000 \sim 250,000$ 차원 이상) | 저차원 고정 ($384 \sim 1536$ 차원) |
| 값의 형태 | 대부분 $0$, 소수 토큰만 실수값 가짐 | 모든 차원에 실수(Float)가 빽빽하게 채워짐 |
| 색인 구조 | 역색인 (Inverted Index) | 그래프 기반 (HNSW) 또는 클러스터링 (IVF) |
| 검색 강점 | 조항 번호, 고유명사, 전문 용어, 정확한 단어 일치 | 문맥적 의미, 다의어, 의역/유사 문맥 파악 |
실무 RAG 시스템에서는 의미적 유사도를 탐색하는 밀집 벡터와 키워드 누락을 방지하는 희소 벡터를 함께 저장한 뒤, Qdrant와 같은 DB 시스템의 RRF(Reciprocal Rank Fusion)를 통해 순위를 결합하는 하이브리드 방식으로 검색 정확도를 극대화합니다.