H Company의 NeoMME, 비전 타워 없이 14배 작은 멀티모달 검색 모델 공개
· 왜 비전 타워를 빼는 게 좋은가
· 하나의 타워, 두 가지 모달리티
· 마스크드 디퓨전으로 학습
· ViDoRe v3 검색 성능
· 저장 용량과 처리량
· 약점과 주의할 점
· 자주 묻는 질문
왜 비전 타워를 빼는 게 좋은가
지금까지의 시각 문서 검색 모델(예: ColPali 계열)은 생성형 비전-언어 모델을 그대로 가져와 검색용 인코더로 재활용했습니다. 그래서 모델 안에 두 가지 “불필요한 짐”이 남았습니다.
- 비전 타워(Vision Tower): 원본 이미지 픽셀을 벡터로 바꿔주는 이미지 처리 전용 모듈. 보통 SigLIP 같은 별도 사전학습 비전 모델을 통째로 끼워 넣습니다.
- 인과적 디코더(Causal Decoder): 한 번도 토큰을 생성하지 않는데도 모델 안에 그대로 들어 있는 텍스트 생성 모듈. 좌→우 단방향 어텐션만 허용해 문맥을 양쪽으로 동시에 보지 못합니다.
검색처럼 “표현만 필요한 작업”에는 둘 다 과도한 비용입니다. 매개변수가 커지고, 계산량이 늘어나고, 저장 공간도 커집니다. H Company는 “검색 전용이라면 처음부터 가볍게 설계하는 게 더 낫다”는 결론을 내렸습니다.
하나의 타워, 두 가지 모달리티
NeoMME는 260M과 800M 두 가지 크기로 공개됐으며, 둘 다 다음 원칙을 따릅니다.
- 단일 양방향 트랜스포머: 텍스트와 이미지를 하나의 네트워크가 동시에 처리합니다.
- 비전 타워 제거: SigLIP 같은 외부 이미지 인코더를 끼우지 않습니다.
- 인과적 디코더 제거: 좌→우 단방향 디코더 없이 양방향 인코더만 사용합니다.
- 무작위 초기화부터 학습: 사전학습된 비전 모듈을 빌려오지 않고 처음부터 학습합니다.
입력은 어떻게 들어가나
텍스트는 ALBERT 스타일의 분해 임베딩으로 들어갑니다. 256차원 룩업 테이블 값을 모델 폭으로 투영하는 방식으로, 임베딩 테이블 크기를 크게 줄입니다. 이미지는 32×32 RGB 패치로 잘게 쪼갠 뒤, 2층 MLP로 모델 폭에 맞춰 투영합니다. 패치 병합 모듈도 없습니다.
이미지 두 장을 겹쳐 처리할 수 있도록 컨텍스트가 충분히 길고(16,384 토큰), 4K UHD 이미지 두 장을 패치화한 후에도 여유가 남습니다. 어텐션은 대부분 슬라이딩 윈도우로 처리하고, 6번째 층마다·마지막 층에서만 전역 어텐션을 적용해 계산량을 절약합니다.
마스크드 디퓨전으로 학습
사전학습은 이산 마스크드 디퓨전(Discrete Masked Diffusion) 방식입니다. 핵심 아이디어는 단순합니다.
- 입력 토큰의 일부를 무작위로 가립니다(마스킹).
- 모델이 가려진 토큰을 맞히도록 학습합니다.
- 이미지가 함께 주어지면 보이는 패치를 조건으로 함께 활용합니다.
손상률(마스킹 비율)을 텍스트 구간에서는 0~1 사이에서 균일하게, 이미지 구간에서는 0.30~1 사이에서 샘플링합니다. 이미지 구간에서 손상률을 일부러 높게 잡아, 모델이 “언어만으로 푸는 지름길”에 의존하지 못하게 강제합니다.
실제로 90% 마스킹 조건에서 보이는 페이지 패치는 260M 모델의 마스크드 토큰 정확도를 38.4포인트, 800M 모델은 40.5포인트 끌어올렸습니다. 즉, 이미지가 정말로 모델이 텍스트를 푸는 데 도움을 줬다는 실험적 증거입니다.
ViDoRe v3 검색 성능
검색용 파인튜닝 모델인 NeoMME-Retriever는 공유 백본 위에 두 개의 검색 헤드를 동시에 학습합니다.
- Matryoshka dense 헤드: 평균 풀링 결과로, 벡터를 64·128·256·512차원 등 다양한 크기로 잘라 쓸 수 있습니다.
- Late interaction 헤드: 모든 토큰과 패치를 128차원 벡터로 투영해, 검색 시점에서 토큰 단위 세밀한 매칭을 수행합니다.
한 번의 순전파로 두 결과를 모두 얻기 때문에 운영 비용이 효율적입니다.
| 모델 | ViDoRe v3 nDCG@10 | ViDoRe v1 nDCG@5 | ViDoRe v2 nDCG@5 |
|---|---|---|---|
| NeoMME-260M | 0.523 | 0.860 | 0.522 |
| NeoMME-800M | 0.556 | 0.874 | 0.559 |
| ColQwen2.5-v0.2 (3.75B) | ≈0.525 | - | - |
260M 모델은 3.75B 파라미터의 ColQwen2.5-v0.2와 0.002 이내의 차이밖에 나지 않으면서, 다른 300M 미만 최고 모델보다 26.1포인트 높습니다. 다시 말해 14.4배 작은 모델이 거의 같은 정확도를 달성한 셈입니다.
저장 용량과 처리량
Late interaction 인덱스는 토큰마다 벡터를 저장하기 때문에 일반적으로 비용이 큽니다. 2048×2048 페이지 하나가 약 4,162개 벡터를 생성하며, ViDoRe v3 문서 한 건당 float32 기준으로 약 1.5MB에 달합니다. NeoMME는 두 가지 절약 기법으로 이를 크게 줄였습니다.
| 방법 | 페이지당 크기 | 축소 배수 | 성능 유지율 |
|---|---|---|---|
| 기준(float32) | ≈1.5MB | 1× | 100% |
| int8 + 풀 계수 10 | 39.0kB | 39.4× | 99.16% |
| int8 질의 + 이진 문서 + 풀 계수 8 | 6.0kB | 255.5× | 95.19% |
인덱싱 속도
단일 NVIDIA L40S에서 2048×2048 입력을 처리할 때 NeoMME-260M은 초당 51.3페이지를 인코딩합니다. 비교 대상인 ColModernVBERT는 같은 조건에서 26.0페이지에 그쳐 약 1.97배의 속도 차이가 발생합니다. CPU 환경에서도 질의를 78.3ms 안에 인코딩할 수 있어, GPU가 없는 환경에서도 충분히 운용 가능합니다.
약점과 주의할 점
- 텍스트 전용 검색은 약합니다. BEIR-15에서 NeoMME의 late interaction 점수는 0.4881과 0.5126인데, 149M 파라미터의 LateOn은 0.5722를 기록합니다.
- 데이터 규모 차이. NeoMME는 약 43만 개의 텍스트 질의 예시만 학습했지만, mLateOn은 약 6.6억 개의 대비 학습(contrastive) 예시를 사용했습니다.
- 고정 일반 이미지 전이학습은 여전히 명확한 약점으로 남아 있습니다.
즉, “시각 문서 검색”에 특화된 모델이며, “순수 텍스트 검색” 용도로는 별도 모델과 함께 쓰는 것이 바람직합니다.
핵심 요약
- 단일 양방향 트랜스포머가 텍스트와 원본 이미지 패치를 함께 처리하며, 비전 타워와 디코더가 모두 없습니다.
- NeoMME-Retriever-260M은 ViDoRe v3에서 nDCG@10 0.523을 기록하며, 평가 대상 800M 미만 모든 모델을 능가합니다.
- ViDoRe v3에서 3.75B 파라미터의 ColQwen2.5와 동등한 성능을 달성하면서도 크기는 14.4배 작습니다.
- 토큰 풀링과 비대칭 양자화를 결합해 인덱스 크기를 페이지당 약 1.5MB에서 6kB로 줄였습니다.
- 텍스트 전용 검색과 고정 일반 이미지 전이학습은 여전히 명확한 약점입니다.
한 줄 용어 정리
- 멀티모달 인코더(Multimodal Encoder)
- 텍스트·이미지 등 여러 종류의 데이터를 동시에 처리하도록 설계된 신경망 구성 요소.
- 비전 타워(Vision Tower)
- 비전-언어 모델에서 이미지를 벡터로 바꿔주는 이미지 처리 전용 부분. NeoMME에서는 제거됐습니다.
- 인과적 디코더(Causal Decoder)
- 이전 토큰으로 다음 토큰을 순차 예측하는 디코더. 텍스트 생성용이며, 검색에는 불필요합니다.
- 양방향 인코더(Bidirectional Encoder)
- 좌우 양쪽 문맥을 동시에 보는 트랜스포머 인코더. BERT 계열이 대표적입니다.
- 마스크드 디퓨전 디노이저(Masked Diffusion Denoiser)
- 입력의 일부를 가리고 복원하도록 학습하는 사전학습 방식으로, 확산 모델의 잡음 제거 원리를 결합한 것입니다.
- 마트료시카 표현 학습(Matryoshka Representation Learning)
- 하나의 벡터 안에 여러 크기의 정보를 계층적으로 담아, 필요에 따라 잘라 쓸 수 있게 하는 기법.
- 레이트 인터랙션(Late Interaction)
- 질의와 문서를 각각 토큰 단위 벡터로 인코딩한 뒤 검색 시점에서만 세밀한 매칭을 수행하는 신경 검색 구조.
- nDCG
- 상위 검색 결과의 순위 품질을 평가하는 0~1 사이의 지표. 관련 결과가 상위에 있을수록 점수가 높습니다.
- Apache 2.0 라이선스
- 상업적 이용·수정·배포가 자유로운 허용적 오픈소스 라이선스. NeoMME는 출시 당일 이 라이선스로 공개됐습니다.
- BPE(바이트 페어 인코딩)
- 자주 등장하는 문자 쌍을 반복적으로 병합해 어휘 집합을 만드는 서브워드 토크나이저 방식.
자주 묻는 질문
NeoMME는 어디서 바로 사용할 수 있나요?
모든 체크포인트가 Apache 2.0 라이선스로 제공되며, 출시 당일 Hugging Face Transformers에서 바로 사용할 수 있습니다.
GPU가 없어도 동작하나요?
260M 모델은 CPU 환경에서도 질의를 78.3ms 안에 인코딩할 수 있어 GPU 없이도 운용 가능합니다. 인덱싱은 L40S 같은 GPU가 권장됩니다.
텍스트 검색 전용으로도 쓸 수 있나요?
BEIR-15 결과(0.4881, 0.5126)에서 알 수 있듯 순수 텍스트 검색은 강점이 아닙니다. 시각 문서가 포함된 검색에 특화된 모델로 보는 것이 정확합니다.
인덱스 크기를 어떻게 255배 줄였나요?
int8 양자화와 이진 문서, 토큰 풀링(풀 계수 8)을 함께 적용했습니다. 성능은 기준의 약 95.19%를 유지합니다.
ColQwen2.5와 정말 비교 가능한가요?
ViDoRe v3 nDCG@10에서 260M 모델은 ColQwen2.5(3.75B)와 0.002 이내의 차이를 보였습니다. 정확도는 거의 동등하지만 매개변수 수는 14.4배 작습니다.