← Все статьи

Как я учила модель хорошим манерам

После проекта с RAG-ассистентом мне стало понятнее, что не все задачи для ИИ решаются одним и тем же способом. RAG — это подход, при котором модель ищет ответ в подключённых документах: инструкциях, базе знаний, методичках, регламентах. Он хорошо подходит, когда ассистенту нужно опираться на конкретные факты и не выдумывать лишнего. Но есть задачи другого типа: например, изменить стиль ответа, тон общения или формат реакции модели. Для этого уже может понадобиться дообучение — процесс, при котором модели показывают много примеров нужного поведения, чтобы она начала чаще отвечать похожим образом. Важный нюанс: для этого модель должна быть установлена локально на сервере или, как в моём случае, на компьютере.

В этом проекте я решила разобраться с дообучением стиля: подготовить данные, запустить обучение, проверить результат и честно понять, что из этого получилось.

Технически проект был посвящён LoRA (Low-Rank Adaptation). LoRA — это способ дообучения, при котором мы не меняем всю модель целиком, а обучаем небольшую дополнительную надстройку. Это удобно, потому что полноценное обучение большой модели требует мощного оборудования, времени и бюджета. А LoRA позволяет провести учебный эксперимент даже на обычном компьютере, как у меня.

В качестве основы я взяла небольшую русскоязычную модель rugpt3small от Sberbank AI. Она построена на архитектуре GPT-2. По современным меркам это старая и слабая модель, но для учебной задачи подходила: за счет размера её можно быстро установить и обучить на не очень мощном компьютере. Я заранее понимала, что не получу ассистента уровня современных больших языковых моделей, хотя в конечном итоге пожалела, что не выбрала что-то посвежее и поумнее. Но цель была понять сам процесс дообучения и увидеть, можно ли хотя бы немного сместить стиль генерации. В конечном итоге эта цель была достигнута.

Чтобы результат был заметным, я выбрала нарочито яркий стиль: русский светский этикет — или немного вайба из “Теремка”, если вы понимаете, о чем я. Мне хотелось, чтобы модель отвечала как иронично-аристократичный, но всё ещё полезный ассистент: “сударь”, “сударыня”, “извольте”, “благодарствую”, “премного благодарен”. Внутри проекта это быстро превратилось в отдельный маленький спектакль. Модель должна была не просто отвечать, а как будто слегка поправлять манжеты перед каждым предложением.

Первым шагом я подготовила датасет. Это набор примеров, на которых модель должна учиться. Каждый пример состоял из инструкции пользователя и желаемого ответа. Например, пользователь просит объяснить, что такое токен, а модель должна ответить простыми словами, но в нужной манере. То есть не просто “токен — это часть текста”, а что-нибудь вроде: “Сударыня, токен — это небольшой кусочек текста, с которым работает модель”. Смысл должен был оставаться понятным, а стиль — узнаваемым.

Перед обучением я проверила базовую модель без дообучения. И это был полезный момент отрезвления. На просьбу объяснить, что такое LoRA простыми словами, модель могла ответить что-то вроде: “Это мой старый друг”. В этот момент стало ясно: передо мной не будущий элегантный ассистент, а скорее сонный камердинер, которого внезапно попросили прокомментировать машинное обучение.

Дальше я запустила LoRA-обучение. Технически всё прошло успешно: модель загрузилась, данные обработались, адаптер обучился и сохранился. Loss — показатель ошибки модели во время обучения — снижался. То есть процесс действительно шёл, а не просто создавал видимость бурной деятельности в терминале.

Но первый результат оказался скромным. Модель не начала сама уверенно говорить “сударыня” и “извольте”. Тогда я попробовала направлять её сильнее: начинать ответ с “Сударь,” или “Сударыня,”. И вот тут стиль стал проявляться. Появились обращения, старомодная вежливость, фразы вроде “слушаюсь покорно”. Правда, смысл ответов всё ещё мог уехать в сторону. Иногда модель начинала благородно, а продолжала так, будто её пригласили не на бал, а в техническую поддержку неизвестного сервиса.

Я провела второй эксперимент: усилила датасет, сделала больше примеров с явным началом “Сударь,” и “Сударыня,”, увеличила количество эпох обучения. Результат стал чуть понятнее, но не радикально лучше. При явной подсказке модель удерживала стиль, а без неё почти не входила в него сама. Смысловая точность тоже оставалась нестабильной.

Главный вывод для меня оказался очень практичным: дообучение — это не кнопка “сделать хорошо”. Это инструмент, результат которого зависит от базовой модели, качества данных и способа проверки. LoRA действительно может немного сместить стиль генерации, но если исходная модель слабая и плохо следует инструкциям, небольшой датасет не превратит её в качественного ассистента.

Зато после RAG-ассистента я лучше увидела разницу между подходами. Если ассистенту нужно отвечать по документам — это RAG. Если нужно менять стиль, формат или тип поведения модели — можно исследовать дообучение. Но и там, и там важно не ждать чудес, а проверять результат на практике.

В итоге у меня не получился безупречный аристократичный помощник. Зато получился честный эксперимент. Мой цифровой камердинер, хоть и не стал особенно полезным, свою учебную службу всё-таки сослужил.