IBM, Granite Embedding Multilingual R2 공개: 200+ 언어 지원, 32K 컨텍스트

멀티링구얼 임베딩 모델은 항상 '언어 커버리지'와 '모델 크기' 사이에서 줄다리기를 해왔습니다. 언어를 많이 지원하려면 모델이 커지고, 작은 모델은 지원 언어가 적어지는 딜레마였죠. 특히 한국 개발자분들이라면 다국어 RAG(Retrieval-Augmented Generation) 파이프라인을 구축할 때 '영어는 되는데 한국어는 왜 이러지?' 하는 경험, 한 번쯤 해보셨을 거예요.

IBM이 이런 고민을 해결할 두 가지 새로운 멀티링구얼 임베딩 모델을 Apache 2.0 라이선스로 공개했습니다. 바로 granite-embedding-97m-multilingual-r2granite-embedding-311m-multilingual-r2입니다.

이 글에서는 이 모델들의 핵심 특징, 벤치마크 성능, 그리고 실무에서 어떻게 활용할 수 있는지 자세히 살펴보겠습니다. 근거자료는 원문 블로그에서 확인하실 수 있습니다.

IBM Granite Embedding Multilingual R2 model architecture diagram showing ModernBERT encoder with 32K context window Algorithm Concept Visual

핵심 성능: 97M 모델이 300M 모델을 이기다?

이번 릴리스의 진짜 놀라운 점은 granite-embedding-97m-multilingual-r2입니다. 고작 97M 파라미터로 MTEB Multilingual Retrieval 벤치마크에서 60.3점을 기록했는데, 이는 동급 크기(100M 미만)의 공개 모델 중 가장 높은 점수입니다. 비교를 위해 같은 벤치마크에서 multilingual-e5-small(118M)은 50.9점에 그쳤죠. 무려 +9.4점 차이입니다.

더 충격적인 건? 이 97M 모델이 3배나 큰 multilingual-e5-base(278M)와 gte-multilingual-base(305M)를 평균 점수에서 앞질렀다는 점입니다.

주요 벤치마크 점수 (MTEB Multilingual Retrieval)

모델파라미터점수
granite-embedding-97m-multilingual-r297M60.3
multilingual-e5-small118M50.9
multilingual-e5-base278M52.7
gte-multilingual-base305M57.2
granite-embedding-311m-multilingual-r2311M65.2

311M 모델은 같은 벤치마크에서 65.2점을 기록하며 500M 미만 공개 모델 중 2위에 올랐습니다. 1위는 harrier-oss-v1-270m(66.4)이지만, Granite 311M은 LongEmbed 벤치마크에서 71.7점으로 1위를 차지하며 긴 문서 검색에서 강점을 보여줍니다.

32K 컨텍스트의 힘

이전 R1 모델은 고작 512 토큰 컨텍스트만 지원했습니다. 법률 계약서나 기술 매뉴얼 같은 긴 문서는 '첫 페이지만 보고 판단'하는 꼴이었죠. R2는 ModernBERT 기반으로 **32,768 토큰(32K)**까지 지원합니다. R1 대비 64배 증가한 수치입니다. 실제로 LongEmbed 점수는 97M 모델이 +31.3점, 311M 모델이 +34.0점 상승했습니다.

코드 검색 성능 향상

9개 프로그래밍 언어(Python, Go, Java, JavaScript, PHP, Ruby, SQL, C, C++)에 대한 코드 검색 성능도 대폭 개선되었습니다. R1 대비 97M 모델은 +19.7점, 311M 모델은 +15.3점 상승했어요. 다국어 팀에서 코드베이스를 검색할 때 유용하겠죠?

MTEB Multilingual Retrieval benchmark comparison table highlighting granite-embedding-97m-r2 vs competitors Programming Illustration

실전 적용: 5줄이면 끝나는 다국어 RAG

이 모델들의 가장 큰 장점은 별도의 태스크 명령어(task-specific instruction) 없이 바로 사용할 수 있다는 점입니다. 기존에 all-MiniLM-L6-v2를 쓰던 코드에서 모델 이름만 바꾸면 200+ 언어 지원이 끝납니다.

Sentence Transformers로 바로 시작하기

from sentence_transformers import SentenceTransformer, util

# 97M 모델 로드 (195MB, ONNX 양자화 시 98MB)
model = SentenceTransformer("ibm-granite/granite-embedding-97m-multilingual-r2")

# 다국어 쿼리와 문서 준비
queries = [
    "What is the tallest mountain in Japan?",  # 영어
    "Wer hat das Lied Achy Breaky Heart geschrieben?",  # 독일어
    "ドイツの首都はどこですか?",  # 일본어
]

passages = [
    "富士山は、静岡県と山梨県にまたがる活火山で、標高3776.12 mで日本最高峰の独立峰である。",  # 일본어
    "Achy Breaky Heart is a country song written by Don Von Tress.",  # 영어
    "Berlin ist die Hauptstadt und ein Land der Bundesrepublik Deutschland.",  # 독일어
]

# 임베딩 생성
q_emb = model.encode(queries)
p_emb = model.encode(passages)

print(util.cos_sim(q_emb, p_emb))
# 각 쿼리는 언어와 관계없이 자신의 문서와 가장 높은 점수를 기록합니다

LangChain에서 사용하기

from langchain_huggingface import HuggingFaceEmbeddings

# 모델명만 변경하면 끝!
embeddings = HuggingFaceEmbeddings(
    model_name="ibm-granite/granite-embedding-97m-multilingual-r2"
)

docs = embeddings.embed_documents([
    "한국어 문서도 문제없습니다.",
    "English document works too.",
])
query = embeddings.embed_query("What is this about?")

311M 모델의 Matryoshka 임베딩 활용

311M 모델은 Matryoshka Representation Learning을 지원합니다. 768차원 임베딩을 128차원까지 자를 수 있는데, 성능 저하는 거의 없습니다.

from sentence_transformers import SentenceTransformer

model = SentenceTransformer("ibm-granite/granite-embedding-311m-multilingual-r2")

# 전체 768차원
full = model.encode(["example text"])
print(full.shape)  # (1, 768)

# 384차원으로 자르기 (97M 모델과 동일 차원)
small = model.encode(["example text"], truncate_dim=384)
print(small.shape)  # (1, 384)

# 768→256차원: 저장 공간 1/3로 줄면서 성능은 99% 유지

256차원으로 줄여도 MTEB Multilingual Retrieval 점수가 65.2→64.7(-0.5)밖에 떨어지지 않습니다. 저장 공간과 검색 속도를 최적화해야 하는 프로덕션 환경에서 특히 유용하겠죠.

한국 개발 생태계에서의 적용 맥락

국내 SI나 스타트업 환경에서는 다국어 지원이 '있으면 좋고' 수준이 아니라 '필수'인 경우가 많습니다. 특히 글로벌향 B2B SaaS나跨境 전자상거래 플랫폼을 운영한다면 이 모델이 딱 맞습니다.

  • 법률/계약서 검색: 영문 계약서와 한글 번역본을 동시에 검색해야 할 때, 32K 컨텍스트로 계약서 전체를 한 번에 임베딩 가능
  • 기술 문서 RAG: 글로벌 개발팀의 영어/한국어/일본어 기술 문서를 하나의 벡터 DB로 통합
  • 고객센터 챗봇: 다국어 문의를 언어별로 분류하지 않고 단일 파이프라인으로 처리

이 기술의 한계 또는 주의사항

  1. 97M 모델의 교차언어 전이 한계: Belebele 벤치마크에서 97M R2 모델(52.9)이 이전 R1(55.1)보다 낮은 점수를 기록했습니다. 이는 프루닝 과정에서 발생한 트레이드오프입니다. 진정한 교차언어 검색이 필요하다면 311M 모델을 선택하세요.
  2. 일부 경쟁 모델 대비 MTEB 점수: harrier-oss-v1-270m이 MTEB Multilingual Retrieval에서 66.4로 1위입니다. 최고 성능이 절대적으로 필요하다면 해당 모델도 고려해보세요.
  3. 속도 vs 성능 트레이드오프: 311M 모델은 jina-embeddings-v5-text-nano 대비 5.5배 빠르지만, harrier-oss-v1-270m이 속도와 성능 모두에서 더 나은 조합을 보여줍니다.

다음 단계 학습 방향

  • 파인튜닝 고려: 도메인 특화 검색이 필요하다면 이 모델을 베이스로 파인튜닝하는 방법을 연구해보세요.
  • 양자화 실험: ONNX/OpenVINO 가중치를 활용한 CPU 추론 최적화를 시도해보세요. 97M 모델의 ONNX 가중치는 98MB에 불과합니다.
  • 벡터 DB 통합: Milvus, Pinecone, Weaviate 등과의 통합을 통해 실제 프로덕션 파이프라인을 구축해보세요.

Developer deploying multilingual embedding model on server for RAG pipeline with LangChain and Haystack Software Concept Art

결론: 지금 바로 교체할 가치가 있는 모델

IBM Granite Embedding Multilingual R2 시리즈는 '작지만 강한' 97M 모델과 '크고 강한' 311M 모델이라는 두 가지 확실한 선택지를 제공합니다.

  • 빠른 프로토타이핑이나 엣지 디바이스granite-embedding-97m-multilingual-r2 (195MB, 384차원)
  • 최고의 검색 품질과 유연한 차원 선택granite-embedding-311m-multilingual-r2 (Matryoshka, 768차원)
  • 영어만 필요하다면granite-embedding-english-r2 (149M) 또는 granite-embedding-small-english-r2 (47M)

특히 프레임워크 유지보수자나 라이브러리 개발자라면, 기존 영어 전용 모델을 이 모델로 한 줄만 바꿔도 커뮤니티 전체에 200+ 언어 지원이 자동으로 추가됩니다. API 변경도, 새 의존성도 필요 없습니다.

Apache 2.0 라이선스로 상용 사용도 자유롭습니다. MS-MARCO 데이터셋을 사용하지 않아 라이선스 리스크도 낮췄다고 하니, 엔터프라이즈 환경에서도 안심하고 도입할 수 있겠네요.

지금 바로 허깅페이스에서 모델을 다운로드받아 테스트해보세요. 5줄이면 다국어 RAG의 세계가 열립니다.


함께 보면 좋은 글

본 콘텐츠는 신뢰할 수 있는 출처를 바탕으로 AI 도구를 활용하여 초안이 작성되었으며, 편집자의 검토를 거쳐 발행되었습니다. 전문가의 조언을 대체하지 않습니다.