Training and Finetuning Sparse Embedding Models with Sentence Transformers
Quick Summary
이 글은 Sentence Transformers로 희소 임베딩 모델을 미세조정하는 이유와 기본 구성요소를 설명하며, SPLADE 계열 모델의 해석 가능성·확장 방식·도메인 적응 필요성을 실용 예제로 보여준다.
🖼️ 인포그래픽
🖼️ 4컷 인포그래픽
💡 한 줄 요약
이 글은 Sentence Transformers로 희소 임베딩 모델을 미세조정하는 이유와 기본 구성요소를 설명하며, SPLADE 계열 모델의 해석 가능성·확장 방식·도메인 적응 필요성을 실용 예제로 보여준다.
📌 핵심 요약
- Sentence Transformers는 밀집 임베딩, 재랭커, 희소 임베딩 모델을 사용할 수 있는 파이썬 라이브러리이며, 글은 희소 인코더를 미세조정해 검색·하이브리드 검색·검색 후 재랭킹에 활용하는 방법을 소개한다.
- 희소 임베딩은 3만 차원 이상의 고차원 벡터에서 대부분 값이 0인 표현을 만들며, 활성 차원이 모델 어휘의 특정 토큰과 대응하기 때문에 어떤 단어가 유사도 판단에 기여했는지 해석하기 쉽다.
- SPLADE 같은 신경망 기반 희소 모델은 원문에 없는 관련 단어를 자동으로 확장해 BM25 같은 전통적 어휘 검색보다 동의어, 철자 오류, 어휘 불일치 문제에 강하지만, 원치 않는 확장 위험도 있다.
- 기본 모델은 일반 단어의 의미 확장은 잘 처리할 수 있어도 특정 도메인이나 언어의 전문 용어를 충분히 인식하지 못할 수 있으므로, 사용자가 필요한 영역에 맞춰 미세조정하는 것이 중요하다.
- 훈련은 모델, 데이터셋, 손실 함수, 훈련 인자, 평가기, 트레이너로 구성되며, 글은 기존 SparseEncoder를 불러오는 방법과 SPLADE 및 inference-free SPLADE 같은 대표 구조를 예시 코드로 설명한다.
🧩 주요 포인트
- Sentence Transformers는 밀집 임베딩, 재랭커, 희소 임베딩 모델을 사용할 수 있는 파이썬 라이브러리이며, 글은 희소 인코더를 미세조정해 검색·하이브리드 검색·검색 후 재랭킹에 활용하는 방법을 소개한다.
- 희소 임베딩은 3만 차원 이상의 고차원 벡터에서 대부분 값이 0인 표현을 만들며, 활성 차원이 모델 어휘의 특정 토큰과 대응하기 때문에 어떤 단어가 유사도 판단에 기여했는지 해석하기 쉽다.
- SPLADE 같은 신경망 기반 희소 모델은 원문에 없는 관련 단어를 자동으로 확장해 BM25 같은 전통적 어휘 검색보다 동의어, 철자 오류, 어휘 불일치 문제에 강하지만, 원치 않는 확장 위험도 있다.
- 기본 모델은 일반 단어의 의미 확장은 잘 처리할 수 있어도 특정 도메인이나 언어의 전문 용어를 충분히 인식하지 못할 수 있으므로, 사용자가 필요한 영역에 맞춰 미세조정하는 것이 중요하다.
- 훈련은 모델, 데이터셋, 손실 함수, 훈련 인자, 평가기, 트레이너로 구성되며, 글은 기존 SparseEncoder를 불러오는 방법과 SPLADE 및 inference-free SPLADE 같은 대표 구조를 예시 코드로 설명한다.
🧠 상세 정리
1. 글의 목적과 Sentence Transformers의 역할
이 글은 Sentence Transformers를 이용해 희소 인코더 또는 희소 임베딩 모델을 미세조정하는 방법을 설명하는 튜토리얼 성격의 글이다. Sentence Transformers는 검색 증강 생성, 의미 검색, 의미적 텍스트 유사도, 패러프레이즈 마이닝 등 다양한 작업에서 밀집 임베딩, 재랭커, 희소 임베딩 모델을 사용할 수 있게 해주는 파이썬 라이브러리로 소개된다. 저자는 특히 저렴하면서도 하이브리드 검색이나 검색 후 재랭킹 시나리오에서 잘 작동하는 sparse-encoder/example-inference-free-splade-distilbert-base-uncased-nq 모델을 결과 예로 든다. 또한 직접 학습하지 않더라도 Hugging Face Hub에 공개된 여러 사전학습 희소 인코더를 선택할 수 있고, 관련 SPLADE 모델 컬렉션과 문서의 벤치마크 목록을 참고할 수 있다고 안내한다.
2. 희소 임베딩 모델의 기본 개념
임베딩 모델은 텍스트 같은 입력을 의미를 담은 벡터 표현으로 바꾸는 모델이며, 이 벡터를 이용해 유사도 계산, 검색, 클러스터링, 분류 같은 작업을 수행할 수 있다. 일반적인 밀집 임베딩 모델은 384, 768, 1024차원처럼 비교적 낮은 차원의 벡터를 만들고 대부분의 값이 0이 아니다. 반면 희소 임베딩 모델은 3만 차원 이상의 고차원 벡터를 만들지만 대부분의 값은 0이며, 값이 있는 차원은 대체로 모델 어휘의 특정 토큰과 연결된다. 이 구조 덕분에 희소 임베딩은 단순히 점수만 제공하는 것이 아니라, 어떤 토큰이 문장 표현에 크게 기여했는지를 확인할 수 있는 해석 가능성을 제공한다.
3. SPLADE 예시와 벡터 해석
글은 naver/splade-v3 모델을 SparseEncoder로 불러와 세 문장을 인코딩하는 예시를 제시한다. “The weather is lovely today.”, “It's so sunny outside!”, “He drove to the stadium.” 세 문장을 넣으면 각 문장은 30,522차원의 희소 벡터로 변환되고, 모델의 similarity 메서드로 문장 간 유사도 점수를 계산할 수 있다. 날씨와 햇빛에 관한 두 문장은 서로 어느 정도 유사도를 보이지만, 경기장으로 운전했다는 문장은 앞의 두 문장과 거의 관련이 낮게 나온다. 이어서 decode 메서드를 사용하면 각 임베딩에서 가장 높은 값을 가진 토큰을 확인할 수 있어, 모델이 문장을 어떤 단어와 개념으로 표현했는지 사람이 직접 살펴볼 수 있다.
4. 디코딩과 교집합을 통한 설명 가능성
디코딩 결과는 희소 임베딩의 해석 가능성을 구체적으로 보여준다. 날씨 문장은 weather, today, lovely뿐 아니라 currently, beautiful, cool, pretty, nice, summer 같은 관련 토큰으로 확장되고, 햇빛 문장은 outside, sunny, weather, summer, sun 같은 토큰을 포함한다. 경기장 문장은 stadium, drove, driving, drive, car, football 같은 토큰이 상위에 나타나며 앞의 두 문장과 다른 의미 공간을 형성한다. 또한 두 임베딩의 intersection 또는 overlap을 계산하면 두 문장이 왜 유사하다고 판단되는지 확인할 수 있는데, 예시에서는 weather, cool, summer 같은 토큰이 겹치는 요소로 제시된다. 이는 검색 결과를 설명하거나 두 텍스트의 유사·비유사 원인을 분석하는 데 유용하다.
5. 쿼리·문서 확장과 전통적 어휘 검색과의 차이
신경망 기반 희소 임베딩 모델의 핵심 요소 중 하나는 쿼리 또는 문서 확장이다. BM25 같은 전통적 어휘 검색 방식은 텍스트에 실제로 등장한 정확한 토큰을 중심으로 매칭하지만, 신경망 희소 모델은 원문에 없는 의미적으로 관련된 단어를 자동으로 추가한다. 예를 들어 “The weather is lovely today”는 beautiful, cool, pretty, nice 같은 단어로 확장되고, “It's so sunny outside!”는 weather, summer, sun 같은 단어와 연결된다. 이 확장 덕분에 정확히 같은 단어가 없어도 의미적으로 가까운 콘텐츠를 찾을 수 있고, 동의어·오탈자·어휘 불일치 문제를 줄일 수 있다. 다만 확장은 항상 긍정적인 것은 아니며, “Tuesday”를 묻는 쿼리가 monday나 wednesday 같은 다른 요일로 확장될 수 있는 위험도 함께 언급된다.
6. 희소 임베딩 모델을 사용하는 이유
글은 신경망 기반 희소 임베딩 모델이 BM25 같은 전통적 어휘 검색과 Sentence Transformers식 밀집 임베딩 모델 사이의 유용한 틈새를 차지한다고 설명한다. 희소 모델은 어휘 일치가 중요한 검색에서 밀집 모델이 놓칠 수 있는 부분을 보완하며, 밀집 모델과 결합한 하이브리드 검색에서 특히 효과적으로 활용될 수 있다. 또한 어떤 토큰이 매칭에 기여했는지 확인할 수 있어 검색 결과를 해석하고 디버깅하기 좋다. 성능 측면에서도 여러 검색 작업에서 밀집 모델과 경쟁하거나 더 나은 결과를 낼 수 있다고 제시된다. 글에서는 이후 설명에서 sparse embedding model과 sparse encoder model이라는 표현을 같은 의미로 사용하겠다고 정리한다.
7. 미세조정이 필요한 이유
희소 임베딩 모델은 쿼리와 문서를 관련 단어로 확장해, 같은 의미를 지닌 텍스트가 단어를 공유하지 않아도 매칭될 수 있게 한다. 일반 모델은 grocery가 포함된 텍스트에서 supermarket, food, market 같은 확장을 잘 만들어낼 수 있지만, 모든 도메인 전문 용어를 적절히 처리하는 것은 아니다. 글의 예시에서 “The patient complained of severe cephalalgia.”는 cephalalgia가 headache와 연결되기를 기대하지만, 실제 확장은 severe, patient, complaint, disease, diagnosis, pain, hospital 등으로 흩어지고 headache는 나오지 않는다. 이 문제는 의료 용어뿐 아니라 Java가 프로그래밍 언어라는 점, Audi가 자동차 회사라는 점, NVIDIA가 그래픽 카드를 만드는 회사라는 점처럼 특정 도메인 지식이 필요한 경우에도 발생할 수 있다. 따라서 미세조정은 모델이 사용자가 실제로 다루는 도메인과 언어에 집중하도록 만드는 과정이다.
8. 훈련 구성요소와 모델 구조 선택
Sentence Transformers로 희소 모델을 훈련하거나 미세조정할 때는 모델, 데이터셋, 손실 함수, 훈련 인자, 평가기, 트레이너가 주요 구성요소가 된다. 모델은 사전학습된 SparseEncoder일 수도 있고, 다른 체크포인트나 처음부터 구성한 모델일 수도 있다. 이미 modules.json 파일이 있는 기존 희소 인코더를 추가로 미세조정한다면 내부 모듈 구성을 크게 신경 쓰지 않고 SparseEncoder로 불러오면 된다. 새로 구성할 때 대표적인 구조로는 MLMTransformer 뒤에 SpladePooling을 붙이는 SPLADE 방식이 소개되며, BERT, RoBERTa, DistilBERT, ModernBERT 같은 masked language modeling 기반 모델을 사용할 수 있다. 또한 fill-mask 모델을 SparseEncoder에 직접 넘기면 기본적으로 MLMTransformer와 SpladePooling 조합이 만들어지는 단축 방식도 제시된다. 마지막으로 inference-free SPLADE는 Router를 사용해 쿼리와 문서에 다른 모듈을 적용하며, 문서는 일반 SPLADE 구조를 쓰고 쿼리는 사전 계산된 토큰 점수를 반환하는 SparseStaticEmbedding을 사용하는 방식으로 설명되지만, 제공된 원문은 이 부분에서 끝난다.
🧾 핵심 주장 / 시사점
- 희소 임베딩의 가장 큰 장점은 검색 성능뿐 아니라 디코딩과 교집합 분석을 통해 ‘왜 이 문서가 매칭됐는지’를 사람이 추적할 수 있다는 점이다.
- 쿼리·문서 확장은 동의어와 어휘 불일치를 해결하지만, 날짜나 고유한 조건처럼 정확성이 중요한 질의에서는 원치 않는 의미 확장을 만들 수 있으므로 주의가 필요하다.
- 미세조정의 핵심 가치는 모델을 더 크게 만드는 데 있지 않고, 일반 모델이 놓치는 도메인별 용어·기업명·기술명·언어적 맥락을 검색 표현에 반영하도록 맞추는 데 있다.
✅ 액션 아이템
- Sentence Transformers의 SparseEncoder를 검색·하이브리드·재랭킹 파이프라인에 결합해 밀집 임베딩과 역할 분기를 명확히 정의한다.
- SPLADE 희소 벡터의 활성 토큰 기반 기여도를 추출해 동의어·철자오류 대응력과 원치 않는 확장 증가를 동일 질의군에서 비교해 반영한다.
- 도메인·언어 전문 용어 성능을 높이기 위해 모델·데이터셋·손실함수·훈련 인자·평가기를 함께 묶은 미세조정 실험 조건을 수립한다.
❓ 열린 질문
- 일반 단어는 잘 처리하던 SPLADE 확장이 실제 검색 정확도를 높이는지, 정량 지표로는 어떤 항목을 우선 비교할 것인가?
- 희소 임베딩의 활성 차원이 3만 차원 이상일 때 재랭킹 단계까지 포함한 처리에서 어떤 점이 병목으로 작용해 성능을 떨어뜨리는가?
- 도메인 적응 상황에서 표준 SPLADE와 inference-free SPLADE 중 전문 용어 반영은 어느 구조가 과도한 확장 없이 안정적인가?