Moved TEST_SEPARATOR import from benchmarks.base to constants module in codegen, summarization, and translation benchmarks for better modularity and maintainability. This change improves code organization by centralizing constants in a dedicated module. |
||
|---|---|---|
| prompts | ||
| scripts | ||
| src | ||
| tests | ||
| .gitignore | ||
| CHANGES_SUMMARY.md | ||
| CONVERSION_GUIDE.md | ||
| ids.txt | ||
| README.md | ||
| requirements.txt | ||
| run.sh | ||
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: Подробный режим вывода
Примеры
Запуск всех бенчмарков через скрипт:
./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/
│ ├── benchmarks/ # Модули с тестовыми наборами
│ │ ├── translation.py # Тесты переводов
│ │ ├── summarization.py # Тесты пересказов
│ │ ├── codegen.py # Тесты генерации кода
│ │ └── base.py # Базовый класс для тестов
│ ├── models/ # Модули для работы с моделями
│ │ └── ollama_client.py # Клиент для Ollama
│ ├── utils/ # Утилиты
│ │ ├── report.py # Генерация отчетов
│ │ └── scoring.py # Вычисление метрик оценки качества
│ └── main.py # Основной скрипт запуска
├── tests/ # Тестовые данные
│ ├── translation/ # Данные для тестов переводов
│ ├── summarization/ # Данные для тестов пересказов
│ └── codegen/ # Данные для тестов генерации кода
├── results/ # Результаты выполнения
├── scripts/ # Скрипты для работы с проектом
│ ├── generate_tests.py # Скрипт для генерации тестов
│ └── README.md # Документация по скриптам
├── prompts/ # Промпты для генерации тестов
│ ├── translation.txt # Промпты для тестов перевода
│ ├── summarization.txt # Промпты для тестов пересказа
│ └── codegen.txt # Промпты для тестов генерации кода
├── requirements.txt # Зависимости проекта
└── README.md # Документация
Добавление новых тестов
- Создайте новый файл в
src/benchmarks/наследуя отBenchmark - Реализуйте методы
load_test_data()иevaluate() - Добавьте тестовые данные в соответствующую директорию в
tests/ - Обновите список бенчмарков в
src/main.py
Формат тестовых данных
Тестовые данные должны быть в формате 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 и содержат:
- Таблицы с результатами каждого теста
- Статистику по каждой метрике
- Сводные данные по всем тестам
- Сравнение результатов между разными моделями