Как устроена модель исправления ошибок в нейроредакторе Яндекс Браузера — часть I

В конце сентября в Яндекс Браузере запустили нейроредактор — это инструмент, который исправляет ошибки в тексте, делает его более читабельным и грамотным. С момента релиза функциями нейроредактирования в Браузере воспользовались с 18 миллионов устройств.

Сегодня ML-разработчик в Яндексе Никита Авдосев расскажет о модели исправления ошибок, которая работает «под капотом» нейроредактора. В первой части разбора поговорим о качестве исправления ошибок и работы с промптом. А во второй — о перфомансе.

Качество исправления ошибок

Предполагалось, что модель для исправления будут использовать с целыми текстами или их фрагментами. Сценарий такой: вы выделяете текст, а на выходе получаете скорректированный вариант без опечаток, с правильными окончаниями и корректно расставленными знаками препинания. Поэтому модель обучали на целых текстах, в исправлении которых LLM показывала себя хорошо.

Однако на практике оказалось, что весьма популярен и другой сценарий — выделить только одно слово с ошибкой и отправить его. Это логично, если слово подчеркнул браузер, но изначально инженеры не учли такого варианта.

Проведенные инженерами проверки показали, что в 41% случаев модель исправляла слово неверно либо не исправила вовсе, потому что у неё не было контекста. Результат весьма сомнительный, поэтому инженеры решили исправить эту недоработку. После всех улучшений модели доля ошибок в коррекции коротких текстов и отдельных слов сократилась до 16%.

Можно задаться вопросом: «А 16% — это много или мало?» Для сравнения, в Яндексе замерили, как хорошо срабатывает «опечаточник» — отдельный механизм внутри Браузера, который отвечает за подсветку неправильно написанных слов, когда вы печатаете, и предлагает варианты исправления (если достаточно в них уверен). Это не LLM, а алгоритм, который обращается к словарю. Задача непростая, но сейчас «опечаточник» отлично справляется с 75% ошибок. Значит, в этом плане модель превосходит решение, которое давно себя зарекомендовало.

Качество работы с промптом

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

После релиза в Яндексе учли реальные пользовательские сценарии и обновили модель, сделали больший акцент на популярные задачи. Для этого пришлось обновить датасеты для обучения и замеров.

Однако при таком подходе, когда упор только на популярное, из виду пропадает «хвост» — редкие, нечастотные запросы, которые составляют 15-20% от общего числа. Однако и на таких важно фокусироваться, потому что именно на их основе можно почувствовать реальную «умность» моделей

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

Поэтому инженеры компании сфокусировались на двух направлениях:

— генерализация — способность модели решать разные задачи, в том числе те которые раньше не видела. Для этого нужно увеличивать разнообразие задач и их формулировок;
— создание синтетических данных. Речь об обучающих примерах, сгенерированных более крупными моделями.

За счёт синтетики инженеры сумели количественно и качественно расширить хвост креативных запросов. В датасет из текстов и промптов добавили примерно 5 тысяч примеров. И теперь запросы вроде «перепиши как гопник» стали работать креативнее, чем раньше.

ML Underhood