Поисковым подсказкам в Яндексе уже почти 10 лет. На первый взгляд, они кажутся довольно простой фичей — многие до сих пор уверены, что саджест учитывает только то, как часто люди вводят те или иные запросы. Несколько лет назад мы рассказывали на Хабре, сколько сложной математики стоит за тем, чтобы подобрать правильное следующее слово и помочь человеку сформулировать свой вопрос. Тогда мы даже подсчитали, что поисковые подсказки экономят людям около 60 лет.


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


Темой поисковых подсказок в Яндексе я занялся в начале 2016 года. Цель, стоящая в то время перед командой саджеста, звучала очень амбициозно: «Сделать лучший саджест на мобильных», ни больше ни меньше!


image


Вспоминая о том, что было сделано с тех пор в области поисковых подсказок в Яндексе, трудно отделаться от двух ощущений. Первая: как же много всего мы сделали! Вторая: неужели всего этого не было раньше? Сделано действительно много, но эти вещи кажутся часто такими простыми и очевидными, что не верится, что их не было всегда.


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


1. Пословный саджест


К началу 2016 года Поиск Яндекса на мобильных подошёл с так называемым tap-ahead вариантом саджеста. Если на десктопе мы как показывали, так и продолжаем показывать обычный «строчный» вариант саджеста, в котором при нажатии на строчку с подсказкой немедленно задаётся запрос, в tap-ahead варианте саджеста механика сложнее.



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


Проблема с tap-ahead саджестом в том, что пользователи его не понимают. Признаться, я его тоже не понимаю, даже спустя полтора года работы в саджесте. Чем запоминать, в какие места можно нажимать, а в какие – нет, проще просто ввести запрос целиком. Вот и пользователи тоже так делали.


Намного проще для восприятия было бы визуально разнести элементы, имеющие разную функциональность. Так появился пословный саджест, который работает в мобильном поиске Яндекса с февраля 2016 года. На тот момент он выглядел вот так:


Пословный саджест


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


2. Метрики


В десктопном варианте с метриками саджеста всё более-менее понятно: чем чаще пользователи кликают на саджест, тем лучше. Поэтому основными метриками были:


  1. Офлайн: покрытие. Какую долю запросов, заданных в конкретный день, пользователи могли обнаружить в саджесте?
  2. Онлайн: какова доля запросов, вводимых при помощи саджеста?

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


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


2.1. Офлайн


Офлайн-метрики – это метрики, для вычисления которых не требуются настоящие пользователи. Их можно вычислить с использованием логов, асессоров или просто математических формул.


В случае с саджестом сразу приходит на ум создание некоей «модели пользователя». Предположим, пользователь ввёл первые несколько символов запроса. В ответ Яндекс показал ему некоторые пословные подсказки. Какие-то из них продолжают его запрос верным образом. Будем считать, что в такой ситуации он действует жадно и сразу нажимает на соответствующую подсказку, либо продолжает побуквенно вводить запрос, если ни одна из подсказок ему не подошла. Так продолжается до тех пор, пока запрос не будет полностью задан. В конце мы измерим общее количество действий (нажатий на клавиши и подсказки), которые совершил пользователь. Это и будет наша метрика, которую мы назвали ExpectedActionsCount (EAC).


Из этой метрики можно выделить один важный аспект: как часто пользователю не нужно начинать вводить следующее слово, так как оно уже есть среди пословных подсказок? Возьмём общее количество правильно предсказанных следующих слов и поделим на их общее количество – получим метрику GuessProbability.


Как правило, две метрики меняются однонаправленно: уменьшение ExpectedActionsCount, как правило, сопровождается увеличением GuessProbability.


При помощи этих метрик мы сделали первое заметное изменение в пословном саджесте: выкатили возможность объединять пары слов в биграммы. Так, редкий пользователь захочет ввести запрос «высота эйфелевой», более вероятно, что ему понравится запрос «высота эйфелевой башни». Критерии показа биграмм легко настраивать, имея офлайн-метрики – для того они и созданы, чтобы перебирать большое количество вариантов с тем, чтобы проверять на пользователях только самые лучшие из них.


Интересно, что EAC с отключённым саджестом равняется примерно 19: фактически, это средняя длина в символах запросов к Яндексу. С использованием саджеста EAC изначально оказался равным 13.5, т.е. экономил практически треть действий на ввод запроса. В настоящий момент EAC равняется примерно 11.5.


2.2. Онлайн


Однако, офлайн-модели никогда не расскажут полной правды о поведении пользователей, так как любые модели неточны.


Нам сразу показалось, что основная цель саджеста – делать ввод запросов удобным, поэтому основным критерием качества должна быть скорость ввода запросов. Поэтому мы с ходу придумали простые метрики: доля запросов, вводимых быстрее, чем за X секунд, для разных X.


Построив график по этим метрикам с начала года, мы ужаснулись: оказалось, что при внедрении пословного саджеста они резко ухудшились! Сразу после его включения в продакшен пользователи начали вводить медленнее. Однако затем скорость ввода постепенно росла, и уже к августу превзошла февральские показатели. Вот, например, график доли запросов, которые вводятся менее чем за 15 секунд, с января по июль 2016 года. График нормирован так, что за единицу принимается значение в самом начале наблюдений.
Изменение доли быстро вводимых запросов


Оказывается, что в момент внедрения доля быстро вводимых запросов упала более чем на шесть процентов!


В рассматриваемый период у нас случилось только одно крупное внедрение – то самое объединение слов в биграммы, и соответствующая разладка, произошедшая в мае, хорошо заметна. Удивительно то, что скорость ввода росла и в то время, когда мы ничего нового не запускали. Другими словами, пользователи постепенно привыкают к новому способу ввода и скорость ввода растёт сама собой!


При более подробном изучении графиков обнаружились и некоторые другие закономерности:


  • по выходным пользователи вводят быстрее, чем по будням;
  • летом вариативность скорости ввода сходит на нет.

С момента ввода новых метрик прошло не так много времени, но уже приближалась осень — время, когда многие показатели испытывают сильное влияние сезонности. Не стала исключением скорость ввода: доля быстро вводимых запросов резко упала!
Изменение доли быстро вводимых запросов


Первое время было очень страшно: ввод замедлился очень сильно, наверняка мы сломали что-то и не заметили этого! Разгадка, однако, была намного проще. С наступлением осени пользователи начали задавать намного более длинные запросы. Вот так выглядит график доли запросов из более чем семи слов: она выросла более чем на треть!
Изменение доли длинных запросов


Стало ясно, что «доля быстро вводимых запросов» – хорошая, но подверженная сезонности метрика. Мы довольно долго искали метрику, которая замечала бы наши релизы и при этом была устойчивой к сезонности. Такой метрикой оказалось «время ввода в расчёте на один символ запроса». Вот как выглядит её график за рассматриваемый период:
Изменение доли быстро вводимых запросов


Таким образом, за полгода после внедрения пословного саджеста пользователи стали вводить запросы примерно на 5% быстрее, если сравнивать с началом года, когда использовался tap-ahead. Остаётся только добавить, что с января 2016 года по октябрь 2017 года пользователи мобильного поиска Яндекса стали задавать запросы на 17% быстрее – впечатляющая демонстрация результативности наших усилий!


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


3. Пословный и полнотекстовый ввод


После того, как метрики придуманы и проверены, открываются возможности для фантазий. Давайте подумаем о том, как можно было бы ещё ускорить ввод? Хорошо, мы всегда можем улучшить данные и всё лучше и лучше выбирать варианты для продолжений запросов. Но что мы можем сделать с чисто визуальной частью?


Ответ довольно простой: давайте объединим старый и новый подходы. Помимо пословных подсказок будем показывать и старые, строчные, или «полнотекстовые». Тогда, если нужный запрос уже появился на экране, пользователь сразу сможет его выбрать, и это сэкономит несколько действий и времени. Разницу между пословным и пословно-полнотекстовым саджестом легко понять из следующей иллюстрации:



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


Оказалось, не очень-то и нужны. На это внедрение пользователи отреагировали ожидаемо: скорость ввода увеличилась, равно как и количество пользователей, которые когда-либо пользуются саджестом.


Саджест прошёл интересный и неоднозначный путь. Когда-то у нас были лишь полнотекстовые подсказки, затем –только пословные, в итоге мы пришли к комбинированному варианту. Но этот комбинированный вариант сильно отличался от предыдущей итерации (tap-ahead) тем, что теперь различные функциональные элементы, обладающие различным поведением, интерфейсно разнесены. Благодаря этому оказалось намного проще понять назначение каждого элемента и эффективнее использовать результат.


4. Другие эксперименты с дизайном


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


Для начала, попробуем усилить эффект от полнотекстовых подсказок. Если все пословные вытянуть в одну линию (с возможность скролла), для полнотекстовых подсказок будет больше места и, возможно, ввод станет ещё более быстрым.
Скроллинг для пословных подсказок


С другой стороны, можно попробовать что-либо совсем уж странное. Давайте всегда подсказывать вероятные продолжения для наиболее вероятного следующего слова в отдельном столбце! Так родился вариант, который мы называем «саджест в виде графа»:
Саджест в виде графа


Саджест в виде графа производил фурор на всех UX-исследованиях. Все пользователи, впервые увидевшие его, говорили буквально следующее: «оооо, наконец-то мне помогают вводить запрос!». Тот, кто до сих пор не подозревал, что в поиске присутствуют подсказки, наконец их замечал. Тот, кто знал об их существовании, начинал пользоваться ими чаще.


Помимо этого, мы ещё пробовали изменять размер кнопок в пословных подсказках и их цвет. В целом, мысль была понятной: нужно как-то увеличить заметность подсказок, ведь они полезны и ими нужно чаще пользоваться!


Однако при проверке в онлайне обе гипотезы были отброшены. Тут же выяснились различия между метриками «доля использований саджеста» и «скорость ввода». К сожалению, слишком заметные подсказки вредят пользователям: они начинают слишком часто перескакивать глазами между саджестом и клавиатурой, а в результате вводят слишком медленно. Кроме того, это был один из редких случаев, когда тотальный успех на UX-исследованиях сопровождается столь же провальным выступлением в онлайне.


5. Сетевые истории


Мы уже поняли, что скорость ввода складывается из качества данных и качества представления. Однако оказалось, что есть ещё один аспект проблемы – сетевой.


Исторически источник поисковых подсказок жил на домене suggest.yandex.net, к которому поисковая вёрстка осуществляла асинхронные запросы в процессе пользовательского ввода.


К концу лета 2016 года стало понятно, что эта схема устарела. Многие сервисы уже жили за «единым доменом» yandex.ru: например, картинки yandex.ru/images, видео yandex.ru/video и так далее. Зачем? Чтобы экономить сетевые взаимодействия. У нас один единый балансер для всех сервисов, доступных на домене yandex.ru. Это означает, что, не покидая этого домена, пользователю достаточно лишь однажды установить сетевое соединение. В случае с саджестом это было не так: для похода за саджестом с домена yandex.ru требовалось установить новое сетевое соединение, что на 2G-интернете иногда стоило нескольких секунд ожидания.


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


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


Тут стоит отметить, чем саджест отличается от других сервисов. Дело в том, что каждый поисковый запрос требует приблизительно столько же запросов в саджестовый источник, сколько в нём символов. Поэтому неудивительно, что типиный RPS для саджестового источника на порядки превосходит RPS других сервисов, в т.ч. большого Поиска. 100k RPS – это норма, саджест является одним из самых высоконагруженных сервисов Яндекса, непосредственно взаимодействующих с пользователями (некоторые внутренние сервисы выдерживают миллионы RPS).


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


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


Будущее


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


Кроме того, подсказки присутствуют не только в поиске, но также в наших приложениях, в браузере, в сервисах, отличных от Поиска, и с ними тоже нужно было что-то делать. Кроме того, ввод не обязан быть только текстовым.


И всем этим мы занялись в 2017 году. О том, к чему это привело, мы поговорим в следующей статье.

Комментарии (27)


  1. QDeathNick
    26.10.2017 17:01

    О свеженаболевшем:
    Передайте пожалуйста тем, кто занимается поиском в Яндекс навигаторе, если человек едет из Волгограда в Астрахань, то не надо кидать его сразу на Ямал или в Питер при запросе «Газпром». Да и адреса за десятки тысяч километров есть смысл показывать ниже, чем те, которые рядом. Покажите как работает поиск на карте у гугла. Он ищет вдоль проложенного маршрута или при выборе участка карты появляется кнопка «Найти в этом районе». И ещё он показывает сколько времени займет заезд на заправку, цены в отеле, только открытые сейчас заведения и много чего ещё очень удобного. Только вот карта у гугла хуже, чем ваша на основе народной, поэтому по городам есть смысл ехать уже по вашему, так хоть есть более свежие дороги и разговорчики помогают.

    Удачи вам.

    P.S. А сейчас наоборот при попытке найти Газпром в Москве, меня тут же кидает в Волгоградскую область даже не предлагая варианты.


    1. vysokovskiy
      27.10.2017 00:48

      Добрый вечер!

      Сейчас поиск учитывает вашу текущую область просмотра карты, поэтому, конечно же, такого поведения (как перекидывание из Москвы в Волгоградскую область, например) быть не должно – видимо, это был баг. При передвижении карты результаты поиска обновляются с учетом нового спана карты. Чтобы отловить возникшую у вас ошибку, нам понадобимся немного данных – если есть возможность, пожалуйста, перейдите в «Меню», затем «О программе» и 5 раз нажмите на логотип, в буфер обмена скопируется отладочная информация. Ее нам лучше всего отправить на адрес службы поддержки app-navigator@support.yandex.ru

      А что касается в целом улучшения сценария поиска в Навигаторе – учета текущего маршрута, фильтров, цен и пр., то тут согласен, будем развиваться

      Спасибо, что пользуетесь :)


  1. QDeathNick
    26.10.2017 17:05

    P.S. А сейчас наоборот при попытке найти Газпром в Москве, меня тут же кидает в Волгоградскую область даже не предлагая варианты.


  1. lostpassword
    26.10.2017 17:27

    Вопрос не в тему, но, может быть, вы подскажете: а зачем вообще используется столько разных доменов (yandex.net, yastatic.net и так далее)?
    Почему нельзя всё разместить на yandex.ru?


    1. Myateznik
      26.10.2017 20:41

      Разные задачи:

      1. yandex.net — организация сетевой инфраструктуры;
      2. yastatic.net, yandex.st — cdn со всей статикой сервисов;
      3. yandex.ru, yandex.by, yandex.ua, yandex.com и т.д. — непосредственно сервисы, доступные пользователям с привязкой к стране по tld.


      1. lostpassword
        27.10.2017 07:29

        Спасибо.


    1. artemerschow
      26.10.2017 20:41

      Распределить нагрузку по разным DNS-серверам, так понимаю.


    1. ashagraev Автор
      26.10.2017 22:10

      Я не самый главный специалист по сетям, но проблематика тут примерно понятна и состоит из двух частей. Первая — историческая: расселить все имеющиеся сервисы на новые адреса — не за один день делается. Вторая — содержательная: единый балансер означает единую точку отказа, DDoS на один сервис затрагивает сразу и все остальные. Скажем, тот же саджест из-за своих RPS может кратно повышать нагрузку на балансеры.

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


  1. krabdb
    26.10.2017 18:31

    Коллеги, а почему в блоге такой технологичной компании такие страшные мутные скриншоты в век, когда у всех 4K и retina?


    1. ashagraev Автор
      26.10.2017 18:35

      Валидный вопрос. К сожалению, речь идет о временах очень давних по айтишным меркам, и приходилось довольствоваться скриншотами двухлетней давности, которые удалось случайно сохранить. Во многом, этот пост возник еще и как попытка сохранить то, что иначе исчезнет навсегда :)

      Старый код время от времени приходится удалять, поэтому восстановить состояние сервиса на произвольный момент времени в прошлом невозможно.


    1. ashagraev Автор
      26.10.2017 18:36

      Впрочем, в следующих статьях речь пойдет о менее отдаленных временах, поэтому качество картинок неминуемо улучшится :)


  1. AngReload
    26.10.2017 20:26
    -1

    поисковые подсказки экономят людям около 60 лет
    Ага, прям чуствую что помолодел настолько что даже ещё не родился.
    Как называется тот раздел невероятно сложной математики, который даёт эти числа?


    1. ashagraev Автор
      26.10.2017 20:45
      +1

      Ну, если вы каждому из миллиона пользователей экономите секунду, получается миллион сэкономленных секунд, как-то так :) Тут речь идёт об экономии в масштабах всех пользователей, а не каждого конкретного.


      1. AngReload
        26.10.2017 22:12

        Но это совершенно ужасный способ впечатлить большими числами, по которым совершенно непонятно как те были расчитаны, особая маркетинговая статистика.


        1. ashagraev Автор
          26.10.2017 22:24

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

          При этом с моей стороны было бы глупо отрицать толику маркетинга ;)


        1. izh-vii
          27.10.2017 09:47

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


          1. ashagraev Автор
            27.10.2017 09:49

            Повторюсь, что это написано в статье, ссылка на которую присутствует в том же абзаце, что и число: habrahabr.ru/company/yandex/blog/160749

            Недавно мы посмотрели на наши данные и выяснили интересный факт. В совокупности люди задают Яндексу 100 миллионов вопросов в день. Если отключить поисковые подсказки, то в сумме все эти пользователи потеряют 60 лет. Это время уйдёт у них на формулировку запроса, его возможное исправление и новую формулировку после того, как они не нашли того, что им нужно. Получается, что если учитывать среднюю продолжительность жизни в России, каждый день саджест позволяет не потерять жизнь одного мужчины.

            Таким образом, ответ: в день.


      1. sergey-b
        29.10.2017 22:17

        Чтобы все было честно, надо было использовать правильную размерность. Не 60 лет, а 60 человек·лет. Это рабочее время одного человека за 60 лет, или 1 год 60 человек, или 1 секунда у 80 млн человек.


  1. evil_random
    27.10.2017 01:34

    О, Яндекс, привет!
    Я понимаю что я вообще не по адресу, но никто другой (даже ваша поддержка) не отвечает на этот вопрос: когда вы планируете Punto под Mac OS починить?


    1. krabdb
      27.10.2017 03:54

      Punto работал и работает под High Sierra. Насколько я помню, проблемы были только на одном из «средних» dp/pb выпусков. На последующих выпусках beta проблема была решена. И, кстати, вы же в курсе, что давно вышел release?


      1. evil_random
        27.10.2017 12:13

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


  1. SerafimArts
    27.10.2017 05:09

    Поисковые подсказки. Хмм… Только что проверил, простите великодушно, не удержался =)


    Заголовок спойлера


    1. ashagraev Автор
      27.10.2017 06:22

      Такова жизнь :) Думаю, после вот этого запрос стал очень популярен.


      1. greatkir
        27.10.2017 10:52

        Давайте я поправлю вашу ссылку


        1. ashagraev Автор
          27.10.2017 10:52

          Спасибо!


  1. danfe
    27.10.2017 15:27

    Скажите, а можно как-то вообще задизеблить глобально эти подсказки от слова «совсем»? Можем там, куку какую секретную надо создать? Очень уж они мешают. Ну и до кучи: ya.ru с какого-то времени (уже довольно давно) перестал отправлять запрос по ентеру при отключенных скриптах. :-(


  1. alexBurov
    27.10.2017 21:05

    Cool