AI 탐구노트

Model2Vec - Sentence Transformer 모델을 작고 빠른 정적 임베딩 모델로 변환하는 기술 본문

AI 기술

Model2Vec - Sentence Transformer 모델을 작고 빠른 정적 임베딩 모델로 변환하는 기술

42morrow 2025. 5. 26. 12:04

Model2Vec

 

💡개요

Model2Vec는 Minish Lab에서 개발한 기술로, Sentence Transformer 모델을 작고 빠른 정적 임베딩 모델로 변환하는 것을 목표로 합니다. 이 기술은 Sentence Transformer 모델에서 정적 임베딩(static embeddings)을 추출하여 빠르고 효율적인 자연어 처리(NLP)를 가능하게 하며, 특히 자원이 제한된 환경이나 실시간 성능이 중요한 애플리케이션에 적합합니다. 기존의 Sentence Transformer가 문장을 인코딩할 때 복잡한 순방향 패스(forward pass)를 요구하는 반면, Model2Vec는 토큰화 + 룩업 + 풀링 방식으로 문장 임베딩을 생성해 속도를 크게 향상시켰습니다. 

  • 핵심 아이디어 : Sentence Transformer의 어휘(약 32K 토큰)에 대한 임베딩을 룩업 테이블에 저장하고, 문장을 처리할 때 토큰 임베딩을 조회한 뒤 풀링하여 문장 임베딩을 생성
  • 비문맥적 임베딩 : 토큰 임베딩은 문맥에 의존하지 않으며, PCA(주성분 분석)를 통해 차원을 축소해 성능을 최적화
  • 장점 : 속도가 100~500배 빠르며, 기존 정적 임베딩(glove, fasttext 등)보다 우수한 성능을 제공

 

🔧 작동 원리

Model2Vec는 다음과 같은 세 단계로 구성됩니다.

  1. 토큰 임베딩 추출 : Sentence Transformer 모델을 사용하여 전체 어휘(약 32,000개의 토큰)에 대한 임베딩을 생성합니다.
  2. 차원 축소 (PCA) : 생성된 임베딩의 차원을 주성분 분석(PCA: Principal Component Analysis)를 통해 축소하여, 공간을 정규화하고 불필요한 정보를 제거합니다.
  3. 가중치 적용 (Zipf/SIF) : 빈도가 높은 일반적인 단어의 영향을 줄이기 위해 Zipf 또는 SIF(Smooth Inverse Frequency) 가중치를 적용하여 임베딩을 조정합니다.

이러한 과정을 통해 생성된 임베딩은 문맥에 따라 변화하지 않는 정적 임베딩이지만, 실제 응용에서는 충분한 성능을 발휘하게 됩니다. 추론 시에는 문장에 포함된 토큰 임베딩의 평균을 계산해 문장 임베딩을 생성합니다.

 

 

🔆 주요 특징 및 장점

  • 작은 크기 : 모델 크기를 최대 50배까지 줄여, 예를 들어 120MB 모델을 약 8~30MB로 축소합니다.
  • 고성능 : Model2Vec 모델은 GloVe, BPEmb 같은 기존 정적 임베딩 모델을 큰 차이로 능가하며, MTEB 벤치마크에서 평균 51.66 점(potion-base-32M 기준)을 달성합니다. 이는 all-MiniLM-L6-v2 모델의 92.11% 성능에 해당합니다.
  • 빠른 추론 : CPU에서 원래 모델 대비 최대 500배 빠른 추론 속도를 제공합니다.
  • 데이터 없는 증류 : 별도의 학습 데이터 없이 30초만에 CPU에서 모델을 증류할 수 있습니다. 
  • 경량 의존성 : 기본 패키지는 numpy에만 주요 의존성이 있습니다. 
  • 간편한 통합 : Sentence Transformers, LangChain, Milvus 등 다양한 라이브러리와 쉽게 통합할 수 있습니다.
  • 다양한 용도 : 텍스트 분류, 검색, 클러스터링, RAG 시스템 구축 등 다양한 NLP 작업에 활용할 수 있습니다.

 

⚗️ 증류 및 학습

  • 증류 과정 : 어휘를 Sentence Transformer에 입력하여 정적 임베딩을 생성하고, PCA와 SIF 가중치를 적용합니다. 최신 POTION 모델은 Tokenlearn을 사용해 사전 학습된 모델로, 추가로 대규모 말뭉치(C4)를 활용해 성능을 향상시킵니다.
  • 파인튜닝 : StaticModelForClassification을 통해 단일 및 다중 레이블 분류 작업을 지원하며, Scikit-learn 및 PyTorch와 호환됩니다.
  • 향상된 기법 : 최신 업데이트에서 평균 풀링, 정규화, SIF 가중치로 전환하며 성능을 개선했습니다. 예를 들어, 정규화를 활성화하면 MTEB 점수가 47.40에서 47.79로 향상됩니다.

🛠️ 사용 방법

 

1️⃣ 설치

pip install model2vec

 

2️⃣ 사전 학습 모델 사용 

 

Model2Vec는 Python 기반으로 사용이 간단합니다. 다음은 기본 사용 예시입니다.

from model2vec import StaticModel

# potion-base-8M 모델 로드
model = StaticModel.from_pretrained("minishlab/potion-base-8M")

# 문장 임베딩 생성
embeddings = model.encode(["이것은 예시 문장입니다"])

 

또한, Sentence Transformer에서 직접 Model2Vec 모델을 증류할 수 있습니다.

from model2vec.distill import distill

# BAAI/bge-base-en-v1.5 모델 증류
m2v_model = distill(model_name="BAAI/bge-base-en-v1.5", pca_dims=256)
m2v_model.save_pretrained("m2v_model")

 

 

 

📈 성능 비교

 

Model2Vec로 생성된 모델은 기존의 정적 임베딩 방법(GloVe, word2vec 등)보다 우수한 성능을 보이며, 일부 작업에서는 원래의 Sentence Transformer 모델과 유사한 수준의 성능을 유지합니다. 특히, potion-base-32M 모델은 다양한 벤치마크에서 뛰어난 결과를 보여주고 있습니다.

 

​아래의 예시는 MTEB 스코어를 비교한 것입니다. 스코어 최상단을 차지하는 초록색 표시 모델들은 sentence-transformer 기반 모델들로 성능은 뛰어나지만 초당 처리속도가 엄청나게 낮은 것을 볼 수 있습니다. 그에 반해 보라색으로 표시된 potion-base-32M (Model2Vec 적용)은 정적 임베딩 모델 가운데서는 가장 성능이 뛰어나면서도 동시에 월등한 초당 샘플링 수를 보여주고 있습니다. 

 

MTEB (Massive Text Embedding Benchmark)
텍스트 임베딩 모델의 성능을 평가하기 위한 포괄적인 벤치마크입니다. 다양한 NLP 작업과 데이터셋을 통해 모델의 임베딩 품질을 비교하며, 분류, 클러스터링, 검색, 재순위화, 쌍 분류 등 여러 태스크를 포함합니다. MTEB는 모델의 다목적성과 실제 응용에서의 효과를 측정하는 표준 도구이기도 합니다. 

 

 

그림 : 평균 MTEB 스코어 비교 (원 크기는 모델 사이즈를 의미)

 


 

Model2Vec는 리소스가 제한된 환경에서도 고성능 NLP 작업을 가능하게 하는 혁신적인 도구입니다. Sentence Transformer의 고성능을 유지하면서도 초고속 처리와 소형 모델 크기를 제공해, 대규모 데이터 처리와 실시간 애플리케이션에 이상적입니다. 게다가 개발사인 Minish Lab은 Model2Vec과 관련된 모든 자료를 오픈소스로 공개했죠. 연구자와 개발자 커뮤니티에는 큰 도움이 될 것으로 생각됩니다. 

 


🔗 참고 자료