Почему стандартные бенчмарки врут про диалекты
Откройте любой популярный бенчмарк - MMLU, HellaSwag, GSM8K. Все они на английском. Даже если есть арабская версия, это почти всегда Modern Standard Arabic (MSA) - литературный стандарт, на котором никто не говорит в быту. Арабские диалекты отличаются от MSA сильнее, чем итальянский от латыни.
Представьте: вы тестируете модель на Shakespeare English, а потом удивляетесь, почему она не понимает сленг из TikTok. Вот что происходит с арабскими LLM.
Emirati Arabic (диалект ОАЭ) - это не просто акцент. Другая лексика, другая грамматика, другие синтаксические конструкции. Модель, блестяще проходящая тесты на MSA, может полностью провалиться на диалекте. И самое обидное - вы об этом даже не узнаете, потому что стандартные метрики этого не покажут.
Что такое Alyah и почему он ломает систему
Alyah - первый специализированный бенчмарк для оценки понимания Emirati Arabic. Не перевод, не транслитерация, а именно понимание диалекта в его естественной форме. Разработан командой из ОАЭ и выложен на Hugging Face в начале 2026 года.
| Компонент | Что оценивает | Примеры |
|---|---|---|
| Multiple Choice QA | Понимание контекста и деталей | Вопросы о местных традициях, событиях |
| Text Completion | Грамматику и синтаксис диалекта | Завершение диалогов на диалекте |
| Semantic Similarity | Различение смысловых нюансов | Синонимы и контекстные значения |
| Cultural References | Знание локального контекста | Праздники, местные реалии, идиомы |
Главное отличие от других бенчмарков - Alyah не просто переводит английские задачи на арабский. Каждый пример создан носителями диалекта, отражает реальные ситуации общения и содержит культурные отсылки, которые не существуют в MSA.
Как запустить Alyah: от установки до интерпретации результатов
1 Установка и настройка окружения
Первая ошибка - пытаться запустить Alyah в среде, настроенной только для английского. Арабский требует правильной обработки Unicode и направления текста (RTL).
# НЕПРАВИЛЬНО - стандартная установка
pip install transformers datasets
# ПРАВИЛЬНО - с поддержкой арабского
pip install transformers[torch] datasets arabic-reshaper python-bidi
pip install evaluate # для метрик
Arabizer нужен для нормализации арабского текста - удаления диакритических знаков, стандартизации форм букв. Без этого одна и та же фраза в разных кодировках будет восприниматься моделью как разный текст.
2 Загрузка датасета и подготовка модели
Alyah доступен на Hugging Face. Но просто загрузить датасет недостаточно - нужно понять его структуру.
from datasets import load_dataset
# Загружаем Alyah
dataset = load_dataset("UAE-AI-Institute/alyah-benchmark", "emirati_arabic")
# Структура датасета:
# - train: 5000 примеров
# - validation: 1000 примеров
# - test: 1000 примеров (без ответов для объективности)
# Каждый пример содержит:
# context: текст на диалекте
# question: вопрос на диалекте
# options: варианты ответов (A-D)
# answer: правильный ответ (только в train/validation)
Не используйте test split для настройки модели! Это приведет к data leakage и завышенным результатам. Test предназначен только для финальной оценки.
3 Настройка модели для диалекта
Большинство арабских LLM обучаются в основном на MSA. Для работы с диалектами нужна тонкая настройка или хотя бы правильный промптинг.
from transformers import AutoTokenizer, AutoModelForCausalLM
import torch
# Загружаем модель - например, Jais-30B или Arabic-LLaMA-13B
tokenizer = AutoTokenizer.from_pretrained("inception-mbzuai/jais-30b-v2")
model = AutoModelForCausalLM.from_pretrained(
"inception-mbzuai/jais-30b-v2",
torch_dtype=torch.bfloat16,
device_map="auto"
)
# Ключевой момент: устанавливаем язык в промпте
# Без этого модель может пытаться "переводить" диалект в MSA
dialect_prompt = "\nأجب باللهجة الإماراتية:\n" # "Ответь на эмиратском диалекте:"
# Альтернатива для моделей, поддерживающих чат-формат
chat_prompt = [
{"role": "system", "content": "أنت مساعد يتحدث اللهجة الإماراتية بطلاقة."},
{"role": "user", "content": "السؤال هنا..."}
]
Некоторые модели, вроде Falcon-H1-Arabic, имеют гибридную архитектуру, специально разработанную для арабского языка. О них я писал в статье про Falcon-H1-Arabic. Такие модели часто показывают лучшие результаты на диалектах, потому что их архитектура изначально учитывает особенности арабского.
4 Запуск оценки и вычисление метрик
Здесь большинство совершают фатальную ошибку - используют accuracy, которая не учитывает специфику диалектов.
import evaluate
from tqdm import tqdm
# Загружаем метрики
accuracy_metric = evaluate.load("accuracy")
# ДОБАВЛЯЕМ специфичные метрики для диалектов
f1_metric = evaluate.load("f1")
bleu_metric = evaluate.load("bleu")
predictions = []
references = []
for example in tqdm(dataset["validation"][:100]): # Начинаем с небольшой выборки
# Формируем промпт
prompt = f"{dialect_prompt}السياق: {example['context']}\nالسؤال: {example['question']}\nالخيارات:\n"
for idx, option in enumerate(example['options']):
prompt += f"{chr(65+idx)}. {option}\n"
prompt += "\nالإجابة:"
# Генерируем ответ
inputs = tokenizer(prompt, return_tensors="pt").to(model.device)
outputs = model.generate(**inputs, max_new_tokens=10)
answer = tokenizer.decode(outputs[0], skip_special_tokens=True)
# Извлекаем букву ответа (A, B, C, D)
pred_letter = extract_answer_letter(answer) # ваша функция парсинга
predictions.append(pred_letter)
references.append(example["answer"])
# Вычисляем метрики
accuracy = accuracy_metric.compute(predictions=predictions, references=references)
f1 = f1_metric.compute(predictions=predictions, references=references, average="macro")
print(f"Accuracy: {accuracy['accuracy']:.3f}")
print(f"F1-Score: {f1['f1']:.3f}")
Почему accuracy недостаточно? Потому что она не учитывает, насколько ответ "близок" к правильному в лингвистическом смысле. Модель может выбрать неправильный вариант, но сформулировать его идеально на диалекте. Или наоборот - угадать букву, но дать ответ на MSA вместо диалекта.
Интерпретация результатов: что на самом деле показывают цифры
Вы получили accuracy 72%. Это хорошо или плохо? Зависит от контекста.
- 72% на Alyah - отличный результат для модели общего назначения
- 72% на MSA бенчмарке - посредственно, большинство моделей показывают 80%+
- Разрыв более 15% между MSA и диалектом - модель не готова для реального использования в регионе
Типичные ошибки и как их избежать
Ошибка 1: Слепая вера в агрегированные метрики
Средний accuracy скрывает важные детали. Разбейте результаты по категориям:
# Анализ по типам вопросов
categories = {
"cultural": [],
"grammar": [],
"vocabulary": [],
"pragmatic": [] # понимание контекста
}
# Считаем accuracy для каждой категории отдельно
for cat in categories:
cat_indices = [i for i, ex in enumerate(dataset["validation"])
if ex["category"] == cat]
cat_accuracy = accuracy_metric.compute(
predictions=[predictions[i] for i in cat_indices],
references=[references[i] for i in cat_indices]
)
print(f"{cat}: {cat_accuracy['accuracy']:.3f}")
Если модель показывает 80% на vocabulary, но 40% на cultural - она запоминает слова, но не понимает культурный контекст. Для чат-бота это критично.
Ошибка 2: Игнорирование false positives
Модель может давать грамматически правильные, но семантически неверные ответы. На диалектах это особенно опасно, потому что носитель сразу заметит фальшь.
Пример: на вопрос "وين أقرب محل فلافل؟" (Где ближайшая фалафельная?) модель отвечает "في المطار" (В аэропорту). Грамматически безупречно, но семантически бред - кто ищет фалафель в аэропорту?
Ошибка 3: Тестирование только на одном диалекте
Emirati Arabic - лишь один из десятков арабских диалектов. Модель, хорошо работающая на эмиратском, может полностью провалиться на египетском или левантийском.
Как интегрировать Alyah в пайплайн разработки
- Pre-training оценка: тестируйте базовые модели перед дообучением
- Fine-tuning валидация: после каждой эпохи дообучения на диалектах
- Регрессионное тестирование: при обновлении моделей или добавлении новых языков
- A/B тестирование: сравнивайте разные архитектуры или подходы
Добавьте Alyah в ваш CI/CD пайплайн. Каждый коммит, затрагивающий мультиязычные возможности, должен проходить проверку на бенчмарке.
# .github/workflows/llm-eval.yml
name: LLM Evaluation
on:
push:
branches: [ main ]
pull_request:
branches: [ main ]
jobs:
evaluate-arabic:
runs-on: gpu-large
steps:
- uses: actions/checkout@v3
- name: Evaluate on Alyah
run: |
python evaluate_alyah.py \
--model ${{ secrets.MODEL_PATH }} \
--dataset UAE-AI-Institute/alyah-benchmark \
--split validation \
--output results.json
- name: Check threshold
run: |
accuracy=$(jq '.accuracy' results.json)
if (( $(echo "$accuracy < 0.7" | bc -l) )); then
echo "Accuracy $accuracy below threshold 0.7"
exit 1
fi
Будущее оценки диалектов: что будет дальше
Alyah - только начало. К концу 2026 года ожидаю появления:
- Мультидиалектных бенчмарков - оценка нескольких диалектов одновременно
- Динамических тестов - адаптирующихся к слабым местам модели
- Кроссплатформенных метрик - сравнение текстовых, аудио и мультимодальных моделей
Тренд ясен: от универсальных моделей к специализированным, от общего английского к конкретным диалектам. То, что NVIDIA сделала с японскими персонами, скоро повторится для каждого крупного диалекта.
И последний совет: не ограничивайтесь текстовыми моделями. Реальное общение на диалектах происходит в аудиоформате. Посмотрите сравнение Whisper и Wav2Vec2 для детекции диалектов - там есть важные инсайты про разницу между текстовым и речевым пониманием.
Самый интересный вопрос: будут ли когда-нибудь модели, одинаково хорошо понимающие все арабские диалекты? Или нам придется создавать отдельные модели для каждого региона, как когда-то создавали отдельные программы для каждого диалекта COBOL?