본문으로 건너뛰기

© 2026 Molayo

HuggingFace헤드라인2026. 05. 20. 00:28

Ettin Reranker 제품군 소개

요약

Ettin ModernBERT 인코더를 기반으로 한 6가지 크기의 새로운 Sentence Transformers CrossEncoder 리랭커 제품군이 공개되었습니다. 이 모델들은 증류(distillation) 기법을 통해 학습되었으며, 검색 후 리랭킹(retrieve-then-rerank) 패턴을 통해 검색 정확도와 비용 효율성을 동시에 최적화합니다.

핵심 포인트

  • ModernBERT 인코더를 기반으로 17M부터 1B까지 다양한 크기의 6개 리랭커 모델 제공
  • 증류 레시피(distillation recipe)와 포인트와이즈 MSE 방식을 사용하여 학습됨
  • 임베딩 모델과 달리 쿼리와 문서 간의 공동 인코딩(joint encoding)을 통해 높은 정확도 제공
  • 검색 후 리랭킹(retrieve-then-rerank) 전략을 통해 프로덕션 환경에서의 효율적 활용 가능
  • Sentence Transformers 라이브러리를 통해 단 몇 줄의 코드로 간편하게 사용 가능

오늘 저는 Ettin ModernBERT 인코더 (encoders)를 기반으로 구축되어 각 크기별로 최첨단 성능을 자랑하는 6개의 새로운 Sentence Transformers CrossEncoder 리랭커 (rerankers)를 공개합니다. 이와 함께 이를 생성한 데이터와 전체 학습 레시피 (training recipe)도 함께 제공합니다:

cross-encoder/ettin-reranker-17m-v1

cross-encoder/ettin-reranker-32m-v1

cross-encoder/ettin-reranker-68m-v1

cross-encoder/ettin-reranker-150m-v1

cross-encoder/ettin-reranker-400m-v1

cross-encoder/ettin-reranker-1b-v1

이 모델들은 **증류 레시피 (distillation recipe)**를 통해 학습되었습니다: lightonai/embeddings-pre-training의 하위 집합인 cross-encoder/ettin-reranker-v1-data에 대한 mixedbread-ai/mxbai-rerank-large-v2 점수를 바탕으로 한 포인트와이즈 MSE (pointwise MSE) 방식을 사용하였으며, 여기에 lightonai/embeddings-fine-tuning의 리랭크된 하위 집합을 혼합하였습니다.

저희의 6개 리랭커는 MTEB(eng, v2) 검색 (Retrieval) 작업에서 google/embeddinggemma-300m과 결합되었습니다. 5가지 추가 임베더 (embedder) 조합에 대한 결과는 Results 섹션을 참조하세요.

리랭커가 처음이시고

쌍(pair)을 입력받아 단일 관련성 점수(relevance score)를 출력합니다. 쿼리(query)와 문서(document)를 각각 인코딩하여 두 임베딩 벡터 사이의 유사도를 계산하는 임베딩 모델(embedding model)과 달리, 리랭커(reranker)는 두 텍스트가 모든 트랜스포머 레이어(transformer layer)를 통해 서로를 참조(attend)할 수 있게 합니다. 이러한 공동 인코딩(joint encoding)은 더 정확하지만 비용도 더 많이 듭니다. 모델을 텍스트당 한 번이 아니라, (query, document) 쌍당 한 번씩 실행해야 하기 때문입니다.

크로스-인코더(cross-encoder)는 전체 코퍼스(corpus)에 대해 실행하기에는 비용이 너무 많이 들기 때문에, 일반적인 프로덕션 패턴은 **검색 후 리랭킹 (retrieve-then-rerank)**입니다. 즉, 빠른 임베딩 모델이 상위 K개의 후보(top-K candidates)를 저렴하게 검색(retrieve)한 다음, 크로스-인코더가 오직 그 K개에 대해서만 높은 정확도로 순위를 재조정(re-order)하는 방식입니다. 이렇게 하면 최종 순위는 전체 코퍼스를 크로스-인코더로 전수 조사했을 때의 결과에 훨씬 가까워지면서도, 총 비용은 제한된 범위 내로 유지할 수 있습니다.

이 블로그 포스트 전반에 걸쳐 저는 "리랭커(reranker)"와 "크로스-인코더(cross-encoder)"를 혼용하여 사용할 것입니다.

출시된 모델들은 일반적인 Sentence Transformers의 CrossEncoder 모델이므로, 단 3줄의 코드로 사용할 수 있습니다:

from sentence_transformers import CrossEncoder
model = CrossEncoder("cross-encoder/ettin-reranker-32m-v1")
scores = model.predict([
...

쿼리와 후보 목록에 대해, 정렬된 인덱스(indices)와 점수를 얻으려면 rank를 사용할 수도 있습니다:

ranked = model.rank(
query="Which planet is known as the Red Planet?",
documents=[
...

품질과 속도 사이의 트레이드오프(trade-off)를 위해 cross-encoder/ettin-reranker-32m-v1을 다른 크기의 모델로 교체할 수 있습니다. 6개 모델 모두 ModernBERT의 긴 문맥 사전 학습(long-context pre-training) 덕분에 최대 8K 토큰의 문맥(context)을 수용할 수 있습니다 (이는 긴 문서 리랭킹에 유용합니다).

최고의 처리량(throughput)을 위해 kernels를 설치하고 model_kwargs={"dtype": "bfloat16", "attn_implementation": "flash_attention_2"}를 설정하는 것을 권장합니다. 자세한 내용은 아래의 Speed 섹션을 참조하세요. 일반적으로 모델 크기와 시퀀스 길이(sequence length)에 따라 기본 로딩 대비 1.7배에서 8.3배의 속도 향상을 기대할 수 있습니다.

from sentence_transformers import CrossEncoder
model = CrossEncoder(
"cross-encoder/ettin-reranker-32m-v1",
...

검색을 위한 빠른 임베더(embedder)와 최종 순위 결정을 위한 리랭커(reranker)를 사용하는 완전한 예시입니다:

from sentence_transformers import SentenceTransformer, CrossEncoder
# 정적 임베더를 이용한 빠른 검색 (CPU에서 쿼리당 1밀리초 미만)
embedder = SentenceTransformer("sentence-transformers/static-retrieval-mrl-en-v1")
...

이는 대부분의 현대적인 검색 시스템에서 사용되는 것과 동일한 구조입니다. 리트리버(retriever)는 깔때기(funnel)에 무엇이 들어올지를 결정하고, 리랭커(reranker)는 무엇이 승리할지를 결정합니다.

6개의 리랭커 모두 동일한 아키텍처를 공유하며, 백본(backbone) 크기만 다릅니다. 백본은 Johns Hopkins University의 Ettin 제품군 중 6개의 Ettin 인코더 중 하나입니다. 이들은 unpadded attention, RoPE 위치 인코딩(positional encodings), GeGLU를 사용하며, 2T 토큰의 오픈 라이선스 사전 학습(pre-training)을 거친 ModernBERT 스타일의 모델로, 최대 8192 토큰의 컨텍스트(context)를 지원합니다.

각 인코더 상단에서, 리랭커는 ModernBertForSequenceClassification을 반영하지만 Sentence Transformers의 모듈형 구성 요소로 구축된 4-모듈 분류 헤드(classification head)를 사용합니다. 기반이 되는 TransformerAutoModelForSequenceClassification이 아닌 일반 AutoModel이므로, Flash Attention 2를 위해 가변 길이 입력에 대한 시퀀스 언패딩(sequence unpadding)을 사용할 수 있습니다. 중간 길이의 문서 시퀀스에서 이는 모델 크기에 따라 fp32+SDPA 대비 1.7배에서 8.3배의 속도 향상을 제공합니다 (전체 벤치마크는 Speed 섹션 참조):

1. Transformer(FA2)
2. Pooling(cls)
3. Dense(H, H, bias=False, GELU)
...

저의 절제 연구(ablations) 결과, CLS 풀링(pooling)이 평균 풀링(mean pooling)보다 성능이 뛰어났습니다. 이는 다소 놀라운 결과였습니다. ModernBERT는 매 세 번째 레이어에서만 글로벌 어텐션(global attention)을 사용하고, 나머지 3분의 2는 먼 위치에서 CLS에 도달할 수 없는 로컬 윈도우 어텐션(local-window attention)을 사용합니다. 경험적으로 볼 때, 그 소수의 글로벌 레이어들이 CLS를 더 나은 풀링 선택지로 만들기에 충분한 신호를 전달합니다.

ModelBackboneHidden sizeLayersParams (head incl.)
cross-encoder/ettin-reranker-17m-v1jhu-clsp/ettin-encoder-17m256717.6M
cross-encoder/ettin-reranker-32m-v1jhu-clsp/ettin-encoder-32m3841032.8M
cross-encoder/ettin-reranker-68m-v1jhu-clsp/ettin-encoder-68m5121968.6M
cross-encoder/ettin-reranker-150m-v1jhu-clsp/ettin-encoder-150m76822150.9M
cross-encoder/ettin-reranker-400m-v1jhu-clsp/ettin-encoder-400m102428401.6M
cross-encoder/ettin-reranker-1b-v1jhu-clsp/ettin-encoder-1b1792281.00B

여섯 가지 모델 모두 Ettin 인코더와 동일하게 Apache 2.0 라이선스로 공개되었습니다.

저는 출시된 각 모델을 전체 MTEB(eng, v2) 검색 벤치마크(10개 작업, 상위-100 재순위화)에 통과시켰습니다. 이 과정은 MTEB의 2단계 재순위화 흐름을 사용하며, 각 재순위화기(reranker)를 속도/품질 스펙트럼을 아우르는 여섯 개의 임베딩 모델과 페어링했습니다:

Embedding ModelActive paramsRetriever-only NDCG@10
sentence-transformers/static-retrieval-mrl-en-v10M0.3495
sentence-transformers/all-MiniLM-L6-v223M0.4292
BAAI/bge-small-en-v1.533M0.5149
nomic-ai/nomic-embed-text-v1.5137M0.5226
google/embeddinggemma-300m308M0.5463
jinaai/jina-embeddings-v5-text-small-retrieval596M0.5980

아래 각 차트의 **점선(dashed retriever-only line)**은 넘어야 할 기준 수치입니다. 이보다 낮은 값은 재순위화기가 평균적으로 파이프라인에 부정적인 영향을 미친다는 것을 의미합니다:

전체 결과표 (클릭하여 확장)

6개 임베더 페어링에 걸친 평균 NDCG@10을 내림차순으로 정렬했습니다. 저희의 여섯 가지 모델은 굵게 표시되어 있으며, 교사(teacher)인 mixedbread-ai/mxbai-rerank-large-v2는 밑줄이 쳐져 있습니다.

max_seq_length=8192로 제한됨
(4B Qwen3 기반 재순위화기는 네이티브 컨텍스트에서 단일 H100 80GB에 맞지 않습니다). 네이티브-컨텍스트 평가는 더 높을 가능성이 있습니다.

NanoBEIR 결과 전체표 (클릭하여 확장)

NanoBEIR는 BEIR의 13개 데이터셋 서브셋(subset)으로, 각 데이터셋당 최대 5,000개의 문서에 대해 50개의 쿼리를 사용하는 빠른 평가 방식입니다. NanoBEIR는 학습 중에 metric_for_best_model로 설정된 기준이며(평가(Evaluation) 섹션 참조), 제가 실험을 가이드하는 데 사용한 지표입니다.

RerankerParamsNanoBEIR mean NDCG@10
mixedbread-ai/mxbai-rerank-large-v21.54B0.7318
cross-encoder/ettin-reranker-1b-v11.00B0.7237
jinaai/jina-reranker-m02.44B0.7197
cross-encoder/ettin-reranker-400m-v1401M0.7193
mixedbread-ai/mxbai-rerank-base-v2494M0.7162
cross-encoder/ettin-reranker-150m-v1151M0.7086
Alibaba-NLP/gte-reranker-modernbert-base150M0.7017
BAAI/bge-reranker-v2-m3568M0.6971
cross-encoder/ettin-reranker-68m-v168.6M0.6915
ibm-granite/granite-embedding-reranker-english-r2150M0.6909
cross-encoder/ettin-reranker-32m-v132.8M0.6825
cross-encoder/ettin-reranker-17m-v117.6M0.6746
mixedbread-ai/mxbai-rerank-large-v1435M0.6488
BAAI/bge-reranker-large560M0.6379
cross-encoder/ms-marco-MiniLM-L12-v233.4M0.6369
cross-encoder/ms-marco-MiniLM-L6-v222.7M0.6312
cross-encoder/ms-marco-MiniLM-L4-v219.2M0.6298
mixedbread-ai/mxbai-rerank-base-v1184M0.6231
mixedbread-ai/mxbai-rerank-xsmall-v170.8M0.6136
BAAI/bge-reranker-base278M0.6027

제가 출시하는 가장 작은 모델인 17M 모델은 파라미터(parameter) 수가 거의 절반 수준임에도 불구하고, MTEB에서 33M ms-marco-MiniLM-L12-v2를 +0.051 NDCG@10 (0.5576 vs 0.5066)만큼 앞서며, NanoBEIR에서는 +0.038 (0.6746 vs 0.6369)만큼 앞섭니다. 32M 모델은 17배의 파라미터 격차가 있는 568M BAAI/bge-reranker-v2-m3를 MTEB에서 +0.025 (0.5779 vs 0.5526)만큼 앞섭니다. 만약 여러분이 검색 후 재순위화(retrieve-then-rerank) 스택의 기본값으로 기존의 MiniLM 리랭커(reranker) 중 하나를 사용해 오셨다면, 저희의 17M(또는 32M) 모델로 교체하는 것은 두 벤치마크 모두에서 눈에 띄는 품질 향상을 가져오면서도 위험 부담이 적은 즉각적인 교체(drop-in replacement)가 될 것입니다.

표의 위쪽으로 올라가 보면, 우리의 150M 모델은 MTEB에서 제가 테스트한 600M 미만 범위 중 가장 강력한 리랭커(reranker)이며, 최근의 Qwen/Qwen3-Reranker-0.6B (596M)를 +0.005 (+0.005, 0.5994 대 0.5940) 차이로 근소하게 앞질렀고, 모든 BAAI bge-reranker 변형 모델들을 0.03에서 0.05 차이로 능가했습니다. 68M 모델 또한 언급할 가치가 있습니다. 0.5915를 기록하며 파라미터(parameter) 수를 9분의 1만 사용하고도 Qwen3-Reranker-0.6B (0.5940)와 거의 정확히 일치하는 성능을 보여주었습니다.

출시된 범위의 최상단에서는, 우리의 1B 모델이 스승 모델(teacher model)의 성능을 밀접하게 추적합니다. 이 모델은 자신보다 54% 더 큰 모델로부터 지식 증류(distillation)를 수행했음에도 불구하고, MTEB에서 1.54B mxbai-rerank-large-v2와 0.0001 차이(0.6114 대 0.6115)를 보였으며, NanoBEIR에서는 0.008 차이 이내로 들어왔습니다. 지식 증류는 스승 모델과의 격차를 효과적으로 좁혔으며, 이는 제가 이번 출시를 앞두고 기대했던 결과였습니다.

비교 대상 중 전체적으로 가장 강력한 리랭커는 MTEB에서 0.6367을 기록한 Qwen/Qwen3-Reranker-4B로, 우리의 1B 모델보다 +0.025 높습니다. 현재의 레시피(recipe)에서 그 격차를 줄이려면 더 강력한 스승 모델로부터 지식 증류를 수행해야 할 것입니다 (우리의 스승 모델 자체도 Qwen3-Reranker-4B보다는 아래에 위치합니다). 대부분의 검색 후 재순위화(retrieve-then-rerank) 워크로드의 경우, 파라미터 수가 4분의 1 수준인 우리의 1B 모델(속도 섹션 참조)이 훨씬 더 실용적인 선택입니다.

품질 수치는 리랭커에서 중요한 요소의 절반에 불과합니다. 나머지 절반은 지연 시간(latency)이 검색(retrieval)과 사용자에게 결과를 보여주는 사이의 예산(budget) 내에 들어오는지 여부입니다. 제가 측정한 내용을 설명해 드리겠습니다.

저는 단일 NVIDIA H100 80GB에서 출시된 6개 모델 모두를 13개의 공개 리랭커(약 1B 파라미터까지의 강력한 베이스라인)와 비교하여 벤치마크했습니다. 쿼리(query)와 문서(document)는 sentence-transformers/natural-questions에서 가져왔으며, 자연스러운 문서 길이 분포를 따릅니다. 대부분의 NQ 답변은 짧고 일부는 깁니다. 문서는 max_length=512에서 잘립니다(truncated).

이전 모델들에게 불공평한 이점을 주지 않기 위해서입니다. 각 모델은 지원 가능한 최적의 어텐션 (Attention) 구현 방식을 사용합니다. 아키텍처가 지원하는 경우(BERT, XLM-RoBERTa, ModernBERT, Qwen2)에는 Flash Attention 2를 사용하고, 지원하지 않는 경우에는 SDPA를 사용하며, DeBERTa-v2의 경우 (현재 transformers 라이브러리에서 FA2와 SDPA를 모두 지원하지 않으므로) eager 방식을 사용합니다.

모든 모델에 대해 자동 배치 (auto-batch) 검색을 수행하며, 배치 크기 (batch size) 8에서 시작하여 GPU 메모리가 부족해질 때까지 두 배씩 늘려갑니다. 각 배치 크기마다 세 번의 시간 측정 패스 (timed passes)를 실행하고 그 중앙값 (median) 처리량 (throughput)을 유지하여, 단 한 번의 운 나쁜 실행 결과가 수치를 끌어내리지 않도록 합니다. 보고된 처리량은 가장 높은 성능을 보인 배치 크기를 기준으로 합니다.

표 1. 초당 쌍(pairs) 단위 처리량, 모두 bfloat16 기준. 당사의 6개 리랭커 (rerankers)는 굵게 표시되어 있습니다.

AI 자동 생성 콘텐츠

본 콘텐츠는 Hugging Face Blog의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.

원문 바로가기
1

댓글

0