SPLADE 기반 한국어 검색, OpenSearch에서 성능

by DD
1개월 전
조회수 6

TF-IDF와 BM25의 어휘 일치 한계를 극복하기 위해 신경망 희소 검색(Neural Sparse Retrieval) 모델 등장

SPLADE v3 스타일 한국어 모델을 Amazon OpenSearch Service에 배포하여 BM25, Titan Embedding V2와 비교

MIRACL-ko 벤치마크 결과, SPLADE 기반 모델이 Titan Embedding V2보다 높은 검색 품질을 보임

하이브리드 검색(Hybrid Search) 조합을 통해 단일 모델 대비 검색 성능 향상을 확인

OpenSearch의 rank_features를 활용한 Sparse 벡터 검색 구현 및 하이브리드 조합 방법 제시

신경망 희소 검색(Neural Sparse Retrieval)의 작동 원리

신경망 희소 검색(Neural Sparse Retrieval)은 어휘 확장(Lexical Expansion)을 통해 BM25의 어휘 일치 한계를 극복하고, Dense Vector의 의미적 유사성 파악 능력을 결합한다. SPLADE는 MLM(Masked Language Model)의 어휘 예측 능력을 활용하여, 문서에 등장하지 않는 관련 단어까지 활성화하는 Sparse Vector를 생성한다.

1단계: MLM 로짓 계산

2단계: log(1 + ReLU) 활성화

3단계: Max Pooling

이러한 과정을 통해, “서울에서 저녁 먹기 좋은 곳” 쿼리에 대해 “맛집”, “레스토랑”과 같은 관련 단어를 활성화하여 검색 정확도(Search Accuracy)를 향상시킨다.

SPLADE v3의 주요 개선 사항

SPLADE v3는 기존 버전 대비 여러 측면에서 성능을 개선했다. KL Divergence Distillation을 통해 Cross-encoder 교사 모델로부터 지식 증류하여 retrieval 품질을 향상시켰다. 또한, Pair-wise와 Listwise Loss 혼합을 통해 학습 안정성을 높였으며, FLOPS Regularization을 통해 희소성(sparsity) 제약을 학습 과정에 내재화하여 index 크기 및 latency를 제어했다. 마지막으로, Hard Negative Mining을 통해 대규모 후보에서 어려운 부정 예시를 채굴하여 경계 식별력을 강화했다. 이러한 개선 사항들을 통해 SPLADE v3는 이전 버전보다 더욱 향상된 검색 성능을 제공한다.

OpenSearch에서의 Sparse Vector 구현

Amazon OpenSearch Service에서 Sparse Vector 검색을 구현하기 위해, rank_features 타입을 활용한다. rank_features는 각 토큰별 가중치를 inverted posting list 형태로 저장하고, dot product 쿼리를 통해 검색을 수행한다. 벤치마크에서는 OpenSearch의 rank_feature query를 boost만 지정하여 기본값인 saturation 함수를 사용했다. 순수 dot product를 원할 경우, linear: {}를 명시하거나 OpenSearch 2.11 이상 버전의 클러스터에서 neural_sparse 쿼리를 사용해야 한다. 이러한 구현 방식을 통해, SPLADE 모델을 OpenSearch 환경에서 효율적으로 활용할 수 있다.

하이브리드 검색(Hybrid Search)의 효과

본 벤치마크에서는 BM25, Titan Embedding V2, SPLADE 모델을 단독으로 사용하거나, RRF(Reciprocal Rank Fusion)를 통해 하이브리드 조합을 구성하여 검색 성능을 비교했다. 그 결과, SPLADE 기반 모델이 Titan Embedding V2보다 높은 retrieval 품질을 보였으며, BM25와 SPLADE의 하이브리드 조합은 단일 SPLADE 모델보다 nDCG@10에서 4.4pp 향상된 0.7530을 기록했다. 또한, BM25, Titan, SPLADE를 모두 결합한 3-way 하이브리드 검색은 0.7609의 nDCG를 달성하여, 하이브리드 검색의 효과를 입증했다.

실제 검색 서비스 구축 시 고려 사항

실제 검색 서비스 구축 시, OpenSearch의 설정 및 인덱스 매핑을 적절히 구성해야 한다. 벤치마크에서는 BM25, Dense, Sparse 인덱스를 독립적으로 구성하고, 각 모델에 맞는 설정을 적용했다. 예를 들어, BM25 인덱스에는 한국어 Nori 분석기를 사용하고, Dense 인덱스에는 k-NN 플러그인과 FAISS 엔진을 활용했다. 또한, Sparse 인덱스에는 rank_features 타입을 사용하여 SPLADE 모델을 지원했다. 인덱스 매핑 시, mapping.total_fields.limit 설정을 통해 동적 필드 생성을 관리해야 하며, 쿼리 성능을 위해 적절한 샤드 및 레플리카 설정을 고려해야 한다.

한국어 파인튜닝된 SPLADE 기반 Neural Sparse 모델과 Amazon OpenSearch 하이브리드 검색 벤치마크