임베딩 모델의 개념

임베딩 모델은 텍스트와 같은 입력 데이터를 의미적 의미를 담은 벡터 표현(임베딩)으로 변환하는 모델입니다. 이 벡터 표현을 사용하면 원시 텍스트와 달리 수학적 연산이 가능해져 검색, 클러스터링, 분류 등 다양한 작업에 활용할 수 있는 유사도 점수를 얻을 수 있습니다.

  • 밀집 임베딩 모델 (Dense Embedding Models): 일반적으로 사용되는 모델로, 대부분의 값이 0이 아닌 저차원(예: 384, 768 차원) 벡터를 생성합니다.
  • 희소 임베딩 모델 (Sparse Embedding Models): 대부분의 값이 0인 고차원(예: 30,000+ 차원) 벡터를 생성합니다. 활성화된(0이 아닌) 각 차원은 모델 어휘의 특정 토큰에 해당하므로 해석이 용이합니다.

B) SPLADE: 최첨단 희소 임베딩 모델

SPLADE는 대표적인 희소 임베딩 모델입니다. 이 모델은 입력 문장을 고차원 희소 벡터로 변환하며, decode 메서드를 통해 임베딩에 가장 큰 영향을 미친 토큰들을 확인할 수 있어 해석 가능성이 높습니다. 예를 들어, 두 임베딩 간의 교집합을 계산하여 왜 두 텍스트가 유사하다고 판단되었는지 파악할 수 있습니다.

C) 쿼리 및 문서 확장 (Query/Document Expansion)

희소 임베딩 모델의 핵심 기능 중 하나는 쿼리/문서 확장입니다. 기존의 BM25와 같은 어휘 기반 검색 방식이 텍스트에 있는 정확한 토큰만 일치시키는 반면, 희소 모델은 의미적으로 관련된 용어를 자동으로 확장합니다.

  • 예시: “오늘 날씨가 정말 좋아요(The weather is lovely today)“라는 문장은 원문에는 없는 “아름다운(beautiful)”, “시원한(cool)”, “예쁜(pretty)” 등의 단어로 확장될 수 있습니다.

이 기능 덕분에 정확한 토큰이 일치하지 않아도 의미적으로 관련된 내용을 찾을 수 있어 동의어나 철자 오류 문제를 해결하고, 어휘 불일치 문제를 극복하는 데 도움이 됩니다. 하지만 의도치 않은 단어(예: “화요일 날씨” 쿼리가 “월요일”, “수요일”로 확장되는 경우)로 확장될 위험도 존재합니다.

D) 희소 임베딩 모델을 사용하는 이유

희소 임베딩 모델은 기존의 어휘 기반 검색과 밀집 임베딩 모델 사이에서 다음과 같은 장점을 가집니다.

  • 하이브리드 잠재력: 어휘적 일치가 중요한 검색에서 어려움을 겪을 수 있는 밀집 모델과 매우 효과적으로 결합될 수 있습니다.
  • 해석 가능성: 어떤 토큰이 검색 결과에 기여했는지 정확히 확인할 수 있습니다.
  • 성능: 많은 검색 작업에서 밀집 모델과 비슷하거나 더 나은 성능을 보입니다.

D.1) Dense Embedding과 어떻게 다른가요?

Sparse Embedding과 Dense Embedding은 서로 명확하게 다른 목표와 특성을 가지고 있으며, 상호 보완적으로 활용될 수 있습니다.

Sparse Embedding(예: SPLADE)은 어휘적(Lexical) 매칭을 강화하는 데 중점을 둡니다. 언어 모델을 통해 각 단어의 중요도를 학습하고, 해당 단어에 가중치를 부여하여 표현합니다. 이 방식은 수만 차원의 고차원 벡터를 사용하며, 대부분의 값이 0인 희소(sparse) 형태를 띱니다. 이러한 구조 덕분에 어떤 단어가 검색 결과에 영향을 주었는지 명확하게 파악할 수 있어 해석 가능성이 높습니다. 특히 정확한 키워드 매칭이나 관련 용어 탐색에 매우 효과적입니다. 반면, 완전히 새로운 개념이나 문맥을 추론하는 능력은 상대적으로 떨어질 수 있습니다.

반대로 Dense Embedding(예: SBERT)은 의미적·개념적(Semantic) 매칭을 목표로 합니다. 문장이나 문서 전체의 의미를 하나의 저차원 벡터로 압축하여 표현하고, 대부분의 차원이 0이 아닌 값을 가집니다. 이 방식은 키워드가 다르더라도 의미적으로 유사한 내용을 찾아내는 데 강점을 보입니다. 하지만 각 차원이 구체적인 의미를 나타내지 않으므로 해석 가능성은 낮고(일종의 블랙박스), 특정 키워드의 중요성을 간과할 가능성이 있습니다.

결국 두 방식은 각각 어휘적 정확성과 의미적 유연성이라는 장단점을 가지며, 상황에 따라 적절히 선택하거나 함께 사용할 수 있습니다.

D.1.1) 미세조정(Finetuning)의 필요성

대부분의 기성 희소 임베딩 모델은 일반적인 동의어(예: “grocery”를 “supermarket”으로 확장)는 잘 인식하지만, 특정 도메인의 전문 용어는 인식하지 못하는 경우가 많습니다.

  • 예시: 의학 용어인 “cephalalgia(두통)“를 일반인들이 사용하는 “headache(두통)“로 확장하지 못할 수 있습니다. 또한 “Java”가 프로그래밍 언어라거나, “NVIDIA”가 그래픽 카드 회사라는 사실을 인식하지 못할 수도 있습니다.

미세조정을 통해 모델이 특정 도메인이나 언어에 집중하도록 학습시켜 이러한 문제를 해결할 수 있습니다.

D.1.2) 모델 학습의 구성 요소

희소 임베딩 모델을 학습시키기 위해서는 다음 여섯 가지 요소가 필요합니다.

  1. 모델: 학습시킬 희소 인코더 모델 또는 기반 모델.
  2. 데이터셋: 학습 및 평가에 사용될 데이터.
  3. 손실 함수: 모델의 성능을 정량화하고 최적화 과정을 안내하는 함수.
  4. 학습 인자 (선택 사항): 학습 성능 및 추적/디버깅에 영향을 미치는 매개변수.
  5. 평가기 (선택 사항): 학습 전후 또는 학습 중에 모델을 평가하는 도구.
  6. 트레이너: 모델, 데이터셋, 손실 함수 등 모든 구성 요소를 결합하여 학습을 실행하는 주체.

D.1.3) 주요 모델 아키텍처

어떤 아키텍처를 선택할지 확실하지 않다면 다음 가이드를 따를 수 있습니다.

  • 기존의 밀집 임베딩 모델을 희소화하고 싶다면 CSR을 사용합니다.
  • 성능 저하를 감수하더라도 쿼리 추론 속도를 즉각적으로 만들고 싶다면 Inference-free SPLADE를 사용합니다.
  • 그 외의 경우에는 SPLADE를 사용합니다.

D.1.3.1) 아키텍처 상세 설명

  • SPLADE: MLMTransformer와 SpladePooling 모듈로 구성됩니다. 어휘 크기와 동일한 크기의 희소 임베딩을 생성하여 해석이 용이합니다.
  • Inference-free SPLADE: 쿼리와 문서에 각기 다른 모듈을 사용하는 Router를 활용합니다. 쿼리 처리 속도가 매우 빠르다는 장점이 있어 쿼리 지연 시간이 중요한 검색 애플리케이션에 유용합니다.
  • Contrastive Sparse Representation (CSR): 밀집 임베딩 모델 위에 SparseAutoEncoder 모듈을 추가하는 방식입니다. SPLADE와 달리 임베딩이 어휘와 직접적으로 매핑되지 않아 해석이 어렵지만, 기존의 고차원 밀집 모델을 효과적으로 희소화할 수 있습니다.

D.1.4) 데이터셋 형식의 중요성

학습에 사용할 데이터셋의 형식은 선택한 손실 함수와 반드시 일치해야 합니다.

  1. 손실 함수가 레이블을 요구하는 경우, 데이터셋에는 “label” 또는 “score” 라는 이름의 열이 있어야 합니다.
  2. 레이블 열을 제외한 나머지 열들은 입력으로 간주되며, 이 열들의 개수는 손실 함수가 요구하는 입력 개수와 일치해야 합니다. 열의 이름은 중요하지 않지만 순서는 매우 중요합니다. 예를 들어, (기준, 긍정, 부정) 쌍을 입력으로 받는 손실 함수를 사용한다면 데이터셋의 첫 번째, 두 번째, 세 번째 열이 각각 기준, 긍정, 부정 텍스트에 해당해야 합니다.

D.1.5) 손실 함수

SparseEncoder를 학습시키려면 SpladeLoss 또는 CSRLoss와 같은 래퍼(wrapper) 손실 함수가 필요합니다. 이들은 주 손실 함수 위에 희소성 정규화를 추가하는 역할을 합니다.

D.1.6) 학습 팁

  • 희소 인코더 모델은 평가 점수뿐만 아니라 임베딩의 희소성도 함께 평가해야 합니다. 희소성이 낮으면 저장 비용이 크고 검색 속도가 느려지기 때문입니다.
  • 성능이 좋은 희소 인코더 모델들은 주로 더 강력한 교사 모델(예: CrossEncoder)로부터 증류(distillation)하는 방식으로 학습됩니다. 이는 직접 텍스트 쌍으로 학습하는 것보다 더 효과적인 결과를 낳습니다.

D.1.7) 벡터 데이터베이스 연동

학습된 희소 임베딩 모델을 실제 환경에서 효과적으로 사용하려면 벡터 데이터베이스가 필수적입니다. Qdrant, OpenSearch, Elasticsearch와 같은 데이터베이스는 희소 임베딩을 대규모로 저장, 인덱싱 및 검색하기 위한 인프라를 제공합니다.