paper link: 2207.03834
논문 개요
이 논문은 최첨단 검색 성능을 보여주는 SPLADE라는 신경망 정보 검색(IR) 모델의 효율성, 특히 검색 속도(latency)를 개선하는 데 초점을 맞추고 있습니다. 최신 언어 모델(PLM) 기반의 검색 시스템은 정확도는 높지만, 기존의 검색 시스템(예: BM25)에 비해 속도가 느리다는 단점이 있습니다. 이 논문의 저자들은 SPLADE 모델에 여러 최적화 기법을 순차적으로 적용하여, 검색 품질의 손실을 최소화하면서도 기존 시스템과 유사한 수준의 빠른 속도를 달성할 수 있음을 입증했습니다.
B) 핵심 문제: 정확도와 속도의 상충 관계
최신 정보 검색 기술은 BERT와 같은 사전 훈련된 언어 모델(PLM)을 사용하여 검색 정확도를 크게 향상시켰습니다. 하지만 이러한 모델들은 복잡한 연산으로 인해 검색 요청을 처리하는 데 많은 시간이 소요됩니다. 이는 매일 수십억 개의 쿼리를 처리해야 하는 실제 검색 엔진 환경에서 큰 걸림돌이 됩니다.
이 논문은 SPLADE(SParse Lexical and Expansion Model) 라는 특정 모델에 주목합니다. SPLADE는 사용자의 쿼리와 문서의 중요 단어를 확장하고 가중치를 재조정하여, 전통적인 검색 방식처럼 ‘역 인덱스(inverted index)‘를 사용할 수 있는 ‘희소 표현(sparse representation)‘을 생성합니다. 이 덕분에 다른 최신 모델들보다 효율적일 잠재력이 있지만, 초기 모델은 단일 CPU 코어 환경에서는 여전히 비효율적이라는 문제가 있었습니다.
C) SPLADE 효율성 개선을 위한 4가지 핵심 제안 기법
저자들은 SPLADE 모델의 속도를 획기적으로 개선하기 위해 다음과 같은 네 가지 주요 개선안을 제안하고, 이를 순차적으로 적용하며 효과를 검증했습니다.
- 문서와 쿼리 인코더 분리 (Separating document and query encoders): 기존 모델은 문서와 쿼리를 처리할 때 동일한 인코더를 사용했습니다. 이로 인해 쿼리 표현을 작고 빠르게 만드는 데 한계가 있었습니다. 저자들은 문서용 인코더와 쿼리용 인코더를 분리하여, 각각의 목적에 맞게 독립적으로 최적화할 수 있도록 했습니다.
- 쿼리에 대한 L1 정규화 (L1 Regularization for Queries): 문서 표현의 효율성을 높이는 데 사용되었던 복잡한 FLOPS 정규화 대신, 쿼리 인코더에는 더 간단한 L1 정규화를 적용했습니다. L1 정규화는 쿼리 벡터에서 중요하지 않은 값들을 0으로 만들어 ‘희소성(sparsity)‘을 높입니다. 결과적으로 쿼리를 표현하는 데 필요한 단어(토큰)의 수가 줄어들어 검색 속도가 빨라집니다.
- FLOPS 정규화를 사용한 중간 학습 (PLM Middle Training with FLOPS): 모델을 최종 검색 데이터셋으로 미세 조정(fine-tuning)하기 전에, 중간 학습 단계를 추가했습니다. 이 단계에서 MLM(Masked Language Model) 작업에 FLOPS 정규화를 적용하여 언어 모델이 처음부터 효율적인(희소한) 표현을 생성하도록 학습시킵니다.
- 더 작은 쿼리 인코더 사용 (Smaller PLM query encoder): 속도 저하의 가장 큰 원인 중 하나는 쿼리 자체를 처리하는 데 걸리는 시간입니다. 저자들은 이 문제를 해결하기 위해 쿼리 인코더를 매우 가볍고 빠른 모델인 ‘BERT-tiny’로 교체하는 과감한 시도를 했습니다. 이를 통해 쿼리 인코딩에 걸리는 시간을 평균 45.3ms에서 0.7ms로 크게 단축했습니다.
D) 실험 및 결과
저자들은 MS MARCO(인-도메인 데이터)와 BEIR(아웃-오브-도메인 벤치마크) 데이터셋을 사용하여 제안된 모델들의 성능(MRR@10, nDCG@10)과 효율성(latency)을 측정했습니다.
- 성능 진화 (RQ1): 제안된 개선안들을 순차적으로 적용할 때마다 모델의 속도는 크게 향상되었습니다. 특히 가장 빠른 모델(BERT-tiny 쿼리 인코더 사용)은 기존 SPLADE 모델의 지연 시간(691ms)을 수십 분의 일(10ms 내외)로 줄였습니다. 물론 이 과정에서 약간의 정확도 하락이 있었지만, 그 폭은 10% 미만으로 제한되었습니다.
- 인-도메인 성능 비교 (RQ2): 새롭게 최적화된 SPLADE 모델들은 BM25와 같은 전통적인 모델보다 2배 이상 높은 검색 효과를 보이면서도 비슷한 수준의 속도를 달성했습니다. 또한, 다른 최신 희소 검색 모델들과 비교했을 때도 더 효율적이거나 더 나은 성능을 보였습니다.
- 아웃-오브-도메인 성능 비교 (RQ3): 효율성을 극대화하는 과정에서, 다양한 도메인에 대한 일반화 성능은 다소 하락했습니다. 하지만, 제안된 모델의 검색 결과와 전통적인 BM25의 결과를 결합(ensemble)함으로써 이 문제를 완화할 수 있었습니다. 이 결합 모델은 원래의 SPLADE-distil 모델보다 훨씬 빠르면서도(40ms 미만) 더 높은 성능을 보였고, 당시 BEIR 벤치마크에서 최고의 성능을 기록했습니다.
E) 결론 및 기여
이 논문은 다음과 같은 중요한 기여를 했습니다.
- 최초의 실용적인 신경망 검색 모델 제안: 검색 품질 저하를 최소화하면서, 전통적인 검색 시스템인 BM25와 비슷한 수준의 단일 CPU 코어 지연 시간을 달성한 최초의 신경망 모델들을 제안했습니다.
- 구체적인 효율성 개선 방법론 제시: 단순히 빠르다고 주장하는 것을 넘어, 쿼리/문서 인코더 분리, L1 정규화, 작은 인코더 사용 등 구체적이고 재현 가능한 엔지니어링 기법들을 통해 신경망 검색 모델의 속도를 개선하는 방법을 체계적으로 보여주었습니다.
- 정확도와 속도 간의 균형 입증: 제안된 기법들을 통해 최첨단 신경망 모델의 높은 정확도와 전통적인 시스템의 빠른 속도라는 두 마리 토끼를 모두 잡을 수 있는 가능성을 열었습니다.
결론적으로, 이 연구는 학문적 수준에 머물러 있던 고성능 신경망 검색 모델을 실제 서비스에 적용할 수 있도록 하는 중요한 다리를 놓은 실용적인 연구라고 할 수 있습니다.
F) Q&A
F.1) SPLADEv2-distil 모델이란?
SPLADEv2-distil 모델은 이 지식 증류 방식을 통해 학습된 SPLADE v2 모델을 가리킵니다. 논문의 저자들이 실험 초기 단계에서 이 모델의 지연 시간(latency)을 측정했을 때, 단일 CPU 환경에서 691ms라는 매우 느린 속도를 기록했습니다.
F.2) FLOPS 정규화(FLOPS Regularization)란?
FLOPS 정규화는 모델의 출력물(sparse vector)을 가지고 실제 검색(dot product 연산)을 수행할 때 발생하는 예상 계산량(FLOPS, Floating Point Operations) 자체를 손실 함수에 포함하여, 모델이 계산적으로 더 효율적인(즉, 더 희소한) 결과를 내놓도록 유도하는 기법입니다.
- 핵심 아이디어: 정보 검색에서 SPLADE의 점수 계산은 결국 두 개의 희소 벡터(sparse vector) 간의 내적(dot product)입니다. 이 연산의 계산량은 두 벡터에서 0이 아닌 값(non-zero elements)의 개수에 비례합니다. 즉, 벡터가 희소할수록(0이 많을수록) 계산은 빨라집니다.
- 동작 방식: FLOPS 정규화는 모델이 생성한 희소 벡터의 ‘밀도(density)‘를 기반으로 예상 FLOPS를 추정합니다. 그리고 이 추정된 계산량을 손실(loss)의 일부로 간주하여 패널티를 줍니다.
- 목표: 모델은 주된 목표(예: 증류 손실 최소화)를 달성하면서 동시에 이 FLOPS 패널티도 줄여야 합니다. 그 결과, 모델은 성능을 최대한 유지하면서도 0이 아닌 값의 개수를 줄여서 더 희소하고 계산적으로 효율적인 벡터를 생성하도록 학습됩니다.
논문에서는 이 기법의 출처인 논문(Paria et al., 2020)을 인용하고 있으며, SPLADE의 초기 모델은 문서와 쿼리 양쪽에 이 FLOPS 정규화를 적용했습니다.
F.3) 2. L1 손실(L1 Loss)의 구체적인 Loss Function 구성
논문에서는 쿼리 인코더에 기존의 FLOPS 정규화 대신 L1 정규화를 적용하는 방식을 제안합니다. 여기서 L1 손실은 전체 손실 함수의 정규화 항으로 포함되어, 쿼리 벡터의 희소성을 높이는 역할을 합니다.
전체 손실 함수는 다음과 같이 구성됩니다.
- 전체 손실 = 증류 손실(Distillation Loss) + × (쿼리 벡터에 대한 L1 정규화 손실)
각 구성 요소는 아래와 같은 의미를 가집니다.
-
증류 손실(Distillation Loss) 학생 모델인 SPLADE가 생성한 검색 점수가 교사 모델(더 강력한 Cross-Encoder)의 점수와 최대한 비슷해지도록 학습하는 것이 주 목표입니다. 논문에서는 이 부분에 KL Divergence(쿨백-라이블러 발산) 손실을 사용하여 두 점수 분포 간 차이를 최소화합니다.
-
L1 정규화 손실 이는 쿼리 인코더가 출력한 쿼리 벡터 의 모든 요소(토큰별 가중치)의 절댓값을 합산해 계산합니다. 즉,
- 이 항목이 추가됨으로써 쿼리 벡터에서 중요하지 않은 값들은 0으로 수렴하게 되고, 전체적으로 더 희소(sparse)한 표현이 만들어져 검색 속도가 빨라집니다.
-
(람다 쿼리) 이 하이퍼파라미터는 L1 정규화가 전체 학습 과정에서 미치는 영향력을 조절합니다.
- 값이 크면, 모델은 L1 패널티를 줄이기 위해 쿼리 벡터를 더욱 희소하게 만듭니다. 이에 따라 검색 속도는 빨라지지만, 너무 큰 값을 사용하면 정보 유실로 인해 정확도가 저하될 수 있습니다.
- 반대로 값이 작으면, 희소성 효과는 줄어들고 더 많은 정보가 남아 정확도 유지에는 도움이 되지만 속도 개선 효과는 약해집니다.
결과적으로, L1 정규화는 FLOPS 정규화보다 직관적이며 효과적으로 쿼리 벡터 내 불필요한 정보를 제거하여 연산 효율성을 크게 높입니다. 이를 통해 SPLADE 모델은 빠른 검색 속도를 달성할 수 있습니다.