Files
ai-benchmark/README.md
second_constantine 54cfe0d97b docs: update README with context size parameter and dynamic benchmark discovery
- 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.
2026-02-28 13:10:48 +03:00

214 lines
12 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 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`: Подробный режим вывода
- `--context-size`: Размер контекста для модели (по умолчанию: 32000)
### Примеры
Запуск всех бенчмарков через скрипт:
```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/
│ ├── 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/`. Для каждого бенчмарка требуется:
1. Папка в `tests/` с тестовыми данными
2. Файл промпта в `prompts/` с именем бенчмарка (например, `prompts/translation.txt`)
Бенчмарки создаются динамически при запуске и наследуют функциональность от базового класса `Benchmark`.
## Добавление новых тестов
1. Создайте новую папку в `tests/` для вашего бенчмарка (например, `tests/my_benchmark`)
2. Создайте файл промпта в `prompts/` с именем `my_benchmark.txt`
3. Добавьте тестовые данные в соответствующую директорию в `tests/my_benchmark/`
4. Бенчмарк будет автоматически обнаружен при следующем запуске
## Формат тестовых данных
Тестовые данные должны быть в формате 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 и содержат:
- Таблицы с результатами каждого теста
- Статистику по каждой метрике
- Сводные данные по всем тестам
- Сравнение результатов между разными моделями