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

12 KiB
Raw Blame History

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/. Для каждого бенчмарка требуется:

  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 с разделителем === разделитель ===.

Валидация тестов

Скрипт поддерживает валидацию тестов:

python scripts/generate_tests.py --validate tests/translation

Валидация проверяет:

  • Соответствие формату (наличие разделителя)
  • Наличие обязательных полей
  • Корректность содержания

Промпты

В директории prompts/ хранятся промпты, используемые для генерации тестов. Каждый файл содержит специфические инструкции для каждой категории задач.

Результаты отчетов

Отчеты генерируются в формате Markdown и содержат:

  • Таблицы с результатами каждого теста
  • Статистику по каждой метрике
  • Сводные данные по всем тестам
  • Сравнение результатов между разными моделями