Skip to content

sssoneta/rag-challenge

Repository files navigation

Enterprise RAG Challenge — Khrisankova v6 (Score 90.9)

Решение для домашнего задания RAG-Challenge, моделирующего участие в Enterprise RAG Challenge.
Система реализует Retrieval-Augmented Generation (RAG) для ответов на вопросы по годовым отчётам компаний в формате PDF.

Лучший результат:

  • Score: 90.9
  • Submission: Khrisankova_v6
  • Метрика: автоматическая проверка leaderboard’а

Описание решения

Решение построено как классический RAG-пайплайн:

  1. Извлечение текста из PDF

    • Используется PyMuPDF (fitz)
    • Текст извлекается постранично
    • Для каждой страницы сохраняются pdf_sha1 и page_index
  2. Чанкинг

    • Каждая страница режется на смысловые чанки
    • Размер чанка: ~1500 символов
    • Overlap: ~250 символов
    • Это улучшает recall и точность ссылок
  3. Индексирование

    • Sentence embeddings: sentence-transformers/all-MiniLM-L6-v2
    • Векторный индекс: FAISS (IndexFlatIP)
    • Используется cosine similarity (через нормализацию эмбеддингов)
  4. Retrieval + Rerank

    • Первичный поиск: FAISS (top-N кандидатов)
    • Переранжирование: cross-encoder/ms-marco-MiniLM-L-6-v2
    • Это значительно повышает precision на сложных вопросах
  5. Answer extraction

    • Числовые вопросы: извлечение чисел с учётом масштабов (thousands / millions / billions)
    • Boolean-вопросы: yes / no без угадывания
    • Name-вопросы: выбор компании
    • Поддержка сравнений (highest / lowest / max / min) между компаниями
  6. Формирование сабмишна

    • Автоматическая генерация submission_<surname>_<version>.json
    • Без ручных правок

Ключевые эвристики, давшие высокий score

  • Использование cross-encoder rerank поверх FAISS
  • Якоря финансовых метрик (revenue, net income, earnings, income attributable)
  • Корректная стратегия для вопросов вида
    “Which company had the highest …”
  • Строгие fallback-правила (лучше вернуть no / N/A, чем угадывать)
  • References берутся только из реально использованных чанков

Структура проекта


rag_challenge/
├── data/
│   ├── pdfs/              # PDF-документы (годовые отчёты)
│   └── questions.json     # список вопросов
├── work/
│   ├── chunks.jsonl
│   ├── chunks_v2.jsonl
│   ├── index.faiss
│   ├── index_v2.faiss
│   ├── meta.jsonl
│   └── meta_v2.jsonl
├── main.py                # основной скрипт
├── requirements.txt
└── README.md


Установка и зависимости

Python

версия:


Python 3.10+

Установка зависимостей

pip install -r requirements.txt

requirements.txt

faiss-cpu
sentence-transformers
torch
numpy
tqdm
pymupdf

Запуск

1. Извлечь текст из PDF

python main.py --mode extract

2. Построить чанки

python main.py --mode chunk_v2

3. Построить индекс

python main.py --mode index_v2

4. Проверить retrieval вручную

python main.py --mode retrieve_v2_rr --query "Which company had the highest net income in 2022?"

5. Сформировать сабмишн

python main.py --mode submit \
  --email your_email@example.com \
  --surname Khrisankova \
  --version v6

На выходе будет создан файл:

submission_Khrisankova_v6.json

📤 Отправка решения

Сабмишн отправляется через API:

http://5.35.3.130:800/docs

Ограничения и допущения

  • OCR не используется (все PDF текстовые)
  • Не используются LLM для генерации текста — только extraction
  • Решение полностью воспроизводимо локально
  • Ответы формируются строго на основе retrieval

Результат

  • Score: 90.9
  • Стабильная работа без ручных правок
  • Соответствие всем требованиям задания

Автор

Khrisankova Enterprise RAG Challenge (Home Assignment)

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages