company_banner

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

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

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

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


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

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

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

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

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


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

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

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

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

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

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

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

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

    image

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


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

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

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

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

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


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



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

    Комментарии 22

      +5
      Спасибо, это огромная и нужная работа. Так по описанию поисковик находил только тот же(или похожий) текст на разных форумах. А уже на них можно с некоторой вероятностью найти нужный фильм.
        0
        Одно время часто спрашивал в подфоруме «Поиск фильмов, мультиков и аудиосказок» форума forum.arjlover.net
        Поисковики тогда совсем ничего не могли предложить.
        +1
        Слабо для музыкальных клипов сделать?
        А впрочем… с фильмами тоже как-то неочень.
          0

          И мультфильмы

            +3
            А в чем принципиальная разница?
            Да и тот же знаменитый «Eagle flies alone» вполне себе находится по фразе «клип синие волосы орел метал» — только что тестил)
              +3
              1. «Фильм мужику в шлем бросили гранату» — ничего не находит. Фильм был в 80х, боевик, в конце эпизода диалог "- Он мёртв? — У него нет головы!". Название не скажу, не помню, яндекс не подсказал.
              2. «Клип два космических корабля с женщинами и мужчинами». Примерно так я когда-то его искал, коллективный разум тогда подсказал — The Cars, «You Are The Girl». Да, это не Ангус Янг («мужик в шортах с гитарой прыгает по сцене»), и даже не знаменитый «синие волосы метал» (про который я впервые услышал), но в том и суть, чтобы находить малопупулярное, старое и крепко забытое.
                0
                Суть в том, что индексация пока ручная. И далеко не всё фильмы просмотрели.
                  0
                  А, ну так не интересно.
                    0
                    Индексация не может быть ручной :)
                      +2
                      Она может быть только дикой и свирепой? :)
                    0
                    Спасибо, Eldhenn, сколько же я этот клип искал! Тридцать лет назад в Москве по 2х2 крутили…
                      0

                      Вот и я его почти 30 лет искал :)

                  +1
                  «А это мысль». Ну-ка, попробуем спросить у Яндекса:
                  клип где медленно ходят по свалкам и сбрасывают стул с обрыва — не нашел (Metallica, Unforgiven)
                  клип где мужик подбрасывал монету а потом у него посинели руки — не нашел (тут я не помню, что это было, но крутили в поздних 90-х по MTV)
                  клип где мужик ставит кассету и все начинают колбаситься — а вот тут Яндекс не сплоховал, и сразу выдал Push the tempo
                  +3

                  Эх, вот бы ещё заголовки слайдеров на экране телефона помещались…

                    +15
                    Простите, не удержался :)

                    image

                    А что до самих алгоритмов — занимались похожей проблемой — главное, за что споткнулись — при поиске по ассоциациям у людей в памяти зачастую всплывает «полузабытая» ассоциация с чем-то — например с фильмом, т.е. если-бы человек напрягся — полуразрушенная нейронная связь восстановилась, и он бы дал гораздо более правильное определение (так работает наша память), но так как все спешат — этого не происходит. Получается мало того, что ассоциации у каждого человека на одно и тоже явление отличаются, так они еще и оказываются искажены. С Грутом и грунтом как раз тоже самое.
                      0
                      Сразу вспомнилось

                      Ещё по телевизору смотрел.
                        +2
                        Думаю что с грутом и груНтом сработала банальная автокоррекция
                        +5
                        С «кольцом» промахнулись. Это Спайдервик.
                          +1
                          Да, в ВК Кольцо немного другую дичь показывало
                          0
                          Если убрать буквенные триграммы, на сколько упадет точность? И как вообще пришли к ним?
                            +1

                            Хм, ищите по описанию… Ладно.


                            "Книга, в которой были эльфы, кажется гном/хоббит с одной стороны и ведьма-полиморф в змею с другой, которую в конце концов съела ее расплескавшаяся магическая жижа. Они там шли к ее логову по болоту, намазав ступни эльфийским снадобьем, чтобы по воде ходить".


                            Что это? Когда-то давно читал, сейчас даже примерно не представляю, что это могло быть.

                              +3
                              «Порно с мёдом» по прежнему настаивает на поиске видео в мед клиниках. Слишком интеллектуальный поиск мало того что заменяет «мёд» на «мед», он так-же же сам автоматически подставляет английские синонимы — «medical, medicinal, medic», вместо «sweetness, sweet, honey, goody»

                              А если серьёзно:
                              «Фильм где зелёные буквы падают» — в вкладке картинки — находится именно то что искал, однако во вкладке видео и поиск — ни намёка.

                              Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.

                              Самое читаемое