Skip to content

Valyaevgeorgiy/RAG_EdTech_system

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

43 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Вопросно-ответная система по учебным материалам университета

Проект представляет собой исследовательский NLP-пайплайн для построения вопросно-ответной системы над учебными материалами университета. Система ориентирована на сценарий «университетского помощника»: пользователь задаёт вопрос о направлениях подготовки, дисциплинах, практиках, учебных планах, языках программирования, формах контроля или различиях между образовательными программами, а система ищет релевантные фрагменты документов и формирует ответ с опорой на найденные источники.

Цель проекта

Цель работы — разработать и протестировать RAG-пайплайн, который объединяет:

  • парсинг рабочих программ дисциплин и практик в формате DOCX;
  • парсинг учебных планов в формате XLSX;
  • разбиение документов на текстовые и табличные чанки;
  • извлечение метаданных уровня документа;
  • гибридный поиск по корпусу учебных материалов;
  • локальное расширение контекста через граф сущностей;
  • генерацию ответов с помощью локальных LLM-моделей;
  • экспертную оценку качества ответов на golden-set наборе вопросов.

Основная идея

Обычный семантический поиск по учебным документам плохо справляется с вопросами, где ответ лежит в таблицах, зависит от направления подготовки, учебного года, образовательной программы или требует сопоставления нескольких источников. Поэтому в проекте используется RAG-архитектура с двумя контурами данных:

  1. Контур РПД и практик — DOCX-документы с описанием дисциплин, практик, компетенций, тем, часов, форм контроля и литературы.
  2. Контур учебных планов — XLSX-файлы с учебными планами, семестрами, длительностью обучения, практиками, курсовыми работами и распределением дисциплин по курсам.

На этапе ответа система анализирует вопрос, определяет его тип, выбирает подходящий контур поиска, извлекает релевантные фрагменты и передаёт их в LLM как контекст.

Архитектура пайплайна

1. Подготовка корпуса

Основной контур подготовки данных включает следующие этапы:

  1. загрузка архива с учебными документами;
  2. парсинг DOCX-файлов РПД и практик;
  3. распознавание структуры документа: заголовки, разделы, таблицы, порядок блоков;
  4. извлечение метаданных: направление подготовки, образовательная программа, год документа, название дисциплины или практики, тип документа;
  5. формирование текстовых и табличных чанков;
  6. построение эмбеддингов;
  7. построение гибридного индекса;
  8. построение графа сущностей;
  9. сохранение состояния системы.

Отдельный контур учебных планов включает загрузку XLSX-файлов, выделение строк учебного плана, извлечение метаданных программы, разбиение табличной структуры на плановые чанки, построение отдельного индекса учебных планов и интеграцию этого индекса в общий процесс ответа.

2. Поиск и генерация ответа

Контур обработки пользовательского вопроса:

  1. анализ вопроса;
  2. определение намерения и аудитории;
  3. маршрутизация между РПД/практиками и учебными планами;
  4. гибридный поиск BM25 + dense retrieval;
  5. при необходимости — multi-hop расширение через граф сущностей;
  6. сбор структурированных фактов;
  7. построение prompt для LLM;
  8. генерация ответа;
  9. возврат ответа с цитируемыми источниками.

Используемые методы и технологии

NLP и IR

  • гибридный поиск через BM25 и векторные эмбеддинги;
  • метрика Reciprocal Rank Fusion для объединения результатов;
  • плотные эмбеддинги на базе предобученной модели intfloat/multilingual-e5-base;
  • семантические движки FAISS, HNSW для поиска по векторам;
  • данные spaCy ru_core_news_sm для обработки русскоязычных сущностей;
  • граф сущностей для локального расширения контекста;
  • отдельная обработка табличных чанков;
  • эвристическая маршрутизация запросов по типам документов.

LLM-модели

Ноутбук LLM-модель Назначение
notebooks/RAG_LLM_Qwen2.5_1.5B_up_plans.ipynb Qwen/Qwen2.5-1.5B-Instruct компактная локальная модель для базового сравнения
notebooks/RAG_LLM_Qwen2.5_3B_up_plans.ipynb Qwen/Qwen2.5-3B-Instruct более сильная локальная модель Qwen
notebooks/RAG_LLM_YandexGPT5_8B_up_plans.ipynb yandex/YandexGPT-5-Lite-8B-instruct крупная русскоязычная модель для сравнения

Структура репозитория

.
├── README.md
└── notebooks/
    ├── RAG_LLM_Qwen2.5_1.5B_up_plans.ipynb
    ├── RAG_LLM_Qwen2.5_3B_up_plans.ipynb
    └── RAG_LLM_YandexGPT5_8B_up_plans.ipynb
└── models/
    └── Qwen2.5-1.5B-Instruct/
    └── Qwen2.5-3B-Instruct/
    └── YandexGPT-5-Lite-8B-instruct/
└── workdir_full/
    └── dataset_extracted/
        └── dataset/
            └── А и СД в яз Python, БИ, 2023.docx
            └── А и СД в яз Python, ИБ, 2023.docx
            └── А и СД в яз Python, МиКН, 2023.docx
            └── ...
    └── export/
        └── chunks.jsonl
        └── docs_meta.jsonl
        └── entity_graph.pkl
        └── faiss.index
        └── hnsw.index
        └── study_plans/
            └── chunks.jsonl
            └── docs_meta.jsonl
            └── hnsw.index
            └── vector_meta.json
        └── vector_meta.json
    └── runs.jsonl
    └── study_plans_extracted/
        └── dataset_up_plans/
            └── УП 01.03.02 ПМИ, ПМО 2024.xlsx
            └── УП 01.03.02 ПМО 2022.xlsx
            └── УП 01.03.02 ПМО 2023.xlsx
            └── ...
└── datasets/
    └── dataset.zip
    └── dataset_up_plans.zip
└── test_golden_sets/
    └── Golden set (модель Qwen2.5_1.5B).docx
    └── Golden set (модель Qwen2.5_3B).docx
    └── Golden set (модель YandexGPT-5_8B).docx

Ключевые классы и компоненты

В ноутбуках реализованы основные компоненты RAG-системы:

  • RuntimeResources — централизованный выбор устройства, spaCy-модели и доступных библиотек индексации.
  • RAGConfig — конфигурация чанкинга, индексации, графа сущностей, retrieval и логирования.
  • Chunk — базовая структура фрагмента корпуса.
  • DocxStructureParser — парсинг структуры DOCX-документов.
  • TableBlockParser — обработка табличных блоков РПД.
  • DocumentCorpusLoader — загрузка и подготовка корпуса документов.
  • StudyPlanWorkbookParser — обработка XLSX-файлов учебных планов.
  • HybridIndex — гибридный индекс BM25 + dense retrieval.
  • EntityGraphService — построение и использование графа сущностей.
  • PromptBuilder — формирование промпта для LLM с учётом аудитории и типа вопроса.
  • HFChatLLM — интерфейс запуска локальной HuggingFace-модели.
  • UniversityRAG — итоговый класс, объединяющий загрузку корпуса, индексацию, поиск, генерацию ответа, сохранение и загрузку состояния.

Установка окружения

Пример базовой установки зависимостей:

pip install faiss-cpu rank-bm25 transformers torch tiktoken hnswlib spacy openpyxl python-docx
python -m spacy download ru_core_news_sm

Для загрузки моделей через HuggingFace CLI:

pip install -U "huggingface_hub[cli]"

Пример загрузки модели Qwen2.5-3B:

hf download Qwen/Qwen2.5-3B-Instruct --local-dir ./models/Qwen2.5-3B-Instruct

Пример загрузки YandexGPT-5-Lite-8B:

hf download yandex/YandexGPT-5-Lite-8B-instruct --local-dir ./models/YandexGPT-5-Lite-8B-instruct

Ожидаемые входные данные

В ноутбуках используются два архива:

dataset.zip
dataset_up_plans.zip

Где:

  • dataset.zip — архив с DOCX-файлами рабочих программ дисциплин и практик;
  • dataset_up_plans.zip — архив с XLSX-файлами учебных планов.

Пример запуска индексации:

ZIP_PATH = "dataset.zip"
PLANS_ZIP_PATH = "dataset_up_plans.zip"
WORKDIR = "./workdir_full_v2"

rag.ingest_from_zip(
    zip_path=ZIP_PATH,
    extract_dir=os.path.join(WORKDIR, "dataset_extracted"),
    glob_ext=".docx"
)

rag.ingest_study_plans_from_zip(
    zip_path=PLANS_ZIP_PATH,
    extract_dir=os.path.join(WORKDIR, "study_plans_extracted"),
    glob_ext=".xlsx"
)

rag.save_state(os.path.join(WORKDIR, "export"))

Пример ответа на вопрос:

out = rag.answer(
    "Сколько длится практика на направлении программная инженерия?",
    top_k=10
)

print(out["answer"])
print(out["citations"])

Экспертная оценка качества

Качество ответов оценивалось на golden-set наборе из 26 вопросов:

  • 11 фактологических вопросов;
  • 10 интерпретационных вопросов;
  • 5 сложных контекстуальных вопросов.

Каждый ответ оценивался экспертом по трём критериям:

  1. Точность — фактологическая корректность и отсутствие галлюцинаций.
  2. Полнота — покрытие всех аспектов вопроса.
  3. Ясность — понятность, структурированность и пригодность ответа для абитуриента.

Каждый критерий оценивался по шкале от 1 до 5. Максимальная оценка за один ответ — 15 баллов, максимальная оценка за весь golden-set — 390 баллов.

Итоговые результаты

Модель До внедрения учебных планов После внедрения учебных планов Изменение
Qwen2.5-1.5B-Instruct 197 / 390 = 50.5% 213 / 390 = 54.6% +16 баллов
Qwen2.5-3B-Instruct 220 / 390 = 56.4% 229 / 390 = 58.7% +9 баллов
YandexGPT-5-Lite-8B-Instruct 200 / 390 = 51.3% 197 / 390 = 50.5% -3 балла

Выводы по оценке

  • Лучший суммарный результат показала модель Qwen2.5-3B-Instruct после внедрения контура учебных планов: 229/390.
  • Добавление учебных планов улучшило результаты обеих моделей Qwen:
    • Qwen2.5-1.5B: 197 → 213;
    • Qwen2.5-3B: 220 → 229.
  • Для YandexGPT-5-Lite-8B добавление учебных планов не дало улучшения по суммарной оценке: 200 → 197.
  • Наиболее проблемными остаются вопросы, где требуется точное извлечение факта из табличного источника или сопоставление нескольких образовательных программ.
  • Основной резерв улучшения связан не только с выбором LLM, но и с качеством retrieval: точнее маршрутизировать запросы между РПД и учебными планами, лучше нормализовать названия направлений и образовательных программ, усиливать работу с табличными фактами, снижать шум в графе сущностей и добавлять reranking для спорных запросов.

Научно-практическая значимость

Проект показывает, как можно построить прикладную RAG-систему для домена образовательных документов, где данные представлены одновременно в текстовой и табличной форме. Такой подход может использоваться для консультации абитуриентов, студентов, преподавателей, использования своего внутреннего поисковика по образовательным программам, сравнения направлений подготовки, анализа структуры учебных планов и поддержки сотрудников при работе с большим корпусом нормативных учебных документов.

Ограничения

Текущая версия проекта имеет исследовательский характер. Ключевые ограничения:

  • качество ответа сильно зависит от качества найденного контекста;
  • табличные документы требуют более строгого извлечения фактов;
  • локальные LLM могут уверенно формулировать неверный ответ при шумном контексте;
  • граф сущностей полезен не для всех типов вопросов и требует фильтрации общеупотребительных терминов;
  • для production-сценария необходимы отдельные модули тестирования, API-обёртка и интерфейс пользователя.

Будущие направления развития

  • вынести код из ноутбуков в отдельный Python-пакет;
  • добавить CLI/API-интерфейс;
  • реализовать отдельный fact extractor для учебных планов;
  • добавить cross-encoder reranker;
  • расширить golden-set и автоматизировать оценку;
  • добавить Streamlit/FastAPI-интерфейс;
  • реализовать отчётность по источникам и confidence-score;
  • улучшить визуализацию графа сущностей.

About

Дипломный магистерский проект в Финансовом университете при Правительстве РФ

Topics

Resources

License

Stars

Watchers

Forks

Contributors