Эксперименты и тестирование LLM, VLM и прочих тулов
Go to file
second_constantine 2a04e6c089 docs: update test format documentation in README
Update documentation to reflect new TXT format with separator for summarization tests instead of JSON format. Clarify that expected field may be empty if summary generation fails.

feat: change test generation to TXT format with separator

Change test generation from JSON to TXT format with TEST_SEPARATOR. Add filename sanitization function to handle MongoDB record IDs. Update output path and file naming logic. Add attempt to generate expected summary through LLM with fallback to empty string.
2026-01-22 20:40:41 +03:00
prompts docs: update test format documentation in README 2026-01-22 20:40:41 +03:00
scripts docs: update test format documentation in README 2026-01-22 20:40:41 +03:00
src docs: update test format documentation in README 2026-01-22 20:40:41 +03:00
tests docs: update test format documentation in README 2026-01-22 20:40:41 +03:00
.gitignore chore: add __pycache__ to global gitignore 2026-01-16 22:54:49 +03:00
CHANGES_SUMMARY.md feat: add MongoDB test generation and update dependencies 2026-01-22 20:11:52 +03:00
CONVERSION_GUIDE.md feat: add MongoDB test generation and update dependencies 2026-01-22 20:11:52 +03:00
README.md doc: add test generation instructions and update run.sh 2026-01-17 02:40:38 +03:00
requirements.txt feat: add MongoDB test generation and update dependencies 2026-01-22 20:11:52 +03:00
run.sh feat: add MongoDB test generation and update dependencies 2026-01-22 20:11:52 +03:00

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        # Генерация отчетов
│   └── main.py              # Основной скрипт запуска
├── tests/                   # Тестовые данные
│   ├── translation/         # Данные для тестов переводов
│   ├── summarization/       # Данные для тестов пересказов
│   └── codegen/             # Данные для тестов генерации кода
├── results/                 # Результаты выполнения
├── requirements.txt         # Зависимости проекта
└── README.md                # Документация

Добавление новых тестов

  1. Создайте новый файл в src/benchmarks/ наследуя от Benchmark
  2. Реализуйте методы load_test_data() и evaluate()
  3. Добавьте тестовые данные в соответствующую директорию в tests/
  4. Обновите список бенчмарков в src/main.py

Формат тестовых данных

Тестовые данные должны быть в формате JSON:

{
  "prompt": "Текст промпта для модели",
  "expected": "Ожидаемый ответ"
}

Результаты

После выполнения бенчмарков в директории 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