Хабрахабр

Фильм, в котором был грунт. Исследование Яндекса и краткая история поиска по смыслу

Иногда люди обращаются к Яндексу, чтобы найти фильм, название которого вылетело из головы. Описывают сюжет, запомнившиеся сцены, яркие детали: например, [как называется фильм там где мужик выбирает красная или синяя таблетка]. Мы решили изучить описания забытых фильмов и выяснить, что сильнее всего запоминается людям в кино.

Вы узнаете, какие технологии помогают поиску находить ответ даже тогда, когда точно сформулировать запрос просто не получается. Сегодня мы не только поделимся ссылкой на наше исследование, но и вкратце расскажем о том, как развивался семантический поиск Яндекса.

А ещё мы добавили слайдеры-загадки с примерами реальных запросов людей — почувствуйте себя поисковой системой и попробуйте угадать ответ.

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

К фактору пересечения слов добавились ещё два. Рунет развивался, сайтов становилось всё больше. Мы стали учитывать, какие сайты и по каким запросам они выбирают. С одной стороны, нам помогли сами пользователи. Это полезный сигнал. Нет точного соответствия слов, но сайт решает проблему человека? С другой стороны, на помощь пришли ссылки между сайтами, которые помогли оценить значимость страниц.

Особенно когда их пытаются накрутить зачастую очень талантливые поисковые оптимизаторы. Три фактора — это очень мало. И здесь началась эпоха машинного обучения. Но переварить больше вручную было сложно. В 2009 году мы внедряем Матрикснет на основе градиентного бустинга (позднее эта технология легла в основу более совершенной опенсорсной библиотеки CatBoost).

За нас это делала машина. С тех пор факторов становилось всё больше, потому что нам уже не приходилось искать взаимосвязи между ними вручную.

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

Ранжирование — это уже давно не только сравнение слов запроса и страницы. Два примера.

Допустим, что в прошлом был запрос [сериал из бразилии про мясного короля], для которого хороший ответ уже известен. Ещё в 2014-м мы внедрили технологию аннотации документа характерными запросами. Но у этих запросов много общих слов. Затем другой пользователь вводит запрос [бразильский сериал в котором были мясной король и молочный король], для которого машина ещё не знает ответ. Это сигнал, что найденная по первому запросу страница может быть релевантна и по второму.

Возьмём запросы [бразильский сериал в котором были мясной король и молочный король] и [сериал роковое наследство]. Другой пример. На этот случай мы начали учитывать историю поиска. Из общего у них только одно слово — «сериал», а этого мало для явного сопоставления запросов. Это полезно, потому что теперь мы будем использовать для поиска тексты обоих запросов, чтобы найти больше полезных страниц. Если у двух непохожих запросов пользуются спросом одни и те же сайты в выдаче, то можно предположить, что запросы взаимозаменяемы. Что делать с новыми запросами? Но это работает только для повторяющихся запросов, когда уже есть хоть какая-то статистика.

А в анализе однородных данных (текст, голос, изображения) лучше всего себя показывают нейронные сети. Недостаток статистических данных можно компенсировать анализом контента. В 2016-м мы впервые рассказали сообществу Хабра о технологии «Палех», которая стала отправной точкой для более масштабного применения нейросетей в Поиске.

Мы начали обучать нейросеть сравнивать смысловую (семантическую) близость текстов запроса и заголовка страницы. Два текста представляются в виде векторов в многомерном пространстве так, чтобы косинус угла между ними хорошо предсказывал вероятность выбора страницы человеком, а значит, и смысловую близость. Это позволяет оценить близость смыслов даже тех текстов, в которых нет пересечения слов.

Пример архитектуры слоёв для любопытных

image

Таким же способом мы стали сравнивать тексты запросов, чтобы выявлять между ними связи. Реальный пример из-под капота поисковой системы: для запроса [американский сериал про то как варят метамфетамин] именно нейронная сеть находит в качестве похожих по смыслу фразы [во все тяжкие] и [breaking bad].

Кроме того, когда мы получаем пользовательский запрос, то среди миллионов страниц индекса начинаем поэтапно выбирать лучшие страницы, но в «Палехе» мы использовали нейросетевые модели только на самых поздних этапах ранжирования (L3) — приблизительно к 150 лучшим документам. Запросы и заголовки — это уже хорошо, но мы не оставляли надежду применить нейросети и на полном тексте страниц. Это может привести к потере хороших ответов.

image

Жёсткие ограничения вычислений связаны с простым фактом: нельзя заставлять пользователя ждать. Причина предсказуема — ограниченность ресурсов и высокие требования к скорости ответа. Но затем мы кое-что придумали.

В 2017-м мы представили поисковое обновление «Королёв», которое включало в себя не только расширенное применение нейросетей, но и серьёзную работу над архитектурой для экономии ресурсов. Более подробно, со схемами слоёв и прочими деталями мы уже рассказывали в другом посте на Хабре, но сейчас напомним главное.

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

Ещё одна схема для любопытных

image

Мы построили дополнительный индекс. В его основе лежит гипотеза: если к запросу из нескольких слов взять достаточно большой список из самых релевантных документов по каждому слову или словосочетанию, то среди них найдутся документы, релевантные одновременно всем словам. На практике это значит вот что. Для всех слов и популярных пар слов формируется дополнительный индекс со списком страниц и их предварительной релевантностью запросу. То есть мы переносим часть работы из этапа L0 на этап индексирования и опять же экономим.

Более того, возможность сформировать вектор заранее и с менее жёсткими требованиями к производительности позволила нам использовать не только заголовок страницы, но и её текст. В итоге изменение архитектуры и перераспределение нагрузок позволило нам применить нейросети не только на стадии L3, но и для L2 и L1.

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

Показать больше

Похожие публикации

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Кнопка «Наверх»