mmBERT — это многоязычная encoder-only модель от Johns Hopkins University (JHU-CLSP), обученная на 1833 языках. Модель превосходит XLM-R на ~2-3 балла по основным мультиязычным бенчмаркам. Что это значит на практике?
Что такое mmBERT
mmBERT (Massively Multilingual BERT) — encoder-only модель, разработанная исследователями из JHU-CLSP (Marc Marone, Orion Weller и др.). Обучена на 3 токенах multilingual text. Использует архитектуру ModernBERT с RoPE, GLU activations и Flash Attention 2.
- Масштаб: 307M параметров (base), 140M (small).
- Данные: обучена на 1833 языках (vs 104 у XLM-R).
- Контекст: до 8192 токенов (vs 512 у XLM-R).
- Тренировка: MLM с annealed language learning — языки добавляются поэтапно: 60 high-resource (pre-training), 50 mid-resource (mid-training), 1723 low-resource (decay phase).
Результаты бенчмарков
По данным оригинальной статьи (arXiv:2509.06888), mmBERT значительно превосходит предыдущее поколение мультиязычных энкодеров:
- XTREME: +2.4 балла в среднем vs предыдущие модели
- GLUE: +3.0 балла
- Скорость: 2-4x быстрее inference чем XLM-R
- Контекст: 8192 токенов (в 16 раз больше XLM-R)
mmBERT показывает сопоставимые результаты с моделями уровня OpenAI o3 и Google Gemini 2.5 Pro на задачах классификации, значительно превосходя предыдущее поколение энкодеров на both high-resource и low-resource языках.
Практическое применение
Мультиязычная NER
Извлечение сущностей (имена, организации, даты) из текстов на разных языках. mmBERT работает как drop-in замена XLM-R с лучшим качеством.
Классификация текстов
Мультиязычная классификация: тональность, тематика, спам. Особенно эффективен для редких языков.
Семантический поиск
Мультиязычный поиск по базе документов с extended контекстом (8192 токенов).
Как использовать
Установка
pip install torch>=1.9.0
pip install transformers>=4.48.0
Пример: получение эмбеддингов
from transformers import AutoTokenizer, AutoModel
tokenizer = AutoTokenizer.from_pretrained("jhu-clsp/mmbert-base")
model = AutoModel.from_pretrained("jhu-clsp/mmbert-base")
# Мультиязычные эмбеддинги
inputs = tokenizer("Hello world! Привет мир!", return_tensors="pt")
outputs = model(**inputs)
embeddings = outputs.last_hidden_state.mean(dim=1)
Пример: классификация
from transformers import AutoTokenizer, AutoModel
import torch.nn as nn
tokenizer = AutoTokenizer.from_pretrained("jhu-clsp/mmbert-base")
encoder = AutoModel.from_pretrained("jhu-clsp/mmbert-base")
# Добавление classification head
class Classifier(nn.Module):
def __init__(self, encoder, num_classes):
super().__init__()
self.encoder = encoder
self.classifier = nn.Linear(encoder.config.hidden_size, num_classes)
def forward(self, input_ids, attention_mask=None):
outputs = self.encoder(input_ids, attention_mask=attention_mask)
pooled = outputs.last_hidden_state[:, 0] # [CLS] token
return self.classifier(pooled)
Сравнение с альтернативами
| Модель | Параметры | Языки | Контекст | Скорость |
|---|---|---|---|---|
| mmBERT-base | 307M | 1833 | 8192 | Быстрый |
| mmBERT-small | 140M | 1833 | 8192 | Очень быстрый |
| XLM-R | 550M | 100 | 512 | Средний |
| mBERT | 110M | 104 | 512 | Средний |
Ограничения
- Структурные задачи: NER, POS-теггинг показывают slightly lower scores из-за tokenizer prefix space handling.
- Очень редкие языки: всё ещё имеют limited training data.
- Данные: высококачественный educational content доступен не на всех языках.
Часто задаваемые вопросы
mmBERT заменит XLM-R?
Для большинства мультиязычных задач — да. mmBERT быстрее, поддерживает больше языков и имеет более длинный контекст.
Можно ли дообучить mmBERT?
Да. mmBERT работает как drop-in замена XLM-R — загрузите модель и добавьте task-specific head.
Где получить модель?
HuggingFace: jhu-clsp/mmbert-base и jhu-clsp/mmbert-small. GitHub: github.com/jhu-clsp/mmBERT. Статья: arXiv:2509.06888.