본문으로 건너뛰기

NeoMME, 단일 Transformer로 이미지 검색 비용을 낮추다

NeoMME가 이미지와 텍스트를 한 Encoder에서 처리해 문서 검색 성능과 저장 효율을 함께 확보했습니다.

이 요약은 AI가 원문을 분석해 생성했습니다. 정확한 내용은 원문 기준으로 확인하세요.

TL;DR

NeoMME는 별도 Vision Tower와 Causal Language Model 없이 이미지의 32×32 패치와 텍스트 토큰을 하나의 양방향 Transformer에서 처리하는 260M·800M 규모의 멀티링구얼 멀티모달 Encoder입니다. 마스크 기반 Discrete Diffusion 학습에서 이미지 패치를 보존한 채 텍스트를 복원하게 하며, 높은 마스킹 비율로 이미지 근거를 활용하도록 유도합니다. NeoMME-Retriever는 한 번의 순전파로 Dense와 Late Interaction 임베딩을 함께 생성하고, ViDoRe v3에서 260M 모델이 nDCG@10 0.523을 기록했습니다. 2048×2048 입력과 NVIDIA L40S 기준 260M 모델은 초당 약 51페이지를 처리하며, 계층적 토큰 풀링과 비대칭 양자화로 페이지당 Late Interaction 인덱스를 약 1.5MB에서 6kB로 줄이면서 기준 성능의 95% 이상을 유지했습니다.

섹션별 상세

01
기존 멀티모달 문서 검색기는 별도 Vision Encoder와 Projector, Causal Decoder를 결합하는 경우가 많아 검색에 필요하지 않은 생성용 계산과 파라미터를 부담으로 지닙니다. NeoMME는 이미지 패치와 텍스트 토큰을 같은 양방향 Transformer에 넣어 두 모달리티가 동일한 계산 경로를 사용하게 만들었습니다. 이 단일 타워 구조는 Retrieval·Classification·Token Labeling처럼 자기회귀 텍스트 생성이 필요하지 않은 작업에 맞춰 모델 구조를 단순화합니다.
Dual-Tower Encoder, VLM Encoder, ModernVBERT, NeoMME의 이미지·텍스트 입력 경로와 구성 요소를 비교한 아키텍처 도식입니다.
DiagramNeoMME는 별도 Vision Encoder와 Language Encoder 또는 Decoder를 직렬로 연결하지 않고, Patchify된 이미지 입력과 Tokenizer를 거친 텍스트 입력을 하나의 Multimodal Encoder에 함께 전달합니다. 이는 이미지와 텍스트가 동일한 계산 경로에서 처리된다는 본문의 단일 타워 설계를 시각적으로 나타냅니다.
02
NeoMME는 32×32 비중첩 이미지 패치를 작은 MLP로 투영하고 텍스트에는 Factorized Token Embedding을 적용한 뒤 두 입력을 하나의 Transformer Encoder에서 처리합니다. 입력 이미지의 종횡비와 크기를 유지하므로 정보가 많은 고해상도 문서 페이지에 더 많은 토큰을 할당할 수 있으며, 최대 문맥 길이는 16,384토큰입니다. 대부분의 층에는 대칭 Sliding-Window Attention을 적용하고 6번째 층마다와 마지막 층에는 Global Attention을 배치해 긴 입력의 지역 정보와 전역 정보를 함께 처리합니다.
NeoMME-260M과 NeoMME-800M의 층별 Sliding-Window Attention 및 Full Attention 배치를 보여주는 구조도입니다.
Diagram260M은 17개 층, 800M은 20개 층으로 구성되며, 보라색 블록은 서로 다른 범위의 Sliding-Window Attention을, 붉은색 블록은 Full Attention을 나타냅니다. 본문에서 설명한 6번째 층마다와 마지막 층의 Global Attention 배치가 모델별 층 깊이에 따라 어떻게 반복되는지 확인할 수 있습니다.
03
NeoMME는 텍스트·코드·수학·자연 이미지·문서 이미지로 처음부터 학습되며, 131k 어휘의 BPE Tokenizer도 새로 구축했습니다. 텍스트 전용 샘플은 마스킹 비율을 0~1 사이에서 무작위로 정하고 각 대상 토큰을 독립적으로 가리며, 멀티모달 샘플은 0.3~1 범위의 비율을 사용해 이미지 패치를 노출한 채 텍스트를 복원합니다. 전체 입력 규모는 약 5240억 packed token이고 텍스트 전용 데이터는 2900억 token으로, ModernBERT의 2조 token보다 작기 때문에 데이터 효율을 높이기 위해 NorMuon Optimizer를 선택했습니다.
텍스트 토큰을 마스킹한 입력에 이미지 패치를 함께 제공하고, Encoder가 가려진 텍스트를 복원하는 과정을 나타낸 도식입니다.
Diagram텍스트 전용 입력에서는 일부 토큰을 가린 뒤 주변 언어 문맥으로 복원할 수 있지만, 멀티모달 입력에서는 이미지 토큰이 보존되고 텍스트가 최소 30% 이상 마스킹됩니다. 마스킹된 영역을 이미지 근거로 복원하는 흐름이 NeoMME의 Discrete Masked-Diffusion 사전 학습 목표와 직접 연결됩니다.
04
NeoMME-Retriever는 ColPali가 사용한 페이지 이미지 검색 방식을 따라 PDF 텍스트를 OCR로 추출하는 대신 각 페이지를 이미지로 취급합니다. 이 입력 방식은 OCR 과정에서 평탄화될 수 있는 레이아웃·차트·표·글꼴과 같은 시각 정보를 임베딩에 남기며, Dense Head는 은닉 상태를 평균 풀링해 정규화된 하나의 벡터를 만듭니다. Late-Interaction Head는 각 텍스트 토큰과 이미지 패치를 128차원 정규화 벡터로 바꿔 국소적인 쿼리-영역 대응을 보존합니다.
05
ViDoRe v3에서 NeoMME-Retriever-260M은 nDCG@10 0.523으로 800M 미만 평가 모델 중 가장 높은 점수를 기록했으며, ColQwen2.5와의 차이는 0.002이고 파라미터 수는 약 14분의 1입니다. NeoMME-Retriever-800M은 0.556으로 비슷한 크기의 Vultron Retriever Flash 0.8B와 0.009 차이를 보였고, 두 모델 모두 모델 크기와 성능의 Pareto Frontier에 놓였습니다. 260M 모델은 ColModernVBERT와 두 배 큰 ColSmol-500M을, 800M 모델은 3.6배 많은 파라미터를 사용하는 ColPali v1.3을 각각 앞섰습니다.
python
def encode(
    messages: list[list[dict[str, Any]]],
    task: Literal["query", "document"],
) -> BatchFeature:
    return processor.apply_chat_template(
        messages,
        task=task,
        tokenize=True,
        return_dict=True,
        return_tensors="pt",
        processor_kwargs={"padding": "longest"},
    )

쿼리 또는 문서 메시지를 NeoMMEProcessor의 chat template에 맞춰 토큰화하고 모델 입력 형식으로 변환합니다.

python
with torch.inference_mode():
    document_outputs = model(**inputs_documents)
    query_outputs = model(**inputs_text)

late_scores = mean_maxsim(
    query_outputs.embeddings,
    document_outputs.embeddings,
    a_mask=inputs_text["attention_mask"],
    b_mask=inputs_documents["attention_mask"],
)
dense_scores = cos_sim(query_outputs.dense_embeddings, document_outputs.dense_embeddings)
# Expected: late_scores[0, 0] > late_scores[0, 1] and late_scores[1, 1] > late_scores[1, 0].
print(late_scores, dense_scores)

한 번의 모델 추론으로 얻은 late-interaction 임베딩과 dense 임베딩을 각각 MeanMaxSim과 cosine similarity로 비교합니다.

공유된 NeoMME Backbone의 은닉 상태가 Late-Interaction Head와 Dense Head로 동시에 전달되는 검색 구조도입니다.
Diagram텍스트 토큰 또는 이미지 패치가 NeoMME Backbone을 통과한 뒤 두 검색 Head로 분기됩니다. Dense Head는 전체 표현을 하나의 벡터로 만들고 Late-Interaction Head는 여러 토큰·패치 벡터를 유지하므로, 한 번의 순전파로 빠른 ANN 검색과 세밀한 재순위화를 모두 지원합니다.
06
고해상도 페이지에서는 이미지 패치 수에 비례해 Late-Interaction 임베딩 저장 공간이 커지며, 2048×2048 페이지 하나가 약 4,200개 벡터와 float32 기준 약 2.1MB를 생성합니다. NeoMME는 유사 벡터를 군집화해 개수를 줄이는 Hierarchical Token Pooling과 문서 벡터만 int8 또는 binary로 바꾸는 Asymmetric Quantization을 결합했습니다. ViDoRe v3에서 Pooling Factor 10과 int8 조합은 페이지당 저장량을 약 1.5MB에서 39kB로 줄이면서 기준 nDCG@10의 99% 이상을 보존했고, Pooling Factor 8과 binary 문서는 6kB와 95% 이상의 성능을 달성했습니다.
ViDoRe v3의 nDCG@10과 모델 파라미터 규모를 비교한 산점도로, NeoMME-260M과 800M의 위치를 강조합니다.
ChartNeoMME-260M은 약 260M 파라미터에서 nDCG@10 약 0.523을, NeoMME-800M은 약 800M 파라미터에서 약 0.556을 기록해 작은 모델 크기 대비 높은 검색 성능을 보입니다. 보라색 원과 삼각형은 각각 Late-Interaction과 Dense 결과이며, 두 모델이 모델 크기-성능 Pareto Frontier에 있음을 시각적으로 나타냅니다.
07
문서 인덱싱 속도는 검색 시스템의 초기 구축과 신규 문서 추가에 필요한 GPU 가동 시간과 비용에 직접 영향을 줍니다. NVIDIA L40S 한 장에서 2048×2048 입력을 처리할 때 NeoMME-Retriever-260M은 초당 약 51페이지를 인코딩해 ColModernVBERT의 26페이지보다 거의 두 배 빠른 처리량을 기록했습니다. 더 작은 입력 이미지에서도 260M과 800M 모델은 비교 대상 모델보다 높은 인코딩 속도를 보였습니다.
NeoMME-260M Late-Interaction 인덱스의 압축률과 기준 nDCG@10 유지율 사이의 관계를 나타낸 그래프입니다.
ChartPooling과 양자화 조합에 따라 저장 공간이 감소할수록 검색 품질이 낮아지는 trade-off가 나타납니다. Pooling Factor 10과 int8 조합은 39.0kB/doc에서 99.2% 품질을 유지하고, Pooling Factor 8과 int8 쿼리·binary 문서 조합은 6.0kB/doc와 95.2% 품질을 제공해 저장 예산에 따른 선택지를 만듭니다.
08
NeoMME-Retriever는 한 번의 순전파에서 Dense와 Late-Interaction 표현을 모두 반환하므로 저장 예산과 검색 규모에 따라 두 방식을 조합할 수 있습니다. 대규모 코퍼스에서는 Dense 임베딩을 ANN 인덱스에 넣어 후보를 먼저 줄인 뒤 Late Interaction으로 재순위화하고, 세밀한 검색이 필요하면 Late-Interaction 임베딩을 직접 사용할 수 있습니다. PDF 페이지를 이미지로 변환해 Vector Store에 저장하고 상위 페이지 이미지를 VLM에 전달하는 Visual RAG 구성으로도 이어지며, 이때 표·플롯·다이어그램과 페이지 배치를 생성 단계에서 유지할 수 있습니다.
NVIDIA L40S에서 입력 이미지 해상도별 문서 페이지 인코딩 처리량을 모델별로 비교한 막대그래프입니다.
ChartNeoMME-260M은 768·1024·1536·2048 입력에서 각각 약 368·220·87·51 pages/s의 처리량을 보이며, 2048 해상도에서도 ColModernVBERT의 약 26 pages/s보다 높습니다. 이미지 해상도가 증가할수록 모든 모델의 처리량이 낮아지지만 NeoMME의 작은 모델 크기와 단일 인코더 구조가 고해상도 문서 인덱싱 속도에 유리한 비교 결과를 보여줍니다.

용어 해설

단일 타워 인코더(Single-Tower Encoder)
이미지와 텍스트를 별도의 인코더에서 처리한 뒤 결합하지 않고, 하나의 Transformer 경로에서 함께 처리하는 구조입니다. NeoMME는 이미지 패치와 텍스트 토큰을 동일한 양방향 Encoder에 입력해 모달리티 간 표현 공간을 공유합니다. 별도 Vision Tower와 Causal Decoder가 필요 없어 모델 크기와 추론 계산량을 줄이는 데 목적이 있습니다.
마스크 기반 Diffusion(Masked Diffusion)
입력 텍스트의 일부 토큰을 확률적으로 가린 뒤 주변 문맥과 이미지 정보를 이용해 원래 토큰을 복원하도록 학습하는 방식입니다. NeoMME는 텍스트 전용 입력에서 마스킹 비율을 0~1 사이로 샘플링하고, 멀티모달 입력에서는 최소 30% 이상을 가립니다. 마스킹 비율이 높아질수록 텍스트만으로 추측하기 어려워져 이미지 근거를 활용하는 학습 신호가 강해집니다.
Late Interaction
문서 전체를 하나의 벡터로 압축하는 대신 쿼리 토큰과 문서 이미지 패치 각각의 벡터를 비교해 세밀한 일치 점수를 계산하는 검색 방식입니다. NeoMME-Retriever는 각 토큰과 패치를 128차원 벡터로 변환하고 MeanMaxSim 방식으로 관련성을 산출합니다. 저장 공간은 더 많이 필요하지만 표·차트·문서의 특정 영역처럼 국소적인 대응 관계를 보존할 수 있습니다.
계층적 토큰 풀링(Hierarchical Token Pooling)
멀티벡터 임베딩 안에서 서로 유사한 문서 벡터를 군집화한 뒤 각 군집을 평균 벡터 하나로 대체하는 압축 기법입니다. 이 과정을 통해 고해상도 페이지에서 발생하는 많은 이미지 패치 벡터의 개수를 줄입니다. NeoMME 실험에서는 int8 양자화와 함께 사용해 페이지당 저장 공간을 약 1.5MB에서 39kB 또는 6kB까지 낮췄습니다.
비대칭 양자화(Asymmetric Quantization)
저장되는 문서 임베딩만 int8 또는 binary로 낮은 정밀도로 변환하고, 실시간 생성되는 쿼리 임베딩은 더 높은 정밀도로 유지하는 압축 방식입니다. 쿼리 벡터는 저장하지 않고 검색 시 생성하므로 문서와 쿼리에 서로 다른 정밀도를 적용할 수 있습니다. NeoMME는 int8 쿼리와 binary 문서 조합에서 저장 공간을 255배 줄이면서 기준 nDCG@10의 95% 이상을 유지했습니다.

기술

  • NeoMME
  • NeoMME-Retriever
  • Hugging Face Transformers
  • Sentence Transformers v6
  • NextPlaid
  • Qdrant
  • Weaviate
  • Milvus
  • NVIDIA L40S
  • NorMuon

활용 사례

  • PDF 페이지 이미지 검색
  • 고해상도 문서의 Visual RAG
  • Dense 임베딩 기반 ANN 후보 검색
  • Late-Interaction 기반 문서 재순위화
  • 멀티링구얼 이미지·텍스트 표현 학습
AI 분석 전체 내용 보기

AI 요약 · 북마크 · 개인 피드 설정 — 무료

출처 · 인용 안내

원문 발행 2026. 09. 03.수집 2026. 09. 03.출처 타입 RSS

인용 시 "요약 출처: AI Trends (aitrends.kr)"를 표기하고, 사실 확인은 원문 보기 기준으로 진행해 주세요. 자세한 기준은 운영 정책을 참고해 주세요.