Однажды при мне два ИИ экcперта закусились на тему какая модель лучше извлекает именованные данные на русском языке: RuModernBERT или multilingual-e5-base. Я послушал их аргументы и решил поставить небольшой эксперимент на реальных данных (благо данных хоть отбавляй).
Итак, условия NER задачи:
В качестве данных, откуда извлекаются именованные сущности используется массив сообщений от пользователей, которые общаются с цифровым ассистентом. Т.е. это то, что пишут (или говорят) пользователи руками (голосом), с ошибками, опечатками и т.д. Настоящая такая raw data.
В этих данных требуется выделить несколько именованных сущностей, а именно:
ФИО
Адрес
Организация
Дата
Ссылка
Телефон
Число
Мероприятие
Требуется провести разметку по не пересекающимся классам. Пример: “хочу купить билет на Лебединое озеро в Мариинский театр”
Кратко приведу таблицу сравнения двух моделей:
|
RuModernBERT |
multilingual-e5-base |
|
|
Тип модели |
BERT-производная (MLM) |
Contrastive/семантическая |
|
Число параметров |
150M |
280M |
|
Языки |
Русский-английский |
100+, включая русский |
Для тех кому лень дальше читать, убью интригу и сразу озвучу результат: при должной настройке multilingual-e5-base показывает ощутимо лучший результат при извлечении именованных сущностей в отличие от RuModernBERT.
Можно также сразу пролистать в конец статьи, там будет та же самая таблица (начало таблицы такое же), но уже с заполненными данными по результатам эксперимента: Train loss / Val loss поведение для каждой модели, чувствительность к границам и т.д.
Для обучения и дальнейшего сравнения моделей был выбран датасет вручную размеченных данных состоящий в общей сложности из 8 873 записей. Все данные были собраны и размечены вручную, т.е. не было никакой синтетики.
Валидация осуществлялась на 10% отложенном контрольном датасете.
В качестве метрики для сравнения была выбрана метрика IoU (микро, посимвольная). Немного остановлюсь на том, почему именно такая метрика, а не F1 например.
Intersection over Union - это мера пересечения двух множеств, интуитивно ее можно понять так:
1.0 идеально совпали
0.0 вообще не пересеклись
0.5 совпала ровно половина
В нашем случае расчет метрики был посимвольным, так как важны точные границы (простой пример, если пользователь пишет e-mail, а NER отрезал от него один символ, то такой NER не нужен).
А микро отвечает за то, что сначала суммируются все TP/FP/FN по всем классам и только потом считается итоговый IoU. Это важно, так как классы не сбалансированы и существенное значение имеет ошибка в любом классе.
А теперь почему не F1. Дьявол, как говорится, в деталях. Есть три самые распространенные F1 метрики и у каждой из них свои недостатки по сравнению с выбранной IoU метрикой:
1) Strict span-level - слишком чувствительна к мелким огрехам в границах
2) Token-level - сильно зависит от токенизации
3) Char-level - так как извлекаемые сущности (имя, название, телефон и т.д.) короткие, то эта метрика менее чувствительна, чем IoU
Итого, в целом, для задачи c короткими текстами и сущностями, метрика IoU лучше отражает реальную долю корректно выделенных символов чем метрика F1, которая либо слишком дискретна, либо частично обнуляет совпадения либо зависит от токенизатора.
Learning Rate - подбирался эмпирически отдельно для каждой модели. Начало с 3e-4 и далее по логарифмической шкале с шагом 3 до 1e-6. Т.е. 0.0003 делится на 3 и так далее до 0.000001. LR - шаг обновления весов модели, если взять его слишком большим, то модель “развалится”, не будет сходиться, если взять слишком маленьким, обучение займет вечность. Собственно выбирали такой LR, чтобы train loss (как и val loss) монотонно убывал, без скачков и дивергенции.
Learning Rate Warmup - использовался в начале обучения для того, чтобы не порушить веса уже обученной модели на самых первых итерациях. Если сразу начать кардинально менять веса уже обученной модели, она быстро забудет все, чему ее учили.
Reduce On Plateau - использовалась стратегия при которой если метрика больше не растет, то LR автоматически уменьшается. Другими словами, вначале идем большими шагами, а когда достигаем искомого минимума потерь, то начинаем идти маленькими, чтобы не проскочить искомый минимум. Здесь подбирается два значения:
p - сколько проверок подряд нет улучшения
factor - множитель для LR, т.е. во сколько раз уменьшаем LR если нет улучшения
Early Stopping - останавливаем обучение если нет улучшений на нескольких итерациях. Вместо эпох используется стратегия обучения по шагам, это дает лучшую воспроизводимость экспериментов.
Evaluation - для экономии ресурсов прогоняем валидационный датасет каждые N шагов, смотрим как поменялась метрика
Обучалась вся модель целиком, без частичного замораживания весов или адаптеров типа Lora. По итогу берется лучшая модель по validation loss. Наилучшие результаты модели показали при следующих значениях гиперпараметров:
|
Гиперпараметр |
RuModernBERT-base |
multilingual-e5-base |
|
Learning Rate |
0.00003 |
0.00001 |
|
Learning Rate Warmup |
первые 250 шагов |
|
|
Reduce On Plateau |
p = 3; factor = 0.5 |
|
|
Early Stopping |
10 итераций |
|
|
Evaluation |
каждые 74 шага |
каждые 370 шагов |
В целом метрика IoU (микро, посимвольная) для двух моделей получилась следующая:
RuModernBERT: 0.8655
multilingual-e5-base: 0.9169
Таким образом, результат E5 статистически лучше RuModernBERT.
Также интерес представляют значения метрики по отдельным классам:
|
Извлекаемый класс |
RuModernBERT-base |
multilingual-e5-base |
|
ФИО |
0.9698 |
0.9634 |
|
Адрес |
0.7863 |
0.8874 |
|
Организация |
0.7198 |
0.7855 |
|
Дата |
0.9168 |
0.9817 |
|
Ссылка |
0.9151 |
0.9590 |
|
Телефон |
0.9865 |
0.9589 |
|
|
0.9580 |
0.9917 |
|
Число |
0.9228 |
0.9477 |
|
Мероприятие |
0.7713 |
0.8417 |
|
IoU (микро, посимвольная) |
0.8655 |
0.9169 |
|
Показатель |
RuModernBERT-base |
multilingual-e5-base |
|
Тип модели |
BERT-производная (MLM) |
Contrastive/семантическая |
|
Число параметров |
150M |
280M |
|
Языки |
Русский-английский |
100+, включая русский |
|
Предобучение |
MLM (маскирование) |
Contrastive InfoNCE (семантические пары) |
|
Токенизация |
двуязычный WordPiece |
SentencePiece (мультиязычный) |
|
Train loss / Val loss поведение |
Требует более аккуратного LR, меньше устойчивости при больших шагах |
Более стабильный при умеренных шагах |
|
Overall char-level micro IoU |
0.8655 |
0.9169 |
|
Чувствительность к границам |
Ниже |
Выше |
|
Производительность на простых сущностях |
Хорошая |
Отличная |
|
Производительность на сложных/семантических сущностях |
Отстаёт |
Выше |
|
Зависимость от токенизации |
Средняя (WordPiece) |
Меньше — в inference используется агрегатор |
|
Инференс |
Через pipeline + пост-обработка |
Через pipeline + пост-обработка |
|
Рекомендуемое применение |
Лёгкие модели / ограниченные ресурсы |
Продакшен-уровень NER с лучшей точностью |
Источник


