«Яндекс» запустил новый поисковый алгоритм «Палех», в основе которого лежит использование нейронных сетей. Благодаря «Палеху» поиск лучше находит страницы, которые соответствуют не только ключевым словам, но и смыслу запроса. Об этом компания сообщает в своем блоге.
Обработка поисковых запросов — это сложная и порой нетривиальная задача для решения которой, как правило, успешно используется машинное обучение. Однако оно имеет некоторые ограничения: дело в том, что для обучения искусственного интеллекта необходимо большое количество разнообразной пользовательской статистики. Эта статистика существует в большом объеме для популярных и среднечастотных запросов, но практически отсутствует для уникальных запросов — то есть тех, которые не повторяются хотя бы дважды в течение всего периода наблюдений. При этом, до 40 процентов поисковых запросов в Яндексе являются именно уникальными (их еще называют «длинным хвостом», так как они составляют существенную долю обращений к поиску): это могут быть запросы от детей, которые обращаются к системе, как к живому собеседнику («дорогой яндекс посоветуй пожалуйста новые интересные игры про фей для плантика»), или запросы от людей, которые хотят узнать название фильма или книги по эпизоду («фильм про человека который выращивал картошку на другой планете»). Трудность их обработки заключается в том, что поисковику в таком случае необходимо искать не только соответствие по словам, но и по смыслу.
Разработчики «Яндекса» запустили новый алгоритм, который позволяет справиться с этой проблемой. Он был назван «Палех» в честь Жар-птицы с длинным хвостом, которая часто появляется на палехской миниатюре. В основе «Палеха» лежит использование нейросети и метод семантических векторов.
Разработка и обучение нейросети происходили в несколько этапов. Сначала исследователи использовали модель разработчиков из Microsoft Research под названием Deep Structured Semantic Model. На ее вход подавались тексты запросов и заголовков, которые разбивались на буквенные триграммы (для запроса «палех» получаются триграммы «па», «але», «лех», «ех»). Так как словарь всех известных триграмм ограничен, то
текст запроса можно представить в виде вектора размером в несколько десятков тысяч элементов, и отметить вхождение триграмм из запроса в словарь (совпадающие триграммы отмечаются единицей, остальные — нулем). Сравнивая эти векторы можно узнать о наличии совпадающих триграмм в заголовке страницы и запросе, однако для получения вектора со «свойствами семантической близости» исследователи выполняли преобразование. Его суть заключалась в том, что на выходе модель выдавала результат скалярного умножения последних векторов заголовка и запроса. Система обучалась таким образом, что для положительных обучающих примеров выходное значение было большим, а для отрицательных — маленьким. Сравнивая векторы последнего слоя, исследователи могли вычислить ошибку предсказания и «подкрутить» нейросеть так, чтобы эта ошибка уменьшилась.
Однако определение семантической близости запроса и заголовка страницы было недостаточно эффективным, если нейросеть использовала только триграммы, поэтому разработчики увеличили размер входного слоя оригинальной модели, дополнительно включив в него около 2 миллионов слов и словосочетаний. После этого они создали набор из запросов и случайных заголовков страниц — например, для запроса «палех» случайным заголовком может быть «Правила дорожного движения 2016 РФ». Среди пар «запрос-случайный заголовок» нейросеть училась искать хорошие — то есть те, в которых слова совпадают (по сути дела, это поиск по ключевым словам). Затем исследователи использовали пары, которые система сочла плохими, для того, чтобы научить ее различать неочевидные закономерности. Они добавляли в названия страниц слова, которые соответствовали одному из слов запроса (для запроса «палехская роспись» заголовок страницы выглядел как «Правила дорожного движения 2016 РФ роспись»). В результате нейросеть научилась отличать естественные пары от составленных вручную, то есть не попадаться в ловушку программистов, но все еще не справлялась с главной задачей.
Тогда программисты заставили алгоритм «воевать» против самого себя. Среди сотен случайных заголовков исследователи выбирали такой, который нейросеть считала наилучшим. Так как этот заголовок все равно был случайным, и с высокой вероятностью не соответствовал запросу, то его стали использовать в качестве отрицательного примера. Другими словами, разработчики «показывали» нейросети лучшие из случайных заголовков, обучали ее, затем искали новые лучшие случайные заголовки, снова показывали системе и так далее. Раз за разом повторяя данную процедуру, исследователи улучшили качество модели, и самые удачные случайные пары стали похожи на настоящие положительные примеры. Использованная схема обучения называется hard negative mining.
Сравнение работы «Палеха» и простого алгоритма BM25, основанного на поиске соответствия между словами в тексте запроса и заголовка показало, что нейросеть значительно лучше справляется с задачей поиска. Например, она может понять, что запросу «келлская книга» соответствует не только страница с названием «келлская книга википедия», но и может подходить страница «ирландские иллюстрированные евангелия vii viii вв». Кроме того, «Палеху» не страшна и переформулировка запроса, которая существенно затрудняет работу алгоритма BM25, и он все равно правильно определяет релевантные заголовки страниц. В будущем разработчики планируют научиться строить модель по полному тексту, так как заголовок содержит неполную информацию о документе.
Недавно программисты разработали поисковую систему для видеороликов на YouTube, которая в качестве запроса принимает от пользователя последовательность пиктограмм. В ее основе лежит также использование нейросети, которыя умеет выделять кадры из роликов Youtube, определять, что именно изображено на экране в данный момент и сопоставлять кадр с определенным набором пиктограмм (эмодзи).
Кристина Уласович