Tiny LLM классифицирует вопросы лучше, чем без обучения

Tiny LLM классифицирует вопросы лучше, чем без обучения

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

Без обучения базовая модель Qwen 0.6B (всего 600 млн параметров) правильно классифицировала только 10% из 131 тестовых вопросов. После дообучения на фреймворке Unsloth с использованием 850 примеров точность взлетела до 79%, затем до 92%. Ключевой трюк: вместо категорий из естественного языка модель учили выдавать двухсимвольные коды без семантического перекрытия, что исключило путаницу между близкими по смыслу классами.

Ключевые факты

  • Baseline без дообучения: модель Qwen 0.6B правильно определила 13 вопросов из 131 (10%), часто изобретала новые категории и переиспользовала широкие тэги.
  • После дообучения на Unsloth с QLora на датасете 850 примеров точность поднялась до 79%, но модель всё ещё путала пересекающиеся категории (например, бассейн и водонагреватель).
  • Второе улучшение: переход от текстовых категорий к двухсимвольным кодам (e.g. 'p1', 'p2' вместо 'pool', 'water') повысил точность до 92% благодаря устранению семантического перекрытия.
  • Датасет: 850 примеров, разбор 70/15/15 на тренировку, валидацию и тест; интеграционные тесты на отдельном датасете из 131 примера.
  • Фреймворк Unsloth хорошо подходит для тонкой настройки локальных моделей; параметры по умолчанию работают хорошо, главное качество данных, а не гиперпараметры.

Ред. Прорыв с 10% до 92% случился не от модели и не от гиперпараметров, а от решения не давать LLM осмысленные слова. Чем меньше смысла в ответах, тем точнее их выдаёт языковая модель.

Почему это важно

Показано, что даже крошечные LLM можно дообучить на специфичных задачах и получить полезные результаты. Традиционный подход требовал либо больших моделей, либо хранения тяжелых классификаторов отдельно. Вместо этого разработчик получил 600-миллионный классификатор, который работает локально, быстро и с точностью 92%. Это повышает масштабируемость RAG-систем в организациях: вместо того чтобы гонять все вопросы через один поиск, можно сначала классифицировать, потом ищейте в узком подмножестве.

Ред. Мораль не в том, что крошечная модель справилась, а в том, что её научили не понимать категории, а штамповать коды. Полезный классификатор получился ровно тогда, когда из задачи убрали язык.

Кому это важно

Разработчикам локальных RAG-систем, которые хотят улучшить скорость и точность поиска. Компаниям с внутренними базами знаний (внутренние FAQ, документация, процессы). Людям, ищущим альтернативу дорогим API облачных LLM. Специалистам по машинному обучению, изучающим практику дообучения малых моделей. Разработчикам умных помощников для дома, офиса или клиента.

Ред. Тем, кто устал платить за облачное API и готов вместо одного большого поиска держать локального привратника на 600 млн параметров. Бонусом: классическому ML-инженеру, который всё это решал бы логрегрессией без слова «дообучение».

Как это применить

Установите Unsloth, подготовьте датасет с примерами вопросов и целевыми категориями (850+ примеров дают хорошие результаты). Разбейте его на тренировку/валидацию/тест 70/15/15. Дообучите базовую модель вроде Qwen на этих данных используя QLora. Для улучшения точности вместо текстовых категорий используйте короткие коды без семантического перекрытия. Протестируйте на отдельном датасете и соберите интеграционные тесты. Интегрируйте модель как препроцессор перед RAG поиском.

Ред. Рецепт честный: 850 примеров, сплит 70/15/15, отдельный тест и коды вместо слов. Самая трудоёмкая часть («собрать чистый датасет») в инструкции занимает полстроки, а на деле и есть вся работа.

Можно ли доверять

Методология звучит, то есть 70/15/15 сплит, отдельный тестовый датасет, интеграционные тесты, итеративное улучшение подходов. Автор честно показывает неудачи (baseline 10%) и пути их преодоления. Unsloth, популярный фреймворк, открытый исходный код. Однако результаты специфичны для бытовых вопросов и могут не обобщаться на другие домены без переобучения.

Ред. Методология аккуратная как раз потому, что автор не прячет провал на старте: 10% выглядят убедительнее любого графика успеха. Только цифра 92% живёт строго в мире бассейнов и водонагревателей, за их пределами всё считать заново.

Риски и подводные камни

Переобучение легко получить на малых датасетах, особенно если не использовать отдельный тестовый датасет. Автор борется с путаницей между семантически близкими категориями (вода в разных контекстах), это требует хорошей разметки данных. Код без семантического смысла (p1, p2) менее maintainable для человека. Качество датасета критично: если обучающие примеры шумные или неполные, модель будет плохой. Нужна постоянная переподготовка при добавлении новых категорий или изменении области применения.

Ред. Платой за точность стали коды p1 и p2, которые ни один человек не прочитает без шпаргалки. Плюс вечная подписка на переобучение: добавил категорию «гараж» и снова собирай датасет, размечай, гоняй тесты.

«The prediction accuracy is up from 10% to 79%, but I still see some clear patterns of incorrect results: The model now shows clear signs of heading in the right direction, but I see a pattern of only emitting fragments of the correct categories from the allowed list.»

— Экспериментатор, отчёт о первой попытке дообучения