- Added pymongo==3.13.0 to requirements.txt for MongoDB connectivity - Implemented generate_summarization_from_mongo.py script to generate summarization tests from MongoDB - Updated run.sh to support 'gen-mongo' command for MongoDB test generation - Enhanced scripts/README.md with documentation for new MongoDB functionality - Improved help text in run.sh to clarify available commands and usage examples ``` This commit adds MongoDB integration for test generation and updates the documentation and scripts accordingly. |
||
|---|---|---|
| scripts | ||
| src | ||
| tests | ||
| .gitignore | ||
| CHANGES_SUMMARY.md | ||
| CONVERSION_GUIDE.md | ||
| 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 # Генерация отчетов
│ └── main.py # Основной скрипт запуска
├── tests/ # Тестовые данные
│ ├── translation/ # Данные для тестов переводов
│ ├── summarization/ # Данные для тестов пересказов
│ └── codegen/ # Данные для тестов генерации кода
├── results/ # Результаты выполнения
├── requirements.txt # Зависимости проекта
└── README.md # Документация
Добавление новых тестов
- Создайте новый файл в
src/benchmarks/наследуя отBenchmark - Реализуйте методы
load_test_data()иevaluate() - Добавьте тестовые данные в соответствующую директорию в
tests/ - Обновите список бенчмарков в
src/main.py
Формат тестовых данных
Тестовые данные должны быть в формате JSON:
{
"prompt": "Текст промпта для модели",
"expected": "Ожидаемый ответ"
}
Результаты
После выполнения бенчмарков в директории 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