🤔 Задача: почему RAG может находить не то, что вы у него спрашиваете
VEDA — ИИ-платформа для школьников, где для ответов используют реальные учебники. Это важно: в школьной программе много точных фактов, а LLM может галлюцинировать.
На партнерском митапе МФТИ и РЭУ Пелагея Пашинская, ведущий ML-инженер и участница команды VEDA, рассказала, как команда дообучала энкодер для RAG.
😐 Качество поиска не устраивало команду, а реальных пользовательских запросов почти не было.
Если коротко, RAG сначала ищет подходящие фрагменты в базе знаний, а затем передает их LLM как контекст для ответа. Энкодер нужен, чтобы сопоставлять запросы и фрагменты текста при поиске.
Проблема: на запрос «Как человек влияет на растительный мир?» система возвращала чанки — фрагменты текста — про влияние леса на среду, среды обитания растений и лишайники. Темы рядом, но ответа на вопрос нет.
И это был не единичный случай. У модели, которая использовалась в продукте, Recall@1 был всего 36%: нужный фрагмент оказывался первым примерно в трети случаев. В 125 запросах из 500 релевантного чанка не было даже среди первых пяти.
Команда решила дорабатывать retrieval — этап, на котором RAG ищет нужные фрагменты. В VEDA использовали универсальную MiniLM, не адаптированную под школьные тексты и запросы.
📚 Исходными данными стали 5500 чанков учебников. Для каждого через GPT-4o mini генерировали по 3–5 запросов «от лица школьника» и получили около 27,5 тыс. пар: запрос + правильный фрагмент.
Для обучения добавили hard negatives — тексты, похожие на правильный ответ, но не отвечающие на запрос. Например, для вопроса «Как размножаются мхи?» правильный чанк описывал размножение мхов, а hard negative мог рассказывать о мхах в целом или о размножении папоротников.🌿
Не все примеры оказались одинаково полезными. Тексты, сгенерированные LLM, модель научилась отбрасывать слишком легко. Одна из гипотез команды — они могли заметно отличаться от реальных фрагментов учебников. А соседние чанки из того же параграфа оказались сложнее: тема близкая, но ответа на конкретный вопрос нет.
Отдельно команда сравнила модели еще без дообучения. Базовая BGE-M3 показала Recall@1 около 68% против 36% у MiniLM, которая использовалась в рабочей версии VEDA.
После дообучения BGE-M3 на собранных данных показатель вырос до 76,1%. MRR — метрика, которая учитывает позицию первого релевантного фрагмента в выдаче, — вырос примерно с 0,78 до 0,85.
И на том же вопросе про влияние человека на растительный мир retrieval уже находил фрагменты про вырубку, земледелие, загрязнение, осушение и орошение земель.
В случае VEDA проблема была именно в retrieval: до LLM доходили фрагменты, близкие по теме, но не отвечающие на конкретный вопрос. После замены и дообучения энкодера качество поиска заметно выросло.
А если вы только присматриваетесь к Data Science, в этом кейсе хорошо видно, с какой задачей может столкнуться ML-инженер: качество не устраивает, готовых данных почти нет — нужно собрать их, сравнить модели и проверить результат метриками.
Хотели бы еще разборы реальных ML-задач?
🔥 — да, особенно с метриками и ошибками
🤪 — да, только термины выдавайте порциями
😂 — нет, мой Recall@1 на сегодня исчерпан
Post #193
214
- 🔥 7