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% 이상을 유지했습니다.
섹션별 상세



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에 맞춰 토큰화하고 모델 입력 형식으로 변환합니다.
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로 비교합니다.




용어 해설
- 단일 타워 인코더(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 Trends (aitrends.kr)"를 표기하고, 사실 확인은 원문 보기 기준으로 진행해 주세요. 자세한 기준은 운영 정책을 참고해 주세요.