Фреймворк для оценки LLM на задаче распознавания заголовков таблиц. Проект состоит из двух этапов: сбор ответов моделей через Bothub API и последующий анализ с расчётом метрик.
- data_collector.py — сбор ответов LLM без немедленного анализа
- analyzer.py — парсинг ответов и расчёт Precision, Recall, F1-score
- Многомодельное тестирование (Gemma, Qwen, Llama, Mistral, DeepSeek и др.)
- 13 стратегий промптов: Zero-shot, Few-shot, Chain-of-Thought, Role Prompting, Self-Consistency, Least-to-Most, Tree of Thoughts, ReAct, Self-Refine, Reflexion, OPRO, Chain-of-Table, Medprompt
- Инкрементальное сохранение и Telegram-уведомления о прогрессе
- Визуализация результатов (heatmap, bar charts)
git clone git@github.com:YRL-AIDA/Better_Experiment.git
cd Better_Experiment
pip install -r requirements.txtВсе ключи и секреты хранятся только в файле .env (он в .gitignore и не попадает в репозиторий).
- Скопируйте пример:
cp .env.example .env(или создайте.envвручную). - Заполните переменные в
.env:
BOTHUB_API_KEY=your_bothub_api_key
TELEGRAM_BOT_TOKEN=your_telegram_bot_token
TELEGRAM_CHAT_ID=your_chat_id
BOTHUB_API_KEY обязателен для сбора ответов. Telegram — опционально (уведомления о прогрессе).
Better_Experiment/
├── data_collector.py # Сбор ответов моделей через Bothub API
├── analyzer.py # Анализ ответов и расчёт метрик
├── .env.example # Пример переменных окружения (скопировать в .env)
├── Jsons_tables/ # JSON-таблицы для тестирования
│ ├── PMC493266_tables_cleaned.json
│ └── PMC493271_tables_cleaned.json
├── requirements.txt
└── README.md
JSON-таблицы должны содержать поля data (2D-массив ячеек) и headers (координаты заголовков [{row, col}, ...]).
from data_collector import ResponseCollector
from prompts import PROMPTS
from config import get_models
collector = ResponseCollector(
json_dir="Jsons_tables",
output_dir="raw_responses"
)
models = get_models() # Получить список моделей из config.py
collector.collect_responses(models, PROMPTS)Результаты сохраняются в raw_responses/:
responses_YYYYMMDD_HHMMSS.json— полные данныеresponses_YYYYMMDD_HHMMSS.csv— табличный видfailed_YYYYMMDD_HHMMSS.json— неудачные запросы
from analyzer import ResponseAnalyzer
analyzer = ResponseAnalyzer("raw_responses/responses_YYYYMMDD_HHMMSS.json")
analyzer.load_data()
analyzer.process_all_responses()
analyzer.save_analysis_results()
analyzer.create_visualizations()Результаты анализа сохраняются в analysis_results/:
detailed_metrics_*.xlsx/*.csv— метрики по каждому ответуsummary_statistics_*.xlsx— агрегация по моделям и стратегиямf1_by_model.png,heatmap_model_strategy.png— визуализации
| Размер | Модели |
|---|---|
| Small | gemma-2-9b-it, qwen-2.5-7b-instruct, llama-3.1-8b-instruct, mistral-7b-instruct, ministral-8b, phi-4, qwen3-8b, glm-4.5-air |
| Medium | gemma-2-27b-it, qwen-2.5-72b-instruct, llama-3.3-70b-instruct, deepseek-chat, mistral-small-3.2-24b-instruct, qwen3-32b, ministral-14b-2512 |
Для data_collector ожидается формат:
{
"data": [["Header1", "Header2"], ["val1", "val2"]],
"headers": [{"row": 0, "col": 0}, {"row": 0, "col": 1}]
}Папка Jsons_tables/ содержит таблицы в формате PMC (cells с row_nums, column_nums). При необходимости используйте скрипт конвертации в ожидаемый формат.
- Precision — доля правильно найденных заголовков среди предсказанных
- Recall — доля найденных из всех истинных заголовков
- F1-score — гармоническое среднее Precision и Recall
Проект распространяется под лицензией MIT.