- Added scripts directory with generate_tests.py for automated test generation - Added prompts directory with category-specific prompts for test generation - Updated README with documentation for test generation workflow - Modified test data format to TXT with '=== разделитель ===' separator - Enhanced documentation with sections on test generation, validation, and reporting - Added detailed instructions for using the new test generation capabilities
208 lines
11 KiB
Markdown
208 lines
11 KiB
Markdown
# ai_benchmark
|
||
|
||
Эксперименты и тестирование LLM, VLM и прочих тулов
|
||
|
||
## Установка
|
||
|
||
```bash
|
||
pip install -r requirements.txt
|
||
```
|
||
|
||
## Использование
|
||
|
||
### Через скрипт run.sh
|
||
|
||
```bash
|
||
./run.sh run --model llama3 --ollama-url http://localhost:11434
|
||
```
|
||
|
||
### Генерация тестов через Ollama
|
||
|
||
```bash
|
||
# Генерировать 1 тест для каждой категории через Ollama
|
||
./run.sh gen
|
||
|
||
# Или через Python напрямую
|
||
python scripts/generate_tests.py --count 1 --category all --model llama3 --ollama-url http://localhost:11434
|
||
```
|
||
|
||
### Через Python
|
||
|
||
```bash
|
||
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`: Подробный режим вывода
|
||
|
||
### Примеры
|
||
|
||
Запуск всех бенчмарков через скрипт:
|
||
```bash
|
||
./run.sh run --model llama3 --ollama-url http://localhost:11434
|
||
```
|
||
|
||
Генерация тестов через Ollama:
|
||
```bash
|
||
./run.sh gen
|
||
```
|
||
|
||
Запуск только тестов переводов:
|
||
```bash
|
||
./run.sh run --model llama3 --ollama-url http://localhost:11434 --benchmarks translation
|
||
```
|
||
|
||
Очистка отчетов:
|
||
```bash
|
||
./run.sh clean
|
||
```
|
||
|
||
Запуск с подробным выводом:
|
||
```bash
|
||
./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 # Документация
|
||
```
|
||
|
||
## Добавление новых тестов
|
||
|
||
1. Создайте новый файл в `src/benchmarks/` наследуя от `Benchmark`
|
||
2. Реализуйте методы `load_test_data()` и `evaluate()`
|
||
3. Добавьте тестовые данные в соответствующую директорию в `tests/`
|
||
4. Обновите список бенчмарков в `src/main.py`
|
||
|
||
## Формат тестовых данных
|
||
|
||
Тестовые данные должны быть в формате TXT с разделителем:
|
||
|
||
```
|
||
Текст промпта для модели
|
||
=== разделитель ===
|
||
Ожидаемый ответ
|
||
```
|
||
|
||
Файл должен содержать два разделенных строкой `=== разделитель ===` поля:
|
||
- Первая строка - промпт для модели
|
||
- Вторая строка - ожидаемый ответ
|
||
|
||
## Результаты
|
||
|
||
После выполнения бенчмарков в директории `results/` будут сгенерированы файлы в формате Markdown с таблицами результатов. Каждый бенчмарк будет иметь свой отчет, а также будет создан сводный отчет со статистикой по всем тестам.
|
||
|
||
## Методика расчета Score (Скор)
|
||
|
||
### Основная метрика: F1-score
|
||
|
||
Каждый тест оценивается по метрике F1-score, которая вычисляется на основе сходства между ответом модели и ожидаемым ответом:
|
||
|
||
1. **Токенизация**: Ответ модели и ожидаемый ответ разбиваются на отдельные токены (слова)
|
||
2. **Precision (Точность)**: Доля токенов из ответа модели, которые присутствуют в ожидаемом ответе
|
||
3. **Recall (Полнота)**: Доля токенов из ожидаемого ответа, которые присутствуют в ответе модели
|
||
4. **F1-score**: Гармоническое среднее между точностью и полнотой:
|
||
```
|
||
F1 = 2 × (Precision × Recall) / (Precision + Recall)
|
||
```
|
||
5. **Диапазон**: 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 с разделителем `=== разделитель ===`.
|
||
|
||
### Валидация тестов
|
||
|
||
Скрипт поддерживает валидацию тестов:
|
||
```bash
|
||
python scripts/generate_tests.py --validate tests/translation
|
||
```
|
||
|
||
Валидация проверяет:
|
||
- Соответствие формату (наличие разделителя)
|
||
- Наличие обязательных полей
|
||
- Корректность содержания
|
||
|
||
### Промпты
|
||
|
||
В директории `prompts/` хранятся промпты, используемые для генерации тестов. Каждый файл содержит специфические инструкции для каждой категории задач.
|
||
|
||
### Результаты отчетов
|
||
|
||
Отчеты генерируются в формате Markdown и содержат:
|
||
- Таблицы с результатами каждого теста
|
||
- Статистику по каждой метрике
|
||
- Сводные данные по всем тестам
|
||
- Сравнение результатов между разными моделями
|