Помощь с текстом, перевод видео с японского и корейского, распознавание QR-кодов — что умеет обновлённый Яндекс Браузер
Исходный текст взят здесь
Сегодня мы выпускаем большое обновление для нашего браузера, которое содержит множество изменений, основанных на использовании нейросетей или других методов машинного обучения. С помощью этих технологий браузер теперь сможет исправлять ошибки в тексте, сокращать или улучшать его, пересказывать видео с японского или корейского языков, распознавать QR-коды в трансляции и предлагать перейти по ссылке одним кликом. Кроме того, он защитит вас от фишинговых страниц и многих других угроз.
В этой статье мы расскажем, как мы обучали нейросеть по учебнику Розенталя, как модель, отвечающая за субтитры, понимает, что начал говорить другой человек, почему не каждый QR-код легко распознать, и за счет чего мы научились ловить фишинговые сайты, которые появляются буквально за несколько минут. Обо всем этом вы узнаете, прочитав статью до конца.
Помощь с текстом: исправление ошибок, улучшение и сокращение
Одна из главных новых нейросетевых функций в Браузере - "Помощь с текстом", которая основана на YandexGPT. Она проверяет орфографию и расставляет знаки препинания. Если, например, не получается уложиться в формат по количеству знаков, то текст будет сокращен и сделан более понятным и структурированным.
За каждое действие отвечают разные модели. Почему они разные? Потому что в режиме редактирования нам нужна модель, которая исправит ошибки в тексте, а в режимах сокращения и улучшения - переформулирует его. Поговорим о каждой модели по порядку.
Исправить ошибки
Многие люди, которые используют языковые модели для работы с текстами, сталкиваются с одной и той же проблемой. Допустим, в тексте есть десять ошибок, вы передаете его модели, а в результате получаете практически полностью переписанный текст. Модель работает по принципу "нет слова - нет ошибки". Но это явно не то, чего вы ожидали.
Сначала мы проверили самую важную гипотезу: может ли эта модель вообще не переписывать текст. Это была наша первая ключевая проверка. Мы взяли тексты, удалили из них все знаки препинания и заглавные буквы - это то, что мы передали модели на вход. На выходе мы получили оригиналы текстов. На этом мы обучили модель. Затем дали ей 100 текстов из нашего валидационного набора данных и попросили расставить знаки препинания. Она отлично справилась с заданием и ничего не добавила (значение Левенштейна было нулевым), и это - победа.
Для обучения нейросети мы создали специальный набор данных. Мы взяли 5000 текстов из открытого доступа в интернете. Нам было важно, чтобы это были реальные тексты, содержащие сленг, ненормативную лексику, специальные символы и другие особенности, которые могут усложнить задачу модели.
После этого мы вместе с редактором прошлись по всем примерам из учебника Розенталя - главного учебника русского языка. Мы исправляли пунктуацию и орфографию, но не стремились к идеальному результату. Мы хотели сохранить стилистические особенности текстов, такие как англицизмы и плеоназмы (когда слова полностью или частично дублируют смысл друг друга, например, "коллега с работы" или "краткое резюме"). Нам было важно, чтобы модель научилась отличать орфографические и пунктуационные ошибки от разговорной речи.
Затем мы составили инструкции и попросили редакторов-ассистентов исправить тексты в соответствии с ними. На этом этапе у нас был готов набор данных, и мы загрузили его в более мощную модель для улучшения качества результатов.
Чтобы проверить работу модели, мы использовали валидационный набор данных. Результаты оказались хорошими, и сейчас наша модель исправляет 97% ошибок - пропускает одну ошибку в тексте на 5000 знаков. Мы планируем улучшить этот показатель до 99%. Сейчас мы изучаем, какие ошибки даются модели сложнее всего, и добавляем дополнительные примеры в набор данных.
Сократить и улучшить
Теперь перейдем к моделям, которые отвечают за сокращение и улучшение текста. При сокращении мы следим за тем, чтобы на выходе текст не терял важные факты, сохранял тон и стилистику, и нейросеть не добавляла ничего лишнего. Как и в случае с исправлением ошибок, мы обучили модель на наборе данных, который разметили редакторы.
Работа модели по улучшению текста оценивается по нескольким критериям: сокращается ли текст, добавляет ли модель что-то новое, сохраняет ли важные факты и сохраняет ли тон и стиль автора. В большинстве случаев модели удается добиться заметного сокращения текста.
Улучшить текст - значит привести его к нормам русского языка, сделать его более структурированным и понятным. Мы использовали большую модель YandexGPT 2 и специально подобранный промт. Мы прогнали собранные в интернете тексты через эту большую модель и получили датасет, на котором мы обучили маленькую модель улучшения текста.
Оценить работу модели достаточно сложно, так как понятие хорошего текста весьма субъективно. Мы определили такие критерии оценки: сохранение важных фактов, тона и стиля автора, а также стало ли текст более приятным и понятным. На первых порах модель работала с фактами не очень хорошо: она их периодически теряла. Нам помогло дообучение на датасете, который мы разметили вручную.
Все три модели улучшения текста работают в любом текстовом поле любого сайта. Например, в браузерных версиях мессенджеров Telegram и WhatsApp, в полях комментариев и постов в VK, OK и других социальных сетях, а также в электронной почте. Сейчас мы работаем над тем, чтобы модель начала работать в текстовых редакторах, например, в Google Docs.
Улучшение текста пока работает только для русского языка, но мы планируем разработать их и для работы с английским. Кроме того, мы хотим попробовать добавить функцию перевода или изменения стилистики (например, сделать текст более весёлым или, наоборот, серьёзным). Если у вас есть идеи, какие ещё инструменты для работы с текстом были бы полезны, пишите их в комментариях.
Видео: новые языки, спикеры в субтитрах, распознавание QR-кодов
Японский + Корейский
За все время работы Браузер накопил хороший набор встроенных нейросетевых инструментов для видео. Он может переводить их с разных языков и даже озвучивать, а также делать краткий пересказ и генерировать субтитры. Придумать здесь что-то новое - довольно сложно, поэтому мы сосредоточились на улучшении того, что у нас есть.
Мы добавили новые языки, с которых можно перевести видео - японский и корейский. Почему именно они? Во-первых, это одни из самых распространенных и популярных азиатских языков, наряду с китайским. Во-вторых, нам пришло много запросов на добавление именно этих языков. Вы просили - мы сделали.
В целом, когда мы работали над переводом с китайского, мы рассчитывали добавить и другие азиатские языки. Тогда нам удалось собрать фреймворк, который можно без проблем масштабировать. Для сравнения: над китайским мы работали около семи месяцев, а корейский и японский нам удалось раскатать примерно в два раза быстрее. Мы уже знали, как собирать и обрабатывать датасет, как организовать процесс перевода, чтобы в итоге не потерять контекст.
Перевод с японского и корейского работает на YouTube. Если вам нужен перевод на других платформах, напишите в комментариях, на каких именно и почему.
Спикеры в субтитрах
Также мы добавили полезную функцию в нейросетевые субтитры. Дело в том, что субтитры на разных платформах часто не учитывают смену говорящего: когда говорят несколько человек, отображается сплошной текст, который в лучшем случае разделён точками. Мы научили Браузер определять смену говорящего: речь нового спикера будет начинаться с новой строки и с тире. Это делает просмотр видео более комфортным и удобным: не нужно следить, кто сейчас говорит какую фразу. К тому же, это плюс к теме доступности: людям с нарушениями слуха гораздо проще смотреть видео и воспринимать происходящее.
У нас уже были модели, которые поддерживали смену говорящего. Например, в озвучке использовалась мультиголосовая модель: она выбирает разные голоса для разных спикеров и озвучивает видео. Отображать смену говорящего в субтитрах проще: пайплайн отправляет нам явный тег, что говорят разные люди, и Браузер понимает, что нужно визуально обработать смену говорящего.
Суммаризация с восьми иностранных языков
Ещё одна приятная новость - мы обновили суммаризацию видео. Теперь Браузер может пересказывать видео на английском, немецком, французском, итальянском, испанском, китайском, японском и корейском языках. Сам пересказ будет на русском языке. А ещё мы добавили новые площадки: кроме видео на YouTube, Браузер может пересказать видео в VK, Дзен и Рутубе. Так что посмотреть несколько научных конференций на разных языках за один вечер стало вполне реально.
Как работает процесс суммаризации видео, мы расскажем в отдельной статье. К существующей модели мы добавили распознавание входного языка. Если видео на русском языке, то процесс проходит по стандартной схеме: перевод видео в текст, анализ речи (ASR), биометрия (здесь мы также следим за сменой спикера), чаптеринг (разделение на части), расстановка пунктуации. Если нам требуется суммаризация видео на иностранном языке, то мы начинаем с аналогичной обработки оригинальной звуковой дорожки и затем передаем результат модели, которая переводит его на русский язык.
Распознавание QR-кодов
В видео часто встречаются QR-коды. По нашей статистике, около 20% пользователей, которые пользуются видеоплатформами, ежедневно видят их в роликах. На десктопе работать с QR-кодами сложно: нужно тянуться за телефоном или делать скриншот, чтобы расшифровать код в стороннем сервисе. Поэтому мы решили облегчить пользователям жизнь и научили Браузер распознавать QR-коды на видео.
Весь процесс происходит локально. При воспроизведении видео Браузер раз в секунду делает его скриншот. Затем снимки обрабатываются: если пользователь смотрит видео 4K или 8K, то скриншоты получатся большими и в итоге сильно нагрузят систему, поэтому мы ужимаем их до FullHD. Если видео не самого высокого качества, то мы улучшаем и детализируем изображение. Скриншоты нигде не сохраняются, а сразу отправляются во встроенную библиотеку, которая понимает, есть ли на полученной картинке QR-код.
В качестве инструмента для самого распознавания мы взяли опенсорс-библиотеку ZXing с небольшими, но важными доработками с нашей стороны. Она возвращает распознанный текст и координаты QR-кода. По координатам Браузер отрисовывает кнопку и рамку вокруг QR. Сценарий использования кнопки зависит от распознанного текста: если это ссылка, то по ней можно перейти, а если это текст, то скопировать.
В целом, алгоритм прост, но реализация оказалась сложной. Основная проблема заключалась в качестве распознавания QR-кодов. Когда мы использовали библиотеку ZXing напрямую, она распознавала только 70% «правильных» QR-кодов, то есть тех, которые были созданы в соответствии со стандартом. Мы изучили код библиотеки и внесли три улучшения, которые значительно повысили качество распознавания и позволили справиться даже с самыми сложными и необычными QR-кодами.
Первое улучшение - апскейлинг изображения. Мы пытались распознать QR-код с исходного изображения, но если это не удавалось, то мы масштабировали его и пытались распознать снова. Это повысило точность распознавания с 70% до 76%.
Второе улучшение - исправление ошибки в библиотеке. Суть в том, что если библиотека распознавала QR-код, то потом она пыталась распознать его еще несколько раз с другими параметрами. Мы добавили условие в логику работы библиотеки, чтобы, если она хотя бы один раз с каким-то набором параметров распознала QR-код, то мы считали, что распознали его, и больше не возвращались к нему. Это дало значительный прирост - с 76% до 90%.
Третье улучшение - улучшенный алгоритм распознавания якорей (поисковых маркеров). Якоря - это большие квадраты в углах, с которых начинается чтение кода. Иногда QR-коды не соответствуют стандартам, и якоря превращаются в кружочки, сердечки и другие фигуры, что усложняет задачу. Мы убрали жесткую привязку к тому, что якоря должны быть квадратными, и теперь библиотека просто ищет три похожих фигуры в углах. Это улучшение позволило нам приблизиться к 100% распознаванию.
Для тестирования мы собрали два офлайн-датасета. Первый был из "правильных" QR-кодов, которые появлялись в трансляциях наших внутренних мероприятий. Мы стремились к 100% распознаванию (и достигли его). Еще у нас был "плохой" датасет. Мы попросили асессоров просмотреть разные видео и найти там QR-коды в плохом качестве или нестандартной формы. Там мы распознавали менее 30%, а после наших улучшений - около 60%. Эталоном для нас был iPhone 15: он также распознал не все нестандартные QR, а около 60%. Причем в нем за это отвечает большая и сложная нейронная сеть, а наш метод работает даже на слабом железе.
Кстати, о производительности и использовании нейросетей. В процессе разработки мы поняли, что для распознавания QR-кодов потребуется сложная ML-модель, для работы которой может не хватить ресурсов пользовательских устройств. Она бы работала очень долго и тормозила работу браузера. Распознавание с помощью библиотеки происходит быстрее: в среднем один код распознается за 10 миллисекунд, а в самых сложных случаях - за 25 миллисекунд.
Задача с распознаванием QR-кодов - хороший пример того, что всегда нужно думать о пользователе и не стоит пытаться отдать на откуп ИИ все подряд. Здесь нам было важно выбрать оптимальный инструмент для решения задачи, и нейросети не подошли. Хотя в основе нашего решения все равно лежат методы, используемые в ML.
Распознавание QR-кодов работает на всех десктопных платформах. Его можно включать и отключать в настройках инструментов для видео - там же, где расположены перевод, краткий пересказ и субтитры.
Защита от фишинга
До обновления Браузера мы использовали робота для обнаружения фишинговых сайтов. Робот несколько раз в день посещал сомнительные страницы и оценивал их с помощью ML-моделей на сервере. Если сайт оказывался фишинговым, мы добавляли его в базу. Когда пользователь переходил на новый сайт, Браузер быстро сверялся с базой: если адрес уже был в ней, появлялось предупреждение.
Основная проблема заключалась в том, что весь процесс занимал много времени и ресурсов. Нужно было, чтобы робот посетил сайт и узнал о его существовании. Затем следовало проверить сайт, добавить его в базу и развернуть базу. Весь этот процесс занимал от нескольких часов до суток - именно столько в среднем живут фишинговые сайты. Мошенники создавали домен, использовали его до тех пор, пока он не попадал в базу с фишингом, а затем брали новый домен и обманывали уже на нем. Были случаи, когда сайты могли выдавать нашему роботу нормальную страницу вместо фишинговой и таким образом обходить проверку.
Сейчас мы внедрили в Браузер ML-модель, которая проверяет сайт на клиенте. Это позволило нам сократить цепочку проверок. Пользователь заходит на сайт, модель анализирует его содержимое, даже если на этот сайт никто до этого не заходил. Если сайт выглядит как фишинговый, запускается более сложная модель на наших серверах. Она использует результаты работы клиентской модели, а также учитывает дополнительные факторы: посещаемость сайта, на кого он зарегистрирован, статистику отказов от этого сайта, как давно он был создан и как часто показывается в поиске. При этом конфиденциальные данные или текстовая информация со страницы не передаются. После проверки страницы рассчитывается ее скоринг и выносится окончательный вердикт. Если сайт похож на фишинговый, пользователь видит предупреждение, даже если этот домен был создан всего несколько минут назад и на него еще никто не заходил.
Таким образом, мы устранили уязвимость предыдущего способа обнаружения фишинга, когда из поля нашего зрения выпадали домены-однодневки, которые менялись на другие домены, пока мы их вносили в базу.
Самое сложное в разработке этой технологии - получить датасет. Как уже упоминалось выше, фишинг существует недолго и, кроме того, доступен только для конкретного человека по конкретному IP с конкретного устройства. Важно успеть собрать факторы, пока сайт не умер.
После сбора и фильтрации датасета мы обучили на нем большую BERT-модель, чтобы она могла отличать фишинг от обычного сайта. Но такая модель очень тяжелая: для серверов она подходит, но не подходит для работы в реальном времени. Для нашей цели мы выбрали DSSM: пусть модель, основанная на этом подходе, менее умна, но зато более быстра. Для обучения ей нужно очень много примеров, поэтому с помощью BERT-модели мы разметили огромный датасет, получили результаты и на их основе обучили DSSM. В итоге эта модель может на лету предсказывать фишинг и весит всего 20 МБ - мы встроили ее в Браузер.
Модель работает очень быстро - в пределах 10 миллисекунд, что не влияет на скорость работы Браузера. Кроме того, мы стали точнее определять фишинг. Да, аудитория Хабра разбирается в технологиях и, как правило, не клюет на примитивный фишинг, но для многих менее опытных пользователей подобные инструменты защиты особенно востребованы. Месячная аудитория, которая видит наши предупреждения только на десктопной версии, составляет около 1,8 млн человек.
Это далеко не все возможности, которые предлагает обновленный браузер. Например, теперь группы вкладок стали облачными и могут синхронизироваться между устройствами. Вы можете сами выбрать, какие именно вкладки и группы нужно синхронизировать. Кроме того, Алиса научилась генерировать изображения с помощью нейросети YandexART. Чтобы создать свою картинку, просто активируйте навык «Давай нарисуем» в диалоге с Алисой.
Нейросетевые функции браузера активируются с помощью компактных меню, которые автоматически появляются рядом с контентом, где их можно применить. Например, кнопка поверх видео или всплывающая плашка при выделении текста. Если функция влияет сразу на всю страницу, меню появится рядом с адресной строкой.
Новые функции доступны в последних версиях Яндекс Браузера для Windows, macOS и Linux, а также для мобильных версий (кроме помощи с текстом и распознавания QR-кодов в видео). Поделитесь своим опытом использования новых инструментов браузера. Это поможет нам улучшить действующие нейросетевые модели и придумать и обучить новые.