- Added `--context-size` parameter documentation with default value - Updated project structure to reflect dynamic benchmark discovery - Removed static benchmark module references - Added custom benchmark support documentation - Clarified automatic benchmark detection process - Updated test addition instructions for dynamic discovery - Fixed trailing newline in file ``` This commit message follows the conventional commit format with a clear title and descriptive body explaining the changes made to the documentation.
12 KiB
ai_benchmark
Эксперименты и тестирование LLM, VLM и прочих тулов
Установка
pip install -r requirements.txt
Использование
Через скрипт run.sh
./run.sh run --model llama3 --ollama-url http://localhost:11434
Генерация тестов через Ollama
# Генерировать 1 тест для каждой категории через Ollama
./run.sh gen
# Или через Python напрямую
python scripts/generate_tests.py --count 1 --category all --model llama3 --ollama-url http://localhost:11434
Через Python
python src/main.py --model llama3 --ollama-url http://localhost:11434
Аргументы для generate_tests.py
--count: Количество тестов для генерации (по умолчанию: 1)--category: Категория тестов (translation, summarization, codegen, или all) (по умолчанию: all)--model: Название модели для генерации тестов (обязательный)--ollama-url: URL подключения к Ollama серверу (обязательный)--validate: Валидировать тесты в указанной директории
Аргументы для main.py
--model: Название модели для тестирования (обязательный)--ollama-url: URL подключения к Ollama серверу (обязательный)--benchmarks: Список бенчмарков для выполнения (translation, summarization, codegen). По умолчанию все.--output: Директория для сохранения результатов. По умолчанию:results--verbose: Подробный режим вывода--context-size: Размер контекста для модели (по умолчанию: 32000)
Примеры
Запуск всех бенчмарков через скрипт:
./run.sh run --model llama3 --ollama-url http://localhost:11434
Генерация тестов через Ollama:
./run.sh gen
Запуск только тестов переводов:
./run.sh run --model llama3 --ollama-url http://localhost:11434 --benchmarks translation
Очистка отчетов:
./run.sh clean
Запуск с подробным выводом:
./run.sh run --model llama3 --ollama-url http://localhost:11434 --verbose
Структура проекта
ai-benchmark/
├── src/
│ ├── benchmark.py # Базовый класс для всех бенчмарков
│ ├── constants.py # Константы проекта
│ ├── main.py # Основной скрипт запуска
│ ├── ollama_client.py # Клиент для работы с Ollama
│ ├── report.py # Генерация отчетов
│ └── scoring.py # Вычисление метрик оценки качества
├── tests/ # Тестовые данные (динамическое обнаружение бенчмарков)
│ ├── translation/ # Данные для тестов переводов
│ ├── summarization/ # Данные для тестов пересказов
│ ├── codegen/ # Данные для тестов генерации кода
│ └── custom/ # Данные для пользовательских тестов
├── results/ # Результаты выполнения
├── scripts/ # Скрипты для работы с проектом
│ ├── generate_tests.py # Скрипт для генерации тестов
│ ├── convert_json_to_txt.py # Конвертация JSON в TXT формат
│ └── README.md # Документация по скриптам
├── prompts/ # Промпты для генерации тестов
│ ├── translation.txt # Промпты для тестов перевода
│ ├── summarization.txt # Промпты для тестов пересказа
│ ├── codegen.txt # Промпты для тестов генерации кода
│ └── custom.txt # Промпты для пользовательских тестов
├── requirements.txt # Зависимости проекта
└── README.md # Документация
Динамическое обнаружение бенчмарков
Проект автоматически обнаруживает бенчмарки на основе папок в директории tests/. Для каждого бенчмарка требуется:
- Папка в
tests/с тестовыми данными - Файл промпта в
prompts/с именем бенчмарка (например,prompts/translation.txt)
Бенчмарки создаются динамически при запуске и наследуют функциональность от базового класса Benchmark.
Добавление новых тестов
- Создайте новую папку в
tests/для вашего бенчмарка (например,tests/my_benchmark) - Создайте файл промпта в
prompts/с именемmy_benchmark.txt - Добавьте тестовые данные в соответствующую директорию в
tests/my_benchmark/ - Бенчмарк будет автоматически обнаружен при следующем запуске
Формат тестовых данных
Тестовые данные должны быть в формате TXT с разделителем:
Текст промпта для модели
=== разделитель ===
Ожидаемый ответ
Файл должен содержать два разделенных строкой === разделитель === поля:
- Первая строка - промпт для модели
- Вторая строка - ожидаемый ответ
Результаты
После выполнения бенчмарков в директории results/ будут сгенерированы файлы в формате Markdown с таблицами результатов. Каждый бенчмарк будет иметь свой отчет, а также будет создан сводный отчет со статистикой по всем тестам.
Методика расчета Score (Скор)
Основная метрика: F1-score
Каждый тест оценивается по метрике F1-score, которая вычисляется на основе сходства между ответом модели и ожидаемым ответом:
- Токенизация: Ответ модели и ожидаемый ответ разбиваются на отдельные токены (слова)
- Precision (Точность): Доля токенов из ответа модели, которые присутствуют в ожидаемом ответе
- Recall (Полнота): Доля токенов из ожидаемого ответа, которые присутствуют в ответе модели
- F1-score: Гармоническое среднее между точностью и полнотой:
F1 = 2 × (Precision × Recall) / (Precision + Recall) - Диапазон: 0.0 - 1.0, где 1.0 означает идеальное совпадение
Альтернативные метрики
Для более детального анализа можно использовать следующие метрики:
- Levenshtein Distance / Edit Distance: Количество редактирований (вставок, удалений, замен) для преобразования ответа модели в ожидаемый ответ. Полезно для оценки структурных различий.
- BLEU Score: Популярная метрика для оценки качества машинного перевода, основанная на n-граммах. Подходит для задач переводов.
- ROUGE Score: Метрика для оценки качества суммаризации, основанная на перекрытии n-грамм, слов и последовательностей. Подходит для задач пересказов.
- Code Similarity Metrics: Для генерации кода можно использовать процент совпадения структуры кода (функции, классы, синтаксис), а также метрики типа AST (Abstract Syntax Tree) similarity.
Средний Score
В отчетах вычисляется средний Score по всем успешно выполненным тестам в каждом бенчмарке. Этот показатель позволяет сравнить общую производительность модели по разным задачам.
Пример расчета F1-score
Если модель ответила "hello world" на промпт, а ожидаемый ответ "hello there", расчет будет следующим:
- Токены модели: {"hello", "world"}
- Токены ожидаемого: {"hello", "there"}
- Пересечение: {"hello"}
- Precision = 1/2 = 0.5
- Recall = 1/2 = 0.5
- F1-score = 2 × (0.5 × 0.5) / (0.5 + 0.5) = 0.5
Дополнительные возможности
Генерация тестов
Скрипт scripts/generate_tests.py позволяет автоматически генерировать тесты для всех категорий:
- Переводы (translation): генерирует английские предложения и их переводы на русский
- Пересказы (summarization): генерирует тексты и их пересказы
- Генерация кода (codegen): генерирует задачи и соответствующий код
Тесты генерируются с использованием LLM и сохраняются в формате TXT с разделителем === разделитель ===.
Валидация тестов
Скрипт поддерживает валидацию тестов:
python scripts/generate_tests.py --validate tests/translation
Валидация проверяет:
- Соответствие формату (наличие разделителя)
- Наличие обязательных полей
- Корректность содержания
Промпты
В директории prompts/ хранятся промпты, используемые для генерации тестов. Каждый файл содержит специфические инструкции для каждой категории задач.
Результаты отчетов
Отчеты генерируются в формате Markdown и содержат:
- Таблицы с результатами каждого теста
- Статистику по каждой метрике
- Сводные данные по всем тестам
- Сравнение результатов между разными моделями