본문으로 건너뛰기

SEISMIC: Learned Sparse Retrieval을 위한 효율적 역색인 구조

· 약 4분
김성연
AI Research Engineer, Brain Crew

논문: Bruch et al., "Efficient Inverted Indexes for Approximate Retrieval over Learned Sparse Representations", SIGIR 2024 (arXiv:2404.18812)

TL;DR

Splade 같은 Learned Sparse Representation(LSR) 모델은 해석 가능한 희소 벡터를 생성하지만, 기존 역색인(WAND/MaxScore)으로는 쿼리당 약 100ms가 걸려 실시간 서비스가 어렵습니다. SEISMIC은 LSR 벡터의 "소수 좌표에 L1 mass가 집중되는 현상"을 발견하고, 이를 활용한 Static Pruning + Geometric Blocking + Summary Vector 기반의 새로운 인덱스 구조를 제안하여, 95% 정확도에서 303μs(기존 대비 100~330배 빠름)의 검색 속도를 달성합니다.

배경: LSR의 등장과 역색인의 한계

Information Retrieval 파이프라인

First-stage Retrieval은 수백만~수십억 문서에서 관련 후보를 밀리초 내에 추출하는 단계입니다. 이후 Cross-encoder 등의 Re-ranker가 정밀하게 재순위화합니다.

Dense vs Sparse Retrieval

구분Dense (DPR, ColBERT)Sparse (BM25, Splade)
벡터 차원768차원 실수 벡터30,000차원 희소 벡터
인덱스HNSW, IVF 등 ANN역색인 (Inverted Index)
장점의미적 매칭해석 가능성

Learned Sparse Retrieval (LSR) 은 두 장점을 결합합니다. BERT 기반 모델이 희소 벡터를 출력하되, 원래 쿼리에 없던 단어("paris" 등)도 활성화하여 어휘 불일치 문제를 해결합니다.

기존 역색인의 문제

BM25에서 잘 작동하는 Dynamic Pruning(WAND/MaxScore)이 LSR에서 실패하는 이유:

  • 쿼리 길이: BM25는 2~5 단어, Splade는 약 43개 non-zero 좌표
  • 리스트 분포: Zipfian이 아닌 비교적 균일한 분포
  • 가중치: 정수가 아닌 실수값

결과적으로 최적화된 역색인 엔진(Pisa)에서도 Splade 검색에 쿼리당 약 100ms가 소요됩니다.

핵심 관찰: Concentration of Importance

논문의 핵심 발견은 LSR 벡터에서 L1 mass가 소수의 좌표에 집중된다는 것입니다.

  • 쿼리: 상위 10개 좌표 → 전체 L1 mass의 약 75%
  • 문서: 상위 50개 좌표 → 전체 L1 mass의 약 75%

이 성질을 alpha-mass subvector(L1 mass의 alpha 비율을 담는 최소 좌표 집합)로 정의하며, 양쪽에서 상위 좌표만 사용해도 inner product의 90~98%가 보존됩니다.

이 관찰에서 세 가지 설계 원칙이 도출됩니다:

  1. Static Pruning — 각 리스트에서 가중치 높은 문서만 유지
  2. Summary Vectors — 블록의 상위 좌표만으로 빠른 상한 추정
  3. Query Truncation — 쿼리의 상위 좌표만 순회

SEISMIC 알고리즘

Spilled clustering of inverted lists with Efficient Indexing and Summaries for Maximum Inner product searcCh

Inverted Index(후보 문서 빠른 결정)와 Forward Index(정확한 IP 계산)를 결합한 구조입니다.

Step 1: Static Pruning

각 posting list에서 가중치 기준 상위 λ개 문서만 유지 (MS MARCO 기준 λ=6,000). Concentration of Importance에 의해 높은 가중치 문서가 IP에 가장 많이 기여하므로 정확도 손실이 미미합니다.

Step 2: Geometric Blocking

Pruning 후 남은 각 리스트를 β개 블록으로 K-Means 클러스터링 (β=400). 벡터가 유사한 문서끼리 묶어, Summary 벡터의 상한이 더 tight해집니다. 1-pass Shallow K-Means로 빠르게 수행합니다.

Step 3: Summary Vectors

각 블록에서 좌표별 최대값을 취한 뒤, alpha-mass subvector(상위 40% L1 mass)만 유지하고 8-bit scalar quantization으로 메모리를 4배 절감합니다. 이 Summary는 conservative(상한)하므로 안전한 pruning이 가능합니다.

Query Processing

  1. 쿼리의 상위 query_cut개 좌표 선택
  2. 각 좌표의 inverted list에서 블록 순회
  3. Summary와 쿼리의 IP가 현재 top-k heap 최솟값 × heap_factor보다 크면 블록 방문
  4. Forward Index에서 정확한 IP 계산 → heap 업데이트

query_cutheap_factor 두 파라미터로 동일 인덱스에서 다양한 정확도-속도 트레이드오프를 탐색할 수 있습니다.

실험 결과

Accuracy vs Latency (MS MARCO, Splade)

방법95% Accuracy 기준 LatencySEISMIC 대비
SEISMIC303 μs1x
PyAnn1,016 μs3.4x 느림
GrassRMA (BigANN 2023 우승)1,271 μs4.2x 느림
SparseIvf10,254 μs34x 느림
Ioqp31,843 μs105x 느림
Pisa (정확 검색)100,325 μs331x 느림

Index Size & Build Time

방법빌드 시간인덱스 크기
SEISMIC5분2,500 MiB
PyAnn45분-
GrassRMA120분4,100 MiB

직접 실험: 핵심 포인트

MS MARCO Splade 데이터셋으로 직접 실험한 결과:

  • Concentration of Importance 확인: 쿼리 상위 10개 좌표 → 약 75% L1 mass (논문과 일치)
  • Sub-millisecond Latency: 95% recall에서 약 300μs 달성
  • 하이퍼파라미터 분석: query_cut 증가 시 recall이 빠르게 수렴, heap_factor는 pruning 강도를 세밀하게 조절
  • MRR@10: ground truth 대비 95% 이상의 검색 품질 유지

실험 코드: seismic-experiment.ipynb

시사점

  • Splade 등 LSR 모델의 실시간 서비스 가능성을 열었음
  • E-Splade 같은 효율성을 위한 정확도 타협이 더 이상 불필요
  • 기존 역색인 인프라 위에 구축 가능 (Rust 오픈소스 공개)
  • Dense Retrieval의 ANN 인덱스(HNSW 등)에 대한 Sparse 진영의 경쟁력 있는 대안

References