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 хорошо подходит для тонкой настройки локальных моделей; параметры по умолчанию работают хорошо, главное качество данных, а не гиперпараметры.

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

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

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

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

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

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

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

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

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

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

«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.»

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