AI Sparkup

복잡한 AI 세상을 읽는 힘

ModernBERT: 차세대 인코더 모델의 새로운 지평

 이미지 출처: huggingface.co/blog/modernbert

들어가며: 인코더 모델의 재발견

인공지능 분야에서 대형 언어 모델(LLM)이 주목을 받는 동안, 실용적인 AI 애플리케이션의 핵심 역할을 담당하는 ‘인코더 전용(encoder-only)’ 모델들은 상대적으로 주목받지 못했습니다. 2018년에 등장한 BERT는 여전히 허깅페이스 허브에서 두 번째로 많이 다운로드되는 모델일 정도로 널리 사용되고 있습니다. 이처럼 인코더 모델은 검색, 분류, 개체 추출 등 실제 비즈니스 환경에서 핵심적인 역할을 수행하고 있습니다.

Answer.AI와 LightOn에서 개발한 ModernBERT는 BERT의 후속 모델로, 기존 BERT와 완벽히 호환되면서도 속도와 정확도 측면에서 괄목할만한 개선을 이루었습니다. 이 글에서는 ModernBERT의 주요 특징, 기술적 혁신, 그리고 이 모델이 AI 개발자들에게 제공하는 가능성에 대해 자세히 알아보겠습니다.

ModernBERT는 무엇인가?

ModernBERT는 BERT와 같은 인코더 전용 아키텍처를 가진 최신 언어 모델로, 기존 BERT 모델의 단점을 개선하고 최신 LLM 기술을 접목한 차세대 모델입니다. 인코더 모델은 텍스트에서 고품질 임베딩을 생성하여 검색, 분류, 개체 인식 등 다양한 작업에 활용됩니다.

ModernBERT는 다음 두 가지 크기로 제공됩니다:

  • ModernBERT-base: 1억 4천 9백만 파라미터 (149M)
  • ModernBERT-large: 3억 9천 5백만 파라미터 (395M)

기존 BERT와 비교해 무엇이 개선되었나?

1. 확장된 컨텍스트 길이

BERT가 최대 512 토큰만 처리할 수 있었던 것에 비해, ModernBERT는 8,192 토큰까지 처리할 수 있습니다. 이는 모델이 더 긴 문서나 코드를 처리할 수 있게 해주며, 특히 RAG(Retrieval-Augmented Generation) 애플리케이션에서 중요한 개선점입니다.

ModernBERT의 확장된 컨텍스트 길이 이미지 출처: blog.agentdesk.ai

2. 현대화된 트랜스포머 아키텍처

ModernBERT는 최신 트랜스포머 아키텍처 기술을 적용했습니다:

  • 회전 위치 임베딩(RoPE, Rotary Positional Embeddings): 기존 BERT의 위치 인코딩 방식을 대체하여 토큰 간 위치 관계를 더 정확히 이해하고 더 긴 시퀀스 길이를 가능하게 합니다.
  • GeGLU 활성화 함수: 기존 BERT의 GeLU 활성화 함수를 개선하여 모델의 표현력과 효율성을 향상시켰습니다.
  • 불필요한 바이어스 제거: 아키텍처를 간소화하여 파라미터를 더 효율적으로 사용합니다.
  • 임베딩 후 추가 정규화 레이어: 학습 안정성을 향상시킵니다.

3. 교대 어텐션 메커니즘

ModernBERT는 효율성을 위해 교대 어텐션(Alternating Attention) 메커니즘을 도입했습니다:

  • 전역 어텐션(Global Attention): 3번째 레이어마다 적용되며, 모든 토큰이 서로를 참조할 수 있습니다.
  • 지역 어텐션(Local Attention): 나머지 레이어에서는 각 토큰이 주변 128개 토큰만 참조하는 슬라이딩 윈도우 방식을 사용합니다.

이 방식은 긴 시퀀스를 처리할 때 계산 복잡성을 크게 줄여주며, 책을 읽을 때 문장을 이해하기 위해 책 전체를 기억할 필요 없이 현재 맥락만 알면 되는 것과 유사한 원리입니다.

 이미지 출처: huggingface.co/blog/modernbert

4. 언패딩(Unpadding)과 시퀀스 패킹(Sequence Packing)

언패딩은 배치 처리 시 모든 시퀀스를 같은 길이로 맞추기 위해 사용되는 패딩 토큰의 비효율성을 해결합니다. ModernBERT는 패딩 토큰을 제거하고 실제 의미 있는 토큰만 처리하여 10-20%의 성능 향상을 가져옵니다.

 이미지 출처: huggingface.co/blog/modernbert

5. 하드웨어 최적화 설계

ModernBERT는 일반적인 추론용 GPU(RTX 3090/4090, A10, T4, L4 등)에 최적화되도록 설계되었습니다. 레이어 수와 너비를 조정하여 하드웨어 효율성을 극대화했으며, 이는 실제 운영 환경에서 중요한 이점을 제공합니다.

6. 대규모 다양한 학습 데이터

ModernBERT는 웹 문서, 코드, 과학 논문 등 다양한 소스에서 가져온 2조 토큰의 영어 데이터로 학습되었습니다. 특히 코드 데이터가 많이 포함되어 있어 코드 검색 및 이해 작업에서 탁월한 성능을 보입니다.

성능 벤치마크

ModernBERT는 다양한 표준 벤치마크에서 다른 인코더 모델들과 비교해 우수한 성능을 보여줍니다.

1. 자연어 이해(NLU) 성능

GLUE 벤치마크에서 ModernBERT-base는 DeBERTaV3-base를 포함한 기존 인코더 모델들을 뛰어넘는 결과를 보여줍니다. 이는 ModernBERT가 분류 작업에서 매우 효과적임을 의미합니다.

2. 검색 성능

검색 작업에서 ModernBERT는 DPR(Dense Passage Retrieval)과 ColBERT 방식 모두에서 뛰어난 성능을 보입니다. 특히 긴 컨텍스트 검색에서 다른 모델보다 9% 이상 높은 점수를 기록했습니다.

3. 코드 이해 성능

ModernBERT는 코드 검색에서 독보적인 성능을 보이는데, 이는 대량의 코드 데이터로 학습된 최초의 인코더 모델이기 때문입니다. StackOverflow-QA 데이터셋에서 80점 이상을 기록한 유일한 모델입니다.

4. 속도와 효율성

ModernBERT는 DeBERTa보다 2배 빠르며, 가변 길이 입력에서는 최대 4배 빠릅니다. 긴 컨텍스트 추론은 다른 고품질 모델보다 거의 3배 빠릅니다.

ModernBERT의 효율성 비교 이미지 출처: blog.agentdesk.ai

ModernBERT의 실제 활용 사례

ModernBERT는 다음과 같은 분야에서 활용될 수 있습니다:

1. RAG(Retrieval-Augmented Generation) 파이프라인

RAG는 생성형 AI의 핵심 구성 요소로, ModernBERT와 같은 효율적인 인코더 모델을 사용하여 관련 문서를 검색하고 LLM에 제공합니다. ModernBERT의 긴 컨텍스트 길이와 향상된 검색 성능은 RAG 성능을 크게 개선할 수 있습니다.

2. 기업 지식 검색 및 추천 시스템

금융 보고서, 지식 베이스 등 수만 개의 문서를 ModernBERT 임베딩으로 변환하여 효율적인 검색과 추천이 가능합니다. 이는 헬프데스크, 문서 관리, 기업 검색 등에서 사용자 경험을 개선합니다.

3. 코드 검색 및 개발자 도구

ModernBERT는 코드 데이터로 학습되어 프로그래밍 관련 작업에서 탁월한 성능을 보입니다. 기업 코드베이스에서 관련 코드를 빠르게 검색하거나, IDE에 통합하여 개발자 생산성을 향상시킬 수 있습니다.

4. 콘텐츠 분류 및 모더레이션

ModernBERT는 콘텐츠 분류, 스팸 감지, 학대 탐지 등의 작업에 효과적으로 사용될 수 있습니다. 빠른 추론 속도와 높은 정확도는 대규모 플랫폼의 콘텐츠 관리에 이상적입니다.

5. 분류 작업을 통한 LLM 라우팅

사용자 프롬프트를 분석하여 가장 적합한 LLM이나 몇 샷 예제를 선택하는 지능형 LLM 라우터를 구현할 수 있습니다. ModernBERT의 빠른 추론 속도와 정확한 분류 성능은 이런 라우팅 시스템에 이상적입니다.

ModernBERT 활용 방법

ModernBERT는 기존 BERT 기반 모델을 대체하는 용도로 사용될 수 있으며, transformers 라이브러리를 통해 쉽게 사용할 수 있습니다. 다음은 간단한 사용 예시입니다:

# transformers 설치
# pip install git+https://github.com/huggingface/transformers.git

from transformers import AutoTokenizer, AutoModelForMaskedLM
import torch

# 모델 로드
model_id = "answerdotai/ModernBERT-base"
tokenizer = AutoTokenizer.from_pretrained(model_id)
model = AutoModelForMaskedLM.from_pretrained(model_id)

# 마스크드 언어 모델링 예시
text = "The capital of France is [MASK]."
inputs = tokenizer(text, return_tensors="pt")
outputs = model(**inputs)

# 마스크 토큰에 대한 예측 확인
masked_index = inputs["input_ids"][0].tolist().index(tokenizer.mask_token_id)
predicted_token_id = outputs.logits[0, masked_index].argmax(axis=-1)
predicted_token = tokenizer.decode(predicted_token_id)
print("Predicted token:", predicted_token)  # Predicted token: Paris

최대 효율성을 위해 Flash Attention 2를 사용하는 것이 좋습니다:

pip install flash-attn

파인튜닝 예시

ModernBERT는 다운스트림 작업을 위해 파인튜닝할 수 있습니다. 다음은 분류 작업을 위한 파인튜닝 예시입니다:

from transformers import AutoModelForSequenceClassification, Trainer, TrainingArguments
from datasets import load_dataset

# 데이터셋 로드
dataset = load_dataset("legacy-datasets/banking77")
dataset = dataset.rename_column("label", "labels")  # Trainer에 맞게 이름 변경

# 토크나이저 설정
tokenizer.model_max_length = 512  # 시퀀스 길이 설정

# 토크나이징 함수
def tokenize(batch):
    return tokenizer(batch['text'], padding='max_length', truncation=True, return_tensors="pt")

# 데이터셋 토크나이징
tokenized_dataset = dataset.map(tokenize, batched=True, remove_columns=["text"])

# 모델 준비
num_labels = len(dataset["train"].features["labels"].names)
model = AutoModelForSequenceClassification.from_pretrained(
    "answerdotai/ModernBERT-base", 
    num_labels=num_labels
)

# 학습 설정
training_args = TrainingArguments(
    output_dir="modernbert-classifier",
    per_device_train_batch_size=32,
    per_device_eval_batch_size=16,
    learning_rate=5e-5,
    num_train_epochs=5,
    bf16=True,  # bfloat16 학습
    optim="adamw_torch_fused",  # 개선된 옵티마이저
    logging_strategy="steps",
    logging_steps=100,
    eval_strategy="epoch",
    save_strategy="epoch",
    save_total_limit=2,
    load_best_model_at_end=True,
    metric_for_best_model="accuracy",
    report_to="tensorboard",
)

# 트레이너 설정
trainer = Trainer(
    model=model,
    args=training_args,
    train_dataset=tokenized_dataset["train"],
    eval_dataset=tokenized_dataset["test"],
)

# 학습 시작
trainer.train()

결론: ModernBERT가 가져올 변화

ModernBERT는 인코더 모델의 새로운 표준이 될 것으로 기대됩니다. 속도, 효율성, 정확도, 긴 컨텍스트 처리 능력에서의 개선은 실제 AI 애플리케이션 개발에 상당한 이점을 가져올 것입니다.

특히 RAG, 코드 이해, 콘텐츠 분류와 같은 분야에서 ModernBERT의 사용은 기존 모델보다 훨씬 나은 결과를 제공할 것입니다. 또한 소비자급 GPU에서도 효율적으로 작동하므로 더 넓은 범위의 개발자와 기업이 고급 AI 기능을 구현할 수 있습니다.

AI 개발자라면 ModernBERT를 기존 BERT 기반 모델의 대체제로 고려해볼 가치가 있습니다. 더 빠른 속도, 높은 정확도, 긴 컨텍스트 처리 능력은 다양한 프로젝트에서 중요한 이점을 제공할 것입니다.

참고자료:


Awsom GPT에서 더 알아보기

구독을 신청하면 최신 게시물을 이메일로 받아볼 수 있습니다.

Comments