UEmbed: 디코더 전용 모델에서 희소 검색과 밀집 검색을 통합한 멀티모달 임베딩 연구

UEmbed 소개

검색창에 단어를 입력했을 때 검색 엔진이 하는 일은 크게 두 갈래로 나뉩니다. 하나는 입력한 단어가 문서에 실제로 들어 있는지 세는 일이고, 다른 하나는 단어가 하나도 겹치지 않아도 뜻이 통하는 문서를 끌어오는 일입니다. UEmbed 는 이 두 가지를 서로 다른 모델에 맡기는 대신, 디코더 전용(Decoder-only) 멀티모달 언어 모델 하나가 단 한 번의 순전파에서 희소 어휘 벡터와 밀집 벡터를 함께 내놓게 만든 임베딩 모델입니다. 중국과학원 자동화연구소(CASIA)와 Alibaba Group, 중국과학원대학교(UCAS), Yale University 연구진이 발표했고, 공개 데이터만으로 학습한 2B와 4B, 9B 세 가지 크기의 가중치를 함께 공개했습니다.

결과부터 짚어보면 UEmbed-9B는 멀티모달 임베딩 벤치마크 MMEB-v2에서 밀집 모드 71.8 점, 희소 모드 71.0 점을 기록했습니다. 두 모드의 차이가 1.0 점 안쪽이고, 희소 모드만으로도 기존의 여러 밀집 전용 모델을 앞섭니다. 저자들이 아는 한 MMEB-v2에서 희소 멀티모달 검색 결과가 보고된 것은 이번이 처음입니다.

어휘 매칭에서 학습된 희소 검색까지

정보 검색(Information Retrieval, IR)의 오래된 주력은 BM25 같은 어휘 기반 희소 검색(Sparse Retrieval)입니다. 문서를 어휘 사전 크기의 벡터로 두고 등장한 단어의 자리에만 가중치를 채우는 방식이라, 역색인(Inverted Index)으로 대규모 말뭉치를 빠르게 훑을 수 있고 어떤 단어 때문에 이 문서가 걸렸는지도 그대로 보입니다. 문제는 정확 일치에 의존한다는 점입니다. 질의와 문서가 같은 개념을 다른 단어로 적으면 그 문서는 아예 후보에 오르지 못합니다.

학습된 희소 검색(Learned Sparse Retrieval, LSR)은 이 빈틈을 신경망으로 메웁니다. 대표적인 SPLADE 계열은 각 토큰의 은닉 상태를 어휘 공간에 투영한 뒤 시퀀스 전체에 대해 최댓값 풀링(Max Pooling)을 취해, 문서에 없는 단어까지 확장해 가중치를 부여합니다. 덕분에 고전적인 단어 가중치 기법보다 검색 품질이 크게 올라갔고, 강력한 밀집 검색(Dense Retrieval) 모델과 겨룰 수 있게 되었습니다.

미리 짚어두면, 밀집과 희소를 한 모델에서 함께 학습하는 시도 자체는 이 논문이 처음이 아닙니다. M3-Embedding을 비롯해 두 표현을 공동 최적화한 선행 연구가 있습니다. UEmbed가 다른 지점은 그 통합을 인과 어텐션 아래에서 그대로 해낸다는 데 있습니다. 기존 방식은 디코더를 양방향처럼 쓰도록 개조하거나 텍스트 전용에 머물렀지만, UEmbed는 백본을 손대지 않은 채 멀티모달까지 함께 가져갑니다.

기존 LSR이 넘지 못한 세 가지 한계

연구팀은 LSR이 지금까지 넘지 못한 한계를 세 가지로 정리합니다.

첫 번째는 구조적 제약(Architectural Constraint) 입니다. 지금의 LSR은 대부분 BERT 같은 인코더 계열의 양방향(Bidirectional) 구조 위에 올라가 있습니다. 디코더 전용 모델은 인과적 마스킹(Causal Masking) 때문에 각 위치가 뒤쪽 토큰을 볼 수 없어서, 전역 문맥을 담아야 하는 희소 표현에 기존 풀링 전략을 그대로 재사용할 수 없습니다. 그래서 LLM을 희소 검색에 쓰려면 인과적 백본(Backbone)을 양방향으로 바꾸거나 별도의 학습 커리큘럼을 도입해야 했는데, 둘 다 학습 비용이 추가로 들고 vLLM 같은 인과 모델 전용 서빙 스택과의 호환성이 깨집니다.

두 번째는 모달리티의 제한 입니다. 텍스트 전용 BERT 구조에 기대는 접근이 많다 보니 LSR 대부분이 텍스트에 머물러 있습니다. STAIR나 VisualSparta처럼 몇 안 되는 멀티모달 방식도 단일 백본에서 희소 표현을 직접 뽑는 대신 보조 크로스모달 모듈이나 별도 모델을 덧붙여 비텍스트 모달리티를 해석하는 형태라, 특정 모달리티 쌍에 묶이고 새로운 모달리티로 넓히기 어렵습니다.

세 번째는 실용적 이점이 검증되지 않았다 는 점입니다. 기존 희소 검색 연구는 COCO 같은 전통적 벤치마크의 정확도 위주로 평가되어, 정확도 바깥의 실전 장점(서빙 비용, 색인 호환성, 에이전트 워크플로우에서의 쓸모)은 거의 다뤄지지 않았습니다.

UEmbed의 발상 전환: 어휘를 나누어 병목을 우회하기

인과 모델에서 희소 표현을 만들 때 가장 큰 걸림돌은 정보 병목입니다. EOS나 CLS 같은 토큰 하나의 은닉 상태를 |V| 차원의 거대한 어휘 공간으로 투영하려 하면, 그 한 벡터가 담을 수 있는 표현력이 어휘 전체를 감당하지 못합니다.

UEmbed는 여기서 방향을 바꿉니다. 토큰 하나에 어휘 전체를 맡기는 대신, 학습 가능한 특수 토큰(Special Token)을 16개 붙이고 어휘를 겹치지 않는 16개 부분집합으로 쪼갠 뒤 각 특수 토큰에 자기 몫의 어휘 조각만 담당시킵니다. 인과 어텐션 아래에서도 문장 끝에 붙은 특수 토큰은 앞의 모든 토큰을 볼 수 있으므로 입력 전체를 요약할 수 있고, 각자 맡은 부분집합에 대해서만 가중치를 예측한 다음 16개 조각을 이어 붙이면 완전한 희소 벡터가 나옵니다. 밀집 임베딩은 특수 토큰 바로 앞에 있는 EOS 토큰의 은닉 상태에서 가져옵니다.

위 그림의 (b)를 보면 이 희소 표현이 단순한 단어 통계가 아니라는 것을 알 수 있습니다. 축구 경기 사진 하나에서 모델은 soccer, Messi, 阿根廷(아르헨티나), 南美(남미) 같은 어휘 토큰을 활성화합니다. 이미지를 넣었는데 사람이 읽을 수 있는 단어들이 튀어나오는 셈이고, 그 단어 목록이 그대로 역색인에 들어갑니다.

UEmbed의 동작 방식

인과 어텐션이 SPLADE 방식을 막는 지점

먼저 기존 방식을 수식으로 확인해 보겠습니다. 대조 학습의 기본 손실인 InfoNCE는 질의 q 와 정답 문서 d^{+} , 배치 안의 오답 문서 집합 \mathcal{N} 에 대해 정답 쌍의 유사도를 높이는 방향으로 학습합니다.

\mathcal{L}_{\text{InfoNCE}} = -\log \frac{\exp\left(\text{sim}(q, d^{+})/\tau\right)}{\sum_{d \in \{d^{+}\} \cup \mathcal{N}} \exp\left(\text{sim}(q, d)/\tau\right)}

여기서 \text{sim}(\cdot,\cdot) 은 유사도 함수이고 \tau 는 온도(Temperature) 하이퍼파라미터입니다. 밀집 검색은 코사인 유사도를, 희소 검색은 내적을 씁니다.

SPLADE 계열이 희소 가중치를 만드는 방식은 다음과 같습니다.

w_{t} = \max_{i=1}^{L} \log\left(1 + \text{ReLU}(\boldsymbol{h}_{i}^{\top} \boldsymbol{e}_{t})\right)

\boldsymbol{h}_{i}i 번째 입력 토큰의 은닉 상태, \boldsymbol{e}_{t} 는 어휘 항목 t 의 임베딩, L 은 시퀀스 길이입니다. 시퀀스의 모든 위치에 대해 최댓값을 취하는 구조라는 점이 중요합니다. 양방향 인코더에서는 모든 위치가 문장 전체를 보고 있으므로 어느 위치의 은닉 상태를 뽑아도 전역 문맥이 담겨 있지만, 인과 마스킹이 걸린 디코더에서는 앞쪽 토큰일수록 뒤를 보지 못한 채로 계산됩니다. 그 상태들을 최댓값 풀링으로 합치면 문맥이 반쯤 잘린 표현들이 섞이게 됩니다.

어휘 압축: 248,320개에서 184,016개로

특수 토큰에 어휘를 나눠 주기 전에 연구팀은 어휘 자체를 정리합니다. LLM 토크나이저에는 공백이나 악센트 차이만 있는 중복 토큰이 많이 들어 있습니다. NLTK를 사용해 악센트를 제거하고 소문자로 통일한 뒤 공백을 축약하면, HelloHELLO, héllò가 모두 hello 하나로 합쳐집니다. 점수를 계산할 때는 합쳐진 항목들 중 최대 가중치를 남깁니다. 이 압축으로 어휘 크기가 248,320개에서 184,016개로 줄어듭니다.

분할된 희소 헤드: 16개 특수 토큰이 나눠 맡는 어휘

길이 L 의 입력 시퀀스 끝에 학습 가능한 특수 토큰 \langle s_1 \rangle, \dots, \langle s_N \rangle 을 붙입니다. 기본값은 N = 16 입니다. 각 특수 토큰은 앞의 모든 토큰에 어텐션을 걸 수 있어서 입력 전체를 요약할 수 있습니다.

여기서 어휘를 어떻게 나눌지가 설계의 핵심입니다. 연구팀은 k-평균 군집화(k-means Clustering)로 어휘 V 를 크기가 비슷한 N 개의 서로소 부분집합 V_1, \dots, V_N 으로 분할합니다. 의미가 가까운 토큰끼리 같은 조각에 모이게 하려는 의도이고, 이렇게 하면 각 특수 토큰이 서로 다른 의미 방향을 담당하게 됩니다.

각 특수 토큰 \langle s_k \rangle 의 최종 은닉 상태 \boldsymbol{h}_{s_k} 는 자기 부분집합 V_k 전용 희소 헤드를 거쳐 가중치로 바뀝니다.

w_{t}^{(k)} = \log\left(1 + \text{ReLU}(\boldsymbol{W}_{t}^{(k)\top} \boldsymbol{h}_{s_{k}} + b_{t}^{(k)})\right)

\boldsymbol{W}_{t}^{(k)}b_{t}^{(k)}k 번째 희소 헤드에서 어휘 항목 t 에 대응하는 가중치 벡터와 편향입니다. 마지막으로 부분집합별 벡터를 이어 붙여 완전한 희소 표현을 만듭니다.

\boldsymbol{w} = \left[w_{t}^{(1)}\right]_{t \in V_{1}} \oplus \cdots \oplus \left[w_{t}^{(N)}\right]_{t \in V_{N}}

\oplus 는 연결(Concatenation)을 뜻합니다. 이 분할 투영이 앞서 짚은 단일 토큰 병목을 우회하는 장치입니다. 토큰 하나가 184,016차원 전체를 감당하는 대신 16개 토큰이 대략 11,500차원씩 나눠 맡습니다.

밀집 표현과 통합 학습 목표

밀집 검색에는 특수 토큰 바로 앞에 오는 EOS 토큰의 은닉 상태 \boldsymbol{d} \in \mathbb{R}^{D} 를 씁니다. 설계상 한 가지 실용적인 이점이 여기서 나옵니다. 밀집 검색만 필요한 상황이라면 특수 토큰을 아예 붙이지 않아도 되고, 그러면 추가 순전파 연산이 전혀 발생하지 않습니다.

학습은 두 검색 모드를 한 손실로 묶어 진행합니다.

\mathcal{L} = \mathcal{L}_{\text{InfoNCE}}^{\text{dense}} + \lambda \mathcal{L}_{\text{InfoNCE}}^{\text{sparse}} + \alpha_{q} \mathcal{L}_{\text{FLOPS}}^{q} + \alpha_{d} \mathcal{L}_{\text{FLOPS}}^{d}

밀집 항은 코사인 유사도로, 희소 항은 내적으로 계산합니다. 뒤의 두 항은 질의와 문서 각각에 대한 FLOPS 정규화로, 평균 항목 가중치의 제곱에 벌점을 매겨 벡터를 희소하게 유지합니다. 정규화가 없으면 모델이 어휘 전체에 조금씩 가중치를 뿌려 역색인의 이점을 잃게 되기 때문입니다.

학습 데이터와 하드 네거티브

학습 데이터는 전부 공개 데이터셋에서 가져온 394만 건입니다. 세 갈래로 구성됩니다. Echo-Embedding 학습 데이터가 넓은 도메인의 질의와 문서 쌍을, MLDR이 긴 문서 검색 데이터를, MMEB 학습 세트가 다양한 시각 및 교차 모달 작업 데이터를 담당합니다.

텍스트 쪽에는 NLI와 DuReader, ELI5, FEVER, HotpotQA, MIRACL, MrTyDi, MSMARCO, Natural Questions, Quora Duplicates, SQuAD, T2Ranking, TriviaQA, MLDR이 들어갑니다. 멀티모달 쪽은 영상 검색에 LLaVA-Hound의 VideoCaption300k와 VideoQA240k를, 시각 문서 검색에 ColPali train(118k)과 VisRAG-Synthetic(239k), VisRAG-IID(123k)를, 이미지 검색에 MMEB 학습 데이터셋(CIRR, NIGHTS, MSCOCO, ImageNet-1K, ChartQA, DocVQA 등)을 씁니다. 영상은 8프레임을 샘플링하고 프레임당 최대 200토큰을 배정합니다.

멀티모달 데이터셋에는 학습에 필요한 오답 문서가 붙어 있지 않다는 문제가 있습니다. 연구팀은 Qwen3-VL-Embedding-8B를 교사 모델로 삼아, 각 질의마다 말뭉치에서 가장 유사하면서 정답이 아닌 문서를 상위 k 개 뽑아 하드 네거티브(Hard Negative)로 사용했습니다.

학습 자체는 LoRA를 어텐션과 MLP 투영에 적용하고 시각 인코더는 동결한 상태로 진행합니다. 백본은 Qwen3.5 계열이고, 학습률은 코사인 스케줄에 최대 3 \times 10^{-5} , 워밍업 비율 0.1 입니다. 밀집 온도는 \tau = 0.03 , 희소 온도는 \tau_{s} = 32 , FLOPS 정규화 계수는 \alpha_q = \alpha_d = 1 \times 10^{-4} , 희소 손실 계수는 \lambda = 1.0 입니다. 1에폭 학습에 시드는 42로 고정했고, 2B와 4B는 A100 16장, 9B는 A100 32장을 써서 전체 배치 크기 256을 맞췄습니다.

학습 과정에서 연구팀이 발견한 흥미로운 점이 하나 있습니다. 희소 점수는 정규화되지 않은 내적이라 값의 범위가 넓어서 학습이 불안정해지기 쉬운데, 텍스트 학습 데이터를 섞으면 멀티모달 희소 모델의 학습이 눈에 띄게 안정되고 빨라집니다. 판단 근거로는 손실과 함께 최대 네거티브 격차, 평균 네거티브 격차를 함께 지켜봤습니다. 앞의 것은 한 배치 안에서 정답과 오답 사이 점수 차의 최댓값이고, 뒤의 것은 모든 정답 및 오답 쌍의 평균 점수 차입니다. 텍스트 데이터와 함께 학습하면 100스텝 안에 정답과 오답을 구분하는 희소 표현이 잡히는 반면, 이미지와 영상 등 멀티모달 데이터만으로 학습하면 500스텝 가까이 걸립니다. 멀티모달 희소 검색기를 직접 학습해보려는 경우라면, 텍스트 데이터를 안정화 장치로 섞어 두는 편이 좋다는 실용적인 지침입니다.

실험 결과와 성능 분석

실험 설정

UEmbed는 Qwen3.5 계열에서 2B, 4B, 9B 세 규모로 만들어졌고, 각 규모마다 밀집과 희소를 모두 지원하는 체크포인트 하나만 학습했습니다.

멀티모달 평가는 78개 데이터셋으로 구성된 MMEB-v2에서 진행합니다. 비교 대상은 Qwen3-VL-Embedding, RzenEmbed-V2-7B, Embed-RL, Ops-MM-Embed, UniME, GME-7B, VLM2Vec-V2이며, 이 가운데 Qwen3-VL-Embedding은 대규모 비공개 데이터로 학습한 모델입니다. 텍스트 평가는 BEIR의 9개 데이터셋에서 nDCG@10으로 측정하며, 밀집 베이스라인으로는 공정한 비교를 위해 텍스트 전용 모델을 빼고 멀티모달 임베딩 모델만 골랐습니다. 희소 베이스라인은 SPLADE-v3Echo-Mistral-SPLADE입니다.

결과를 읽기 전에 백본 세대를 함께 봐 두면 좋습니다. 논문 부록의 베이스라인 명세를 정리하면 다음과 같습니다.

모델 공개 시점 백본 검색 모드
Qwen3-VL-Embedding-8B / 2B 2026-01 Qwen3-VL 밀집
Embed-RL-4B / 2B 2026-02 Qwen3-VL 밀집
RzenEmbed-V2-7B 2025-10 Qwen2-VL 밀집
UniME-7B / 2B 2025-10 Qwen2-VL 밀집
Ops-MM-Embed-7B / 2B 2025-07 Qwen2-VL 밀집
VLM2Vec-V2-2.0B 2025-05 Qwen2-VL 밀집
GME-7B 2024-12 Qwen2-VL 밀집
SPLADE-v3 2024-03 BERT (110M) 희소
Echo-Mistral-SPLADE 2024-08 Mistral-7B 희소
UEmbed-9B / 4B / 2B 2026-08 Qwen3.5 밀집 및 희소

위 표에서 눈에 띄는 것은 백본 세대가 고르지 않다는 점입니다. UEmbed와 가장 가까이 붙는 RzenEmbed-V2-7B를 비롯해 UniME, Ops-MM-Embed, GME는 모두 한 세대 이전인 Qwen2-VL 기반이고, 텍스트 희소 베이스라인인 SPLADE-v3는 파라미터가 110M에 불과한 BERT 모델입니다. 뒤에 나오는 점수 차이의 일부는 UEmbed의 설계가 아니라 백본 세대 차이에서 올 수 있으므로, 순위표를 그대로 설계의 우열로 읽지 않는 편이 안전합니다. 뒤집어 보면 백본 세대가 가장 가까운 Embed-RL과의 비교, 그리고 백본과 데이터를 완전히 고정한 SPLADE 대조 실험(뒤의 어블레이션)이 UEmbed 설계의 기여를 판단할 근거로는 더 깨끗합니다.

멀티모달 검색: MMEB-v2

아래 표는 MMEB-v2의 세 대분류와 전체 평균을 정리한 것입니다.

모델 Image Video VisDoc All
Qwen3-VL-Embedding-8B 80.1 67.2 82.4 77.8
Qwen3-VL-Embedding-2B 75.0 61.9 79.2 73.2
RzenEmbed-V2-7B 75.9 55.7 75.5 71.1
Embed-RL-4B 71.2 53.0 74.7 68.1
Ops-MM-Embed-7B 72.7 53.8 68.7 67.1
UniME-7B 71.2 47.5 65.7 64.1
GME-7B 55.9 38.4 73.6 57.3
VLM2Vec-V2-2.0B 64.9 34.7 63.5 57.5
UEmbed-2B (밀집) 67.8 50.0 77.0 66.5
UEmbed-2B (희소) 67.0 47.7 76.7 65.5
UEmbed-4B (밀집) 71.4 57.0 78.8 70.4
UEmbed-4B (희소) 70.6 56.0 78.6 69.7
UEmbed-9B (밀집) 73.2 59.0 79.2 71.8
UEmbed-9B (희소) 72.5 57.5 79.1 71.0

위 표를 통해 두 가지를 알아볼 수 있습니다.

첫째, 공개 데이터로 학습한 모델들 사이에서 UEmbed가 앞섭니다. UEmbed-9B 밀집 모드의 71.8 점은 RzenEmbed-V2-7B의 71.1 점과 Ops-MM-Embed-7B의 67.1 점을 넘어섭니다. UEmbed-9B보다 높은 점수를 낸 것은 Qwen3-VL-Embedding 계열(77.873.2 )뿐인데, 이들은 대규모 비공개 데이터로 다단계 학습을 거쳤기 때문에 직접 비교가 어렵다고 연구팀은 밝히고 있습니다. 4B 규모에서도 UEmbed-4B가 70.4 점으로 같은 급의 Embed-RL-4B(68.1 )를 앞서고, 가장 작은 UEmbed-2B의 66.5 점은 7B급인 UniME-7B(64.1 )보다 높습니다.

둘째, 희소 모드가 밀집 모드에 거의 붙어 있습니다. 모든 규모에서 두 모드의 전체 점수 차이가 최대 1.0 점입니다. 9B 기준으로 밀집 71.8 점 대 희소 71.0 점이고, UEmbed-4B 희소 모드의 69.7 점은 밀집 전용 모델인 Ops-MM-Embed-7B의 67.1 점보다 높습니다. 특히 시각 문서(VisDoc) 작업에서는 차이가 79.2 점 대 79.1 점으로 거의 사라집니다. 반대로 영상(Video) 범주에서는 격차가 조금 더 벌어지는데, 연구팀은 영상 프레임의 정보 밀도와 시간적 변화를 평평한 희소 벡터 하나로 눌러 담을 때 용량 한계가 생기는 것으로 봅니다.

텍스트 검색: BEIR

텍스트만 놓고 봤을 때의 결과입니다. 지표는 nDCG@10입니다.

모델 ArguAna FiQA NFCorpus NQ Quora SCIDOCS SciFact COVID Touche 평균
밀집 모델
GME-7B 64.6 57.1 38.4 67.7 88.1 27.4 62.3 52.6 23.3 53.5
Qwen3-VL-Embedding-8B 45.8 47.8 39.7 64.5 86.5 24.9 79.4 84.1 26.9 55.5
UEmbed-2B 58.1 47.5 37.8 55.5 89.3 20.3 75.3 80.2 18.2 53.6
UEmbed-4B 60.0 53.4 40.5 60.9 89.2 22.5 77.0 82.7 18.1 56.0
UEmbed-9B 62.5 54.3 39.8 61.9 89.9 23.4 77.8 77.9 19.2 56.3
희소 모델
SPLADE-v3 50.9 37.4 35.7 58.6 81.4 15.8 71.0 74.8 29.3 50.5
Echo-Mistral-SPLADE 56.2 57.7 42.3 56.0 86.7 25.6 77.2 76.8 18.0 55.2
UEmbed-2B 55.7 45.1 35.9 53.4 88.2 18.0 70.8 84.8 18.7 52.3
UEmbed-4B 58.8 49.4 38.4 59.9 88.6 20.8 74.4 75.4 16.7 53.6
UEmbed-9B 58.4 51.2 38.1 59.9 88.7 20.6 74.5 82.1 23.4 55.2

밀집 설정에서 UEmbed-9B는 평균 56.3 점으로 비교 대상 중 가장 높고, UEmbed-4B가 56.0 점으로 바짝 뒤따릅니다. Qwen3-VL-Embedding-8B(55.5 )와 GME-7B(53.5 )를 모두 앞서는 수치입니다. 개별 데이터셋에서는 Quora 89.9 점(9B)과 NFCorpus 40.5 점(4B)이 눈에 띕니다.

희소 설정에서는 UEmbed-9B가 평균 55.2 점으로 텍스트 희소 검색 전문 모델인 Echo-Mistral-SPLADE와 정확히 같은 점수에 도달했습니다. 여기서 짚어둘 점은 Echo-Mistral-SPLADE가 텍스트 희소 검색 하나만 하는 모델인 반면, UEmbed는 같은 체크포인트 하나로 밀집 검색과 멀티모달 입력까지 함께 처리한다는 사실입니다. 텍스트 성능을 거의 내주지 않으면서 밀집과 멀티모달 능력을 얻은 셈입니다.

어떤 설계가 성능에 기여했는가

여기까지가 최종 모델의 성적표라면, "왜 이 방법이 작동하는가"와 "어느 설계 요소가 결정적이었는가"도 궁금해집니다. 연구팀은 2B 백본을 전체 학습 데이터에서 무작위로 뽑은 50만 건으로 학습하고 MMEB-v1에서 평가하는 방식으로 구성 요소를 하나씩 뜯어봅니다.

SPLADE 양방향 베이스라인과의 대조

가장 먼저 확인해야 할 것은 성능 향상이 UEmbed의 설계 덕분인지, 아니면 그냥 백본이 좋아서인지입니다. 연구팀은 같은 Qwen3.5 백본과 같은 학습 데이터, 같은 FLOPS 정규화를 쓰되 양방향 어텐션과 표준 SPLADE 최댓값 풀링 헤드를 적용한 베이스라인을 만들어 비교했습니다. 앞서 짚은 백본 세대 문제가 여기서는 통제되므로, 설계의 기여를 보려면 이 대조가 순위표보다 깨끗한 근거입니다. 아래 표의 점수는 MMEB-v1의 이미지 부분집합 기준입니다.

모델 CLS QA RET GRD 평균
SPLADE 베이스라인 (양방향) 55.8 57.1 62.9 80.9 61.3
UEmbed (밀집) 55.5 65.3 65.1 83.3 64.5
UEmbed (희소) 54.7 63.1 64.8 81.8 63.4

UEmbed-2B는 두 모드 모두에서 이 베이스라인을 넘습니다. 평균 기준으로 밀집이 +3.2 점(61.3 \rightarrow 64.5 ), 희소가 +2.1 점(61.3 \rightarrow 63.4 )입니다. 격차가 가장 두드러지는 곳은 이미지 QA로, 밀집 +8.2 점, 희소 +6.0 점입니다. 연구팀은 이를 표준 SPLADE 방식이 자기회귀 백본이 원래 갖고 있던 질의응답 능력을 제대로 못 살린 결과로 해석합니다. 인과적 통합 구조가 서빙 편의만 주는 것이 아니라 임베딩 품질 자체에 도움이 된다는 뜻입니다.

결합 학습은 어느 쪽에도 손해가 아닌가

여러 목표를 함께 학습할 때 흔한 함정은 목표끼리 서로를 갉아먹는 부정적 전이(Negative Transfer)입니다. 연구팀은 밀집 전용(\lambda = 0 )과 희소 전용 베이스라인을 동일 조건에서 학습해 비교했습니다.

위 그림의 (a)를 보면 결합 학습한 UEmbed가 두 단일 모드 전문가와 사실상 같은 수준입니다. 부록에 실린 시드 42 재현 실험(MMEB-v2 전체 평균)에서도 같은 경향이 나타나는데, 밀집 전용 모델이 64.9 점인 데 비해 결합 학습한 UEmbed-2B의 밀집 모드가 64.6 점이고, 희소 전용과 결합 학습의 희소 모드는 63.4 점으로 같습니다. 두 능력을 한 모델에 담는 대가로 치르는 성능 손실이 사실상 없습니다.

어휘 분할 전략

희소 헤드는 어휘를 N 개의 서로소 부분집합으로 나누는데, 어떻게 나누느냐에 따라 결과가 달라집니다. 세 가지 균등 분할 전략을 비교했습니다. 최대 거리 방식은 k-평균 군집 중 서로 가장 먼 것들을 짝지어 한 부분집합 안의 의미를 일부러 흩어 놓는 전략이고, 제안 방식은 반대로 개별 군집을 그대로 서로 다른 부분집합에 배정합니다. 점수는 앞의 표와 같은 MMEB-v1 이미지 부분집합 기준입니다.

분할 전략 CLS QA RET GRD 평균
무작위 배정 55.0 62.3 64.2 81.0 63.0
최대 거리 (Max-distance) 55.1 62.4 64.9 79.8 63.2
의미 군집화 (제안 방식) 54.7 63.1 64.8 81.8 63.4

의미가 가까운 토큰끼리 묶는 방식이 가장 좋고 무작위 배정이 가장 나쁩니다. 연구팀은 의미적으로 관련된 토큰을 한 조각에 모아 주면 각 특수 토큰이 일종의 "소프트 주제 전문가(Soft Topic Specialist)"처럼 작동하면서 제한된 표현력을 효율적으로 쓸 수 있게 된다고 설명합니다. 관련 없는 개념들을 한꺼번에 담으려 애쓰지 않아도 되기 때문입니다.

하이퍼파라미터 민감도

희소 헤드에만 있는 하이퍼파라미터 두 가지를 훑어봅니다.

희소 온도 \tau_{s} 부터 보겠습니다. 밀집 헤드의 코사인 유사도는 [-1, 1] 범위에 갇혀 있지만 희소 내적은 값의 범위가 훨씬 넓습니다. 두 모드가 같은 온도를 공유하면 희소 쪽 소프트맥스가 지나치게 뾰족해집니다. 위 그림의 (b)에서 보이듯 온도를 분리하고 희소 쪽만 크게 잡으면 밀집 성능을 해치지 않으면서 희소 성능이 올라갑니다. 기본값은 \tau_{s} = 32 이고, 단일 시드 실험에서는 \tau_{s} = 64 도 비슷한 수준을 보였습니다.

특수 토큰 개수 N 은 2, 4, 8, 16, 32로 훑었습니다. 위 그림의 (c)를 보면 N = 16 까지는 성능이 안정적이다가 N = 32 에서 뚜렷하게 떨어집니다. 부분집합이 지나치게 잘게 쪼개지고 대조 학습의 시퀀스 길이가 불어나는 것이 원인이라고 연구팀은 봅니다. 실제로 부록의 시드 42 재현 실험에서 N = 32 는 VisDoc의 VDRv2 항목이 59.3 점에서 22.3 점으로 무너지며 전체 평균을 63.4 점에서 59.9 점으로 끌어내렸습니다.

희소 표현은 실제로 무엇을 활성화하는가

숫자만으로는 희소 벡터가 정말 의미를 담고 있는지 알기 어렵습니다. 연구팀은 여러 모달리티의 입력에 대해 상위 10개 활성화 어휘 토큰을 뽑아 시각화했습니다.

결과는 꽤 구체적입니다. 마리나 베이 샌즈가 보이는 사진에서 모델은 스카이라인만 보고 Singapore를 활성화하고, 로켓 발사 영상에서는 Rocket, Altitude, Smoke와 함께 SpaceX를 짚어냅니다. 이미지나 영상을 넣었는데 사람이 그대로 읽을 수 있는 단어 목록이 나온다는 점이 밀집 벡터와 결정적으로 다른 부분이고, 이 해석 가능성은 편향 감사(Bias Auditing) 같은 작업에서도 쓸모가 있습니다.

다만 같은 그림에 한계도 드러납니다. 두 가지입니다.

첫째, 비정상 토큰의 생성 입니다. 그림에서 붉게 표시된 _alt/min.처럼 표준적이지 않은 토큰이 간간이 튀어나옵니다. BERT 같은 마스킹 언어 모델은 제한되고 정돈된 어휘 안에서 움직이지만, 현대 LLM의 어휘는 훨씬 크기 때문에 이런 가장자리 토큰이 잡힐 확률도 함께 커집니다.

둘째, 다국어 지원의 제한 입니다. 활성화되는 토큰이 영어와 중국어에 쏠려 있고 다른 언어는 거의 나오지 않습니다. 학습 말뭉치가 영어와 중국어 위주로 구성된 탓이 크고, 기반 모델 자체의 교차 언어 한계도 겹칩니다. 한국어 문서 검색에 UEmbed의 희소 모드를 그대로 적용하려는 경우에는 이 부분을 먼저 확인해봐야 합니다.

잘 되는 과제와 안 되는 과제

논문 부록에는 과제 유형별로 희소 표현을 뜯어본 사례가 더 실려 있습니다. 여기서는 질의 쪽 활성화를 파란색, 코퍼스 후보 쪽 활성화를 초록색, 양쪽에서 함께 활성화된 토큰을 빨간색으로 표시합니다. 즉 빨간 토큰이 많을수록 질의와 정답 문서가 어휘 공간에서 실제로 맞물린 것입니다.

질의응답과 검색, 그라운딩 과제에서는 활성화된 토큰이 질의 의도에 잘 들어맞습니다. 아래는 OK-VQA 사례입니다.

입력 이미지는 식당에 모여 있는 사람들이고 질문은 "여성의 셔츠가 어떤 동물의 가죽 무늬를 따라 한 것인가"입니다. 모델이 활성화한 상위 토큰은 Leopard, , , Panther, Jaguar, 狮子처럼 전부 질문이 겨냥한 동물 개념이고, 식당이나 사람 같은 장면 묘사 토큰은 밀려나 있습니다. 정답 문서인 leopard와 공통 활성화된 토큰도 다수입니다. 희소 벡터가 장면을 나열하는 것이 아니라 질문에 답하는 방향으로 어휘를 고른 셈입니다.

반면 분류(Classification) 과제에서는 결이 다릅니다. 연구팀은 이 유형에서 모델이 주변 개념에 과도하게 연관되고 지시를 따르는 데 약해, 희소 활성화가 덜 정확해진다고 지적합니다.

N24News 사례가 이를 잘 보여줍니다. 지시문은 "뉴스 이미지를 도메인 분류를 위해 표현하라"인데, 모델이 활성화한 것은 拥抱(포옹), hug, embrace, 大桥(대교), 桥梁, 公路, cyclists처럼 사진에 보이는 것들뿐입니다. 정답 레이블인 Travel 쪽 활성화(travel, 旅行, trip, 旅游, transport)와 겹치는 토큰이 하나도 없습니다. 장면은 정확히 읽었지만 "도메인으로 분류하라"는 지시를 어휘 선택에 반영하지 못한 것입니다.

실무 관점에서 이 구분은 꽤 중요합니다. 희소 모드를 도입할 때 질의응답이나 문서 검색처럼 질의와 문서가 같은 어휘 공간에서 만나는 과제라면 밀집 모드를 상당 부분 대체할 수 있지만, 지시문으로 카테고리를 지정하는 분류형 과제에서는 밀집 모드나 하이브리드를 함께 두는 편이 안전합니다.

실전에서의 이점: 하이브리드 점수와 서빙, 에이전트 검색

연구팀은 정확도 바깥의 실용적 이점을 세 갈래로 검증합니다.

하이브리드 점수

UEmbed는 한 번의 순전파로 두 표현을 모두 만들기 때문에, 두 점수를 합치는 데 추가 인코딩이 필요 없습니다. 하이브리드 점수는 두 유사도를 선형 결합해 계산합니다.

s_{\text{hybrid}}(q, d) = \alpha \, s_{\text{dense}}(q, d) + \beta \, s_{\text{sparse}}(q, d)

밀집 코사인 유사도는 [-1, 1] 에 갇혀 있는 반면 희소 내적은 훨씬 큰 값을 가질 수 있어서 두 점수의 크기 자체가 다릅니다. 그래서 \alpha = 1.0 으로 고정하고 \beta 만 모달리티별로 조정합니다. 텍스트는 \beta = 5 \times 10^{-8} , 이미지는 5 \times 10^{-4} , 영상은 1 \times 10^{-4} , 시각 문서는 7 \times 10^{-4} 입니다. 텍스트의 최적값이 몇 자릿수나 작은 이유는, 순수 텍스트에서 활성화되는 토큰 수가 많아 희소 내적이 빠르게 커지는 반면 무거운 멀티모달 입력은 활성화 패턴이 훨씬 희박하기 때문입니다.

모드 텍스트 이미지 영상 시각 문서
UEmbed-2B (밀집) 53.6 67.8 50.0 77.0
UEmbed-2B (희소) 52.3 67.0 47.7 76.7
UEmbed-2B (하이브리드) 53.9 67.9 50.0 77.5

하이브리드가 도움이 되는 곳은 정확한 어휘 일치가 의미 유사도를 보완해 주는 텍스트(+0.3 )와 시각 문서(+0.5 )입니다. 반면 일반 사진이나 영상 프레임에는 표면적인 어휘 정보가 거의 없어서 희소 쪽이 더할 신호가 마땅치 않습니다. 벤치마크 전체 평균으로 보면 개선 폭이 크지 않은데, 이는 이득이 나는 작업이 다양한 작업들 사이에서 희석되기 때문입니다.

서빙 효율

배포 관점에서 UEmbed의 이점은 두 가지입니다. 모델이 순수한 자기회귀 구조 그대로이므로 vLLM 같은 고처리량 서빙 스택에서 별도 변환 없이 임베딩을 생성할 수 있습니다. 그리고 희소 표현이 표준 역색인에 그대로 들어가므로 대규모 어휘 검색을 운영 환경에서 확장할 수 있습니다.

연구팀은 BrowseComp-Plus의 오프라인 검색 모드에서 Faiss 기반 밀집 색인과 Lucene 기반 희소 역색인을 비교했습니다. 질의당 활성화 토큰 수의 상한 K_{\mathrm{prune}} 을 조절하면 검색 지연 시간과 검색 품질(NDCG@5) 사이의 균형점을 배포 조건에 맞게 고를 수 있습니다. 다만 이 말뭉치 규모에서는 밀집 검색이 절대 성능에서 조금 앞서며, 말뭉치가 커질수록 역색인 검색이 유리해질 것으로 연구팀은 예상하되 여러 규모에 걸친 체계적 평가는 향후 과제로 남겨두었습니다.

에이전트 검색: BrowseComp-Plus

선행 연구가 지적하듯 LLM 에이전트는 검색 도구를 호출할 때 짧고 키워드가 빽빽한 질의를 던지는 경향이 있습니다. 희소 검색이 상대적으로 강한 구간이 바로 여기입니다. 연구팀은 BrowseComp-Plus에서 이를 검증했습니다. 이 벤치마크는 LLM이 반복적으로 추론하면서 검색을 도구로 사용하는 환경이고, 추론 엔진으로는 DeepResearch-30A3B를 씁니다.

검색기 정확도 재현율 평균 검색 횟수 캘리브레이션 오차
BM25 36.87 43.02 17.91 해당 없음
Qwen3-Embedding-8B 44.46 62.32 30.37 해당 없음
Qwen3-VL-Embedding-8B 31.45 44.42 34.19 12.35
UEmbed-2B (밀집) 44.10 53.47 39.19 16.69
UEmbed-2B (희소) 44.05 57.04 32.67 8.54
UEmbed-4B (밀집) 51.57 61.03 38.47 14.34
UEmbed-4B (희소) 45.54 60.10 31.85 8.79
UEmbed-9B (밀집) 49.76 64.72 33.68 7.06
UEmbed-9B (희소) 49.76 64.33 31.05 8.16

정확도와 재현율은 \% 단위이고, 평균 검색 횟수는 문제당 도구 호출 횟수입니다. 위 표에서 눈에 띄는 것은 희소 모드가 모든 규모에서 밀집 모드보다 검색 라운드를 적게 쓴다는 점입니다. 9B에서는 33.68 회에서 31.05 회로 줄면서 정확도는 49.76\% 로 동일합니다. 2B에서는 재현율이 오히려 희소 쪽이 높고(53.4757.04 ), 4B와 9B에서는 비슷한 수준을 유지합니다. 도구 호출 한 번이 곧 토큰 비용인 에이전트 워크플로우에서, 같은 정확도를 더 적은 호출로 달성한다는 것은 실질적인 비용 절감입니다.

표의 마지막 열인 캘리브레이션 오차도 함께 적어 두었습니다. 2B와 4B에서는 희소 모드 쪽이 밀집 모드보다 뚜렷하게 낮습니다(16.698.54 , 14.348.79 ). 다만 논문 본문은 이 열을 따로 논하지 않으므로, 해석은 열어 둔 채 수치만 옮겨 둡니다.

UEmbed 설치 및 사용 방법

UEmbed는 CC-BY-4.0 라이선스로 공개되어 있고, Hugging Face에서 세 가지 크기의 가중치를 모두 내려받을 수 있습니다. Qwen3.5와 Qwen3-VL을 지원하는 최신 transformers 빌드가 필요합니다.

pip install "transformers>=5.4.0" torch qwen-vl-utils tokenizers huggingface-hub pillow numpy

희소 추론에는 모델 디렉토리 안의 sparse_info.jsonsparse_weights.pt가 함께 있어야 하므로, 저장소 전체를 내려받아야 합니다.

huggingface-cli download Alibaba-NLP/UEmbed-2B --local-dir ./models/UEmbed-2B

사용법은 간단합니다. 밀집 임베딩은 pooling="last.normal", 희소 임베딩은 pooling="splade.last"로 지정하고, 검색 파이프라인에 필요한 모드만 인스턴스화하면 됩니다.

import torch
from src.models.qwen35_embedding import Qwen35Embedder

model = Qwen35Embedder(
    model_name_or_path="./models/UEmbed-2B",
    pooling="last.normal",  # 희소 임베딩이 필요하면 "splade.last"
    torch_dtype=torch.bfloat16,
    attn_implementation="flash_attention_2",
)

inputs = [
    {
        "text": "A woman playing with her dog on a beach at sunset.",
        "instruction": "Retrieve images or text relevant to the user's query.",
    },
    {"image": "./assets/beach.jpg"},
    {"text": "A short city video.", "video": "./assets/city.mp4", "fps": 1.0, "max_frames": 8},
]

embeddings = model.process(inputs)
print(embeddings @ embeddings.T)

입력 딕셔너리는 text, image, video, instruction, fps, max_frames 필드를 지원하며, 한 딕셔너리 안에서 여러 모달리티를 섞어도 됩니다. 검색 작업에서는 작업별 지시문을 instruction에 넣어 주는 것이 권장됩니다. 직접 데이터로 실험을 돌려보려면 저장소의 src/models/qwen35_embedding.pyQwen3-VL-Embedding 저장소의 src/models 아래로 옮기면 됩니다.

한계점 및 향후 연구 방향

연구팀은 세 가지 한계를 분명히 밝히고 있습니다.

언어와 문화적 편향 이 첫 번째입니다. 학습 말뭉치가 영어와 중국어에 크게 치우쳐 있어서 희소 헤드의 활성화가 다른 언어로 잘 일반화되지 않습니다. 희소 표현의 강점이 어휘를 그대로 드러내는 데 있는 만큼, 어휘가 특정 언어에 묶여 있으면 그 강점이 다른 언어권에서는 작동하지 않습니다. 이 부분을 넓히려면 언어적으로 다양한 대규모 학습 데이터가 필요합니다.

어휘 안정성과 잡음 토큰 이 두 번째입니다. 앞서 사례 연구에서 본 _alt 같은 비표준 하위 단어가 활성화 목록에 섞여 들어옵니다. 어휘가 제한적이었던 마스킹 언어 모델에서는 잘 없던 문제입니다. 연구팀은 표적 어휘 가지치기(Pruning)나 의미 군집화 개선, 사후 필터링을 향후 방향으로 제시합니다. 엄격한 운영 환경이라면 이런 후처리를 붙이는 편이 안전합니다.

모달리티별 성능 격차 가 세 번째입니다. 텍스트와 정적 시각 문서에서는 희소와 밀집이 거의 같은 수준을 유지하지만 영상에서는 격차가 조금 더 큽니다. 영상 프레임의 높은 정보 밀도와 시간적 변화를 평평한 희소 벡터 하나에 눌러 담으려 할 때 용량 병목이 생기는 것으로 보입니다.

부록의 오류 분석은 Qwen3-VL-Embedding과의 격차가 어디서 오는지도 짚습니다. 이미지에서는 세밀한 인식(ImageNet-A, SUN397, N24News)과 질문 기반 VQA(GQA, ScienceQA)에서 차이가 나고, 영상에서는 동작 인식과 구간 지역화, 긴 영상 추론(HMDB51, UCF101, EgoSchema, NExTQA, QVHighlight)에서 Qwen3-VL-Embedding이 더 강합니다. 영상 전용 학습 데이터가 UEmbed 학습 혼합에 거의 없었다는 점이 원인으로 지목됩니다. 시각 문서에서는 격차가 작고 주로 다국어 ViDoRe와 표 및 수치 추론 문서에 몰려 있는데, 여기서는 재순위 모델(Reranker)의 점수를 임베딩 모델로 증류하는 rank-KL 목적함수의 효과가 작용한 것으로 연구팀은 추정합니다.

윤리 관련 서술도 짧게 덧붙여 두었습니다. 학습에 공개 데이터셋만 사용했고 재현을 위해 가중치를 공개한다는 점, 그리고 임베딩 모델이 학습 데이터와 기반 LLM의 편향을 물려받을 수 있으므로 위험도가 높은 검색 응용에 배포하기 전에는 인구통계 집단별로 공정성을 평가해야 한다는 점입니다. 여기서 희소 표현의 성격이 도움이 됩니다. 활성화된 어휘가 밖으로 드러나므로, 순수 밀집 모델보다 편향 점검이 수월합니다.

정리하면 UEmbed가 바꾼 것은 성능 순위표의 한 줄이 아니라 희소 검색의 위치입니다. 지금까지 학습된 희소 검색은 양방향 인코더를 따로 세우고 모달리티마다 보조 모듈을 붙여야 하는 독립 부품이었습니다. UEmbed는 이를 멀티모달 LLM에서 자연스럽게 떨어지는 부산물로 바꿔 놓았고, 그 부산물이 밀집 표현과 같은 순전파에서 나오는 덕분에 하이브리드 점수도 공짜에 가깝게 얻습니다. 역색인과 vLLM이라는 기존 인프라를 그대로 쓸 수 있다는 점까지 더하면, 검색 시스템을 운영하는 입장에서는 새 모델을 하나 더 도입하는 것이 아니라 이미 쓰던 두 파이프라인을 하나로 접는 선택지가 생긴 셈입니다.

:scroll: UEmbed: Unified Sparse and Dense Multimodal Embeddings 논문

:house: UEmbed 프로젝트 홈페이지

:github: UEmbed GitHub 저장소

:hugs: UEmbed-9B (Hugging Face)

:hugs: UEmbed-4B (Hugging Face)

:hugs: UEmbed-2B (Hugging Face)

더 읽어보기




이 글은 GPT 모델로 정리한 초안을 바탕으로 한 것으로, 원문의 내용 또는 의도와 다르게 정리된 내용이 있을 수 있습니다. 관심있는 내용이시라면 원문도 함께 참고해주세요! 읽으시면서 어색하거나 잘못된 내용을 발견하시면 댓글로 알려주시기를 부탁드립니다. :hugs:

논문의 주장이나 벤치마크에 대한 의견, 직접 재현해보신 결과가 있다면 :pytorch:파이토치 한국 사용자 모임:south_korea: 회원들을 위해 댓글로 공유해주세요! :folded_hands: