VDR 성능 역전
Training and Finetuning Multimodal Embedding & Reranker Models with Sentence Transformers
핵심 내용
Sentence Transformers로 멀티모달 임베딩과 reranker를 직접 학습하는 방법을 정리한다.
자세히 보기
Sentence Transformers의 멀티모달 학습 파이프라인을 텍스트와 같은 방식으로 확장해, 이미지·비디오·오디오까지 다루는 임베딩과 reranker 모델을 직접 finetune하는 흐름을 설명한다.
핵심 예시는 Qwen/Qwen3-VL-Embedding-2B를 Visual Document Retrieval(VDR)에 맞춰 튜닝한 사례다. 공개된 문서-질의 데이터셋에서 53,512개 영어 샘플을 사용하고, 질의-정답 이미지-하드 네거티브 구조로 학습해 NDCG@10 0.888 → 0.947로 끌어올렸다. 저자는 이 결과가 테스트한 기존 VDR 멀티모달 모델들을 모두 앞섰고, 일부는 4배 큰 모델보다도 성능이 높았다고 밝힌다.
학습 구성은 텍스트 모델과 동일하게
- Model: 기존 멀티모달 embedding model 또는 VLM checkpoint
- Dataset: 이미지가 포함된 입력과 평가 세트
- Loss Function: retrieval용 손실
- Training Arguments: 배치, 정밀도, 로깅/저장 주기
- Evaluator / Trainer: 평가와 학습 실행
으로 정리된다.
모델 측면에서는 두 가지 접근을 제시한다.
SentenceTransformer("Qwen/Qwen3-VL-Embedding-2B")처럼 기존 멀티모달 embedding model을 불러와processor_kwargs와model_kwargs로 해상도,bfloat16,flash_attention_2등을 조정SentenceTransformer("Qwen/Qwen3-VL-2B")처럼 새 VLM checkpoint에서 시작해 Sentence Transformers가 모달리티를 자동 인식하도록 구성
또 다른 방법으로는 Router를 써서 텍스트 encoder와 이미지 encoder를 분리하고, Dense projection으로 공통 임베딩 공간에 맞추는 방식도 소개한다. 이 방식은 가볍고 특화된 encoder를 조합할 때 유용하지만, 학습을 통해 공간 정렬이 필요하다.
데이터는 tomaarsen/llamaindex-vdr-en-train-preprocessed를 사용한다. 원본은 약 50만 개 규모의 다국어 query-image 샘플이며, 이 글에서는 영어 subset을 정제해 바로 학습 가능한 형태로 만들었다. 학습 입력은 query, image, negative_0를 사용해 (anchor, positive, hard negative) triplet을 구성한다.
손실 함수는 CachedMultipleNegativesRankingLoss를 사용해:
- 명시적 hard negative와
- 배치 내 다른 샘플의 positive/negative를 in-batch negative로 재활용
하도록 만든다. 여기에 MatryoshkaLoss를 감싸 2048/1536/1024/512/256/128/64처럼 여러 차원에서 성능이 유지되도록 학습한다. 덕분에 배포 시 임베딩 차원을 잘라 검색 속도와 품질의 균형을 조절할 수 있다.
훈련 설정에서는 per_device_train_batch_size=64, bf16=True, BatchSamplers.NO_DUPLICATES를 사용해 대형 VLM을 효율적으로 학습하고, mini_batch_size=1로 메모리 부담을 낮춘다. eval_steps, save_steps, logging_steps를 epoch 비율로 지정해 진행 상황을 주기적으로 확인하는 방식도 강조한다.
이 한국어 요약은 AI가 자동으로 만들었습니다. 원문의 주장과 맥락은 원문에서 확인해 주세요. 저작권은 원저작자에게 있습니다.