Поисковым подсказкам в Яндексе уже почти 10 лет. На первый взгляд, они кажутся довольно простой фичей — многие до сих пор уверены, что саджест учитывает только то, как часто люди вводят те или иные запросы. Несколько лет назад мы рассказывали на Хабре, сколько сложной математики стоит за тем, чтобы подобрать правильное следующее слово и помочь человеку сформулировать свой вопрос. Тогда мы даже подсчитали, что поисковые подсказки экономят людям около 60 лет. В какой-то мере саджест даже опередил своё время: сейчас, когда поиском все чаще пользуются с мобильных, скорость, с которой человек введёт запрос и получит ответ, стала критическим фактором. Значение подсказок в изменившемся мире выросло, и чтобы продолжать приносить счастье пользователям, нам тоже надо постоянно двигаться вперёд.  Темой поисковых подсказок в Яндексе я занялся в начале 2016 года. Цель, стоящая в то время перед командой саджеста, звучала очень амбициозно: «Сделать лучший саджест на мобильных», ни больше ни меньше!  Вспоминая о том, что было сделано с тех пор в области поисковых подсказок в Яндексе, трудно отделаться от двух ощущений. Первая: как же много всего мы сделали! Вторая: неужели всего этого не было раньше? Сделано действительно много, но эти вещи кажутся часто такими простыми и очевидными, что не верится, что их не было всегда.  Под катом — захватывающая драма о том, как менялись технологии, дизайн и продукт, и как мы искали метрику, на которую можно ориентироваться. Это поучительная история о том, что если вы чувствуете, что продукт сделан хорошо, но метрики говорят обратное, то что-то не так с ними, а не с вами. К началу 2016 года Поиск Яндекса на мобильных подошёл с так называемым tap-ahead вариантом саджеста. Если на десктопе мы как показывали, так и продолжаем показывать обычный «строчный» вариант саджеста, в котором при нажатии на строчку с подсказкой немедленно задаётся запрос, в tap-ahead варианте саджеста механика сложнее.  Идея заключается вот в чём. Десктопные клавиатуры – удобные и, как правило, пользователи набирают тексты с их использованием довольно быстро. На мобильных ситуация другая и поэтому, если в подсказках нет нужного пользователю варианта, ему намного сложнее просто дописать недостающую часть запроса. Поэтому первое слово каждого запроса решили сопроводить плюсиком и специально пометить. При нажатии на это выделение слово добавлялось к уже набранному тексту запроса, а перехода в поиск при этом не происходило. Так можно было слово за словом набрать нужный запрос. Проблема с tap-ahead саджестом в том, что пользователи его не понимают. Признаться, я его тоже не понимаю, даже спустя полтора года работы в саджесте. Чем запоминать, в какие места можно нажимать, а в какие – нет, проще просто ввести запрос целиком. Вот и пользователи тоже так делали. Намного проще для восприятия было бы визуально разнести элементы, имеющие разную функциональность. Так появился пословный саджест, который работает в мобильном поиске Яндекса с февраля 2016 года. На тот момент он выглядел вот так:  В таком варианте вообще исчезла возможность сразу задать длинный запрос целиком. Можно сказать, что так и было задумано: на мобильных экранах чрезвычайно мало места, и концы длинных запросов неминуемо терялись из виду. В итоге, пользователи вообще не понимали, что они спрашивают, и им приходилось часто изменять текст уже введённого запроса. В десктопном варианте с метриками саджеста всё более-менее понятно: чем чаще пользователи кликают на саджест, тем лучше. Поэтому основными метриками были: На мобильных ситуация оказалась сложнее. Раз мы предполагаем, что запрос можно вводить «по частям», то важно знать не только запрос целиком, но и все его части. Что такое «запрос, введённый с использованием саджеста», тоже непонятно: ведь можно было в процессе один раз нажать на пословную подсказку, а можно – пять. Второе в некотором смысле лучше. Поэтому для мобильных нам пришлось делать новые метрики, по которым мы могли бы принимать изменения в поисковых подсказках. Офлайн-метрики – это метрики, для вычисления которых не требуются настоящие пользователи. Их можно вычислить с использованием логов, асессоров или просто математических формул. В случае с саджестом сразу приходит на ум создание некоей «модели пользователя». Предположим, пользователь ввёл первые несколько символов запроса. В ответ Яндекс показал ему некоторые пословные подсказки. Какие-то из них продолжают его запрос верным образом. Будем считать, что в такой ситуации он действует жадно и сразу нажимает на соответствующую подсказку, либо продолжает побуквенно вводить запрос, если ни одна из подсказок ему не подошла. Так продолжается до тех пор, пока запрос не будет полностью задан. В конце мы измерим общее количество действий (нажатий на клавиши и подсказки), которые совершил пользователь. Это и будет наша метрика, которую мы назвали ExpectedActionsCount (EAC). Из этой метрики можно выделить один важный аспект: как часто пользователю не нужно начинать вводить следующее слово, так как оно уже есть среди пословных подсказок? Возьмём общее количество правильно предсказанных следующих слов и поделим на их общее количество – получим метрику GuessProbability. Как правило, две метрики меняются однонаправленно: уменьшение ExpectedActionsCount, как правило, сопровождается увеличением GuessProbability. При помощи этих метрик мы сделали первое заметное изменение в пословном саджесте: выкатили возможность объединять пары слов в биграммы. Так, редкий пользователь захочет ввести запрос «высота эйфелевой», более вероятно, что ему понравится запрос «высота эйфелевой башни». Критерии показа биграмм легко настраивать, имея офлайн-метрики – для того они и созданы, чтобы перебирать большое количество вариантов с тем, чтобы проверять на пользователях только самые лучшие из них. Интересно, что EAC с отключённым саджестом равняется примерно 19: фактически, это средняя длина в символах запросов к Яндексу. С использованием саджеста EAC изначально оказался равным 13.5, т.е. экономил практически треть действий на ввод запроса. В настоящий момент EAC равняется примерно 11.5. Однако, офлайн-модели никогда не расскажут полной правды о поведении пользователей, так как любые модели неточны. Нам сразу показалось, что основная цель саджеста – делать ввод запросов удобным, поэтому основным критерием качества должна быть скорость ввода запросов. Поэтому мы с ходу придумали простые метрики: доля запросов, вводимых быстрее, чем за X секунд, для разных X. Построив график по этим метрикам с начала года, мы ужаснулись: оказалось, что при внедрении пословного саджеста они резко ухудшились! Сразу после его включения в продакшен пользователи начали вводить медленнее. Однако затем скорость ввода постепенно росла, и уже к августу превзошла февральские показатели. Вот, например, график доли запросов, которые вводятся менее чем за 15 секунд, с января по июль 2016 года. График нормирован так, что за единицу принимается значение в самом начале наблюдений.
 Оказывается, что в момент внедрения доля быстро вводимых запросов упала более чем на шесть процентов! В рассматриваемый период у нас случилось только одно крупное внедрение – то самое объединение слов в биграммы, и соответствующая разладка, произошедшая в мае, хорошо заметна. Удивительно то, что скорость ввода росла и в то время, когда мы ничего нового не запускали. Другими словами, пользователи постепенно привыкают к новому способу ввода и скорость ввода растёт сама собой! При более подробном изучении графиков обнаружились и некоторые другие закономерности: С момента ввода новых метрик прошло не так много времени, но уже приближалась осень — время, когда многие показатели испытывают сильное влияние сезонности. Не стала исключением скорость ввода: доля быстро вводимых запросов резко упала!
 Первое время было очень страшно: ввод замедлился очень сильно, наверняка мы сломали что-то и не заметили этого! Разгадка, однако, была намного проще. С наступлением осени пользователи начали задавать намного более длинные запросы. Вот так выглядит график доли запросов из более чем семи слов: она выросла более чем на треть!
 Стало ясно, что «доля быстро вводимых запросов» – хорошая, но подверженная сезонности метрика. Мы довольно долго искали метрику, которая замечала бы наши релизы и при этом была устойчивой к сезонности. Такой метрикой оказалось «время ввода в расчёте на один символ запроса». Вот как выглядит её график за рассматриваемый период:
 Таким образом, за полгода после внедрения пословного саджеста пользователи стали вводить запросы примерно на 5% быстрее, если сравнивать с началом года, когда использовался tap-ahead. Остаётся только добавить, что с января 2016 года по октябрь 2017 года пользователи мобильного поиска Яндекса стали задавать запросы на 17% быстрее – впечатляющая демонстрация результативности наших усилий! Стоит упомянуть и то, что самопроизвольный рост скорости ввода продолжается до сих пор. С каждым днём наши пользователи всё быстрее и быстрее вводят запросы. Впрочем, мы, конечно же, помогаем им в этом и нашими релизами. После того, как метрики придуманы и проверены, открываются возможности для фантазий. Давайте подумаем о том, как можно было бы ещё ускорить ввод? Хорошо, мы всегда можем улучшить данные и всё лучше и лучше выбирать варианты для продолжений запросов. Но что мы можем сделать с чисто визуальной частью? Ответ довольно простой: давайте объединим старый и новый подходы. Помимо пословных подсказок будем показывать и старые, строчные, или «полнотекстовые». Тогда, если нужный запрос уже появился на экране, пользователь сразу сможет его выбрать, и это сэкономит несколько действий и времени. Разницу между пословным и пословно-полнотекстовым саджестом легко понять из следующей иллюстрации:  Видно, что изменения здесь несколько существеннее, чем можно было бы предполагать. Например, теперь совсем не видно страницы с результатами поиска. С другой стороны, нужны ли они, если пользователь уже решил вводить новый запрос? Оказалось, не очень-то и нужны. На это внедрение пользователи отреагировали ожидаемо: скорость ввода увеличилась, равно как и количество пользователей, которые когда-либо пользуются саджестом. Саджест прошёл интересный и неоднозначный путь. Когда-то у нас были лишь полнотекстовые подсказки, затем –только пословные, в итоге мы пришли к комбинированному варианту. Но этот комбинированный вариант сильно отличался от предыдущей итерации (tap-ahead) тем, что теперь различные функциональные элементы, обладающие различным поведением, интерфейсно разнесены. Благодаря этому оказалось намного проще понять назначение каждого элемента и эффективнее использовать результат. Когда стало ясно, что дизайнерские изменения в поисковых подсказках способны существенно влиять на метрики, фантазию было уже не остановить. Для начала, попробуем усилить эффект от полнотекстовых подсказок. Если все пословные вытянуть в одну линию (с возможность скролла), для полнотекстовых подсказок будет больше места и, возможно, ввод станет ещё более быстрым.
 С другой стороны, можно попробовать что-либо совсем уж странное. Давайте всегда подсказывать вероятные продолжения для наиболее вероятного следующего слова в отдельном столбце! Так родился вариант, который мы называем «саджест в виде графа»:
 Саджест в виде графа производил фурор на всех UX-исследованиях. Все пользователи, впервые увидевшие его, говорили буквально следующее: «оооо, наконец-то мне помогают вводить запрос!». Тот, кто до сих пор не подозревал, что в поиске присутствуют подсказки, наконец их замечал. Тот, кто знал об их существовании, начинал пользоваться ими чаще. Помимо этого, мы ещё пробовали изменять размер кнопок в пословных подсказках и их цвет. В целом, мысль была понятной: нужно как-то увеличить заметность подсказок, ведь они полезны и ими нужно чаще пользоваться! Однако при проверке в онлайне обе гипотезы были отброшены. Тут же выяснились различия между метриками «доля использований саджеста» и «скорость ввода». К сожалению, слишком заметные подсказки вредят пользователям: они начинают слишком часто перескакивать глазами между саджестом и клавиатурой, а в результате вводят слишком медленно. Кроме того, это был один из редких случаев, когда тотальный успех на UX-исследованиях сопровождается столь же провальным выступлением в онлайне. Мы уже поняли, что скорость ввода складывается из качества данных и качества представления. Однако оказалось, что есть ещё один аспект проблемы – сетевой. Исторически источник поисковых подсказок жил на домене suggest.yandex.net, к которому поисковая вёрстка осуществляла асинхронные запросы в процессе пользовательского ввода. К концу лета 2016 года стало понятно, что эта схема устарела. Многие сервисы уже жили за «единым доменом» yandex.ru: например, картинки yandex.ru/images, видео yandex.ru/video и так далее. Зачем? Чтобы экономить сетевые взаимодействия. У нас один единый балансер для всех сервисов, доступных на домене yandex.ru. Это означает, что, не покидая этого домена, пользователю достаточно лишь однажды установить сетевое соединение. В случае с саджестом это было не так: для похода за саджестом с домена yandex.ru требовалось установить новое сетевое соединение, что на 2G-интернете иногда стоило нескольких секунд ожидания. Другим интересным моментом является поведение блокировщиков рекламы. Оказалось, некоторые из них блокируют кросс-доменные запросы. В нашем случае это привело к тому, что у некоторых пользователей саджест на несколько дней оказался полностью нефункциональным! Поэтому мы решили провести эксперимент, в котором саджест переносится за единый для сервисов Яндекса балансер. Тут стоит отметить, чем саджест отличается от других сервисов. Дело в том, что каждый поисковый запрос требует приблизительно столько же запросов в саджестовый источник, сколько в нём символов. Поэтому неудивительно, что типиный RPS для саджестового источника на порядки превосходит RPS других сервисов, в т.ч. большого Поиска. 100k RPS – это норма, саджест является одним из самых высоконагруженных сервисов Яндекса, непосредственно взаимодействующих с пользователями (некоторые внутренние сервисы выдерживают миллионы RPS). Для единого балансера это означает очень существенный рост нагрузки, так что для удовлетворения нужд поисковых подсказок пришлось значительно вложиться в железо, и мы не хотели этого делать без подтверждения гипотезы о пользе для пользователей. В результате эксперимент оказался одним из самых успешных за всё время. Его крутизна проявлялась даже в том, что пользователи начинали чаще задавать запросы в поисковую систему, не говоря уже о росте используемости саджеста и скорости ввода на единицы процентов. В этот исторический момент мы поняли, что полноценное развитие ввода на мобильных связано с множеством различных аспектов: это и качество данных, и интерфейс, и сеть. Дальнейшее развитие должно было осуществляться во всех этих направлениях и, возможно, в ещё каких-то новых, которые ещё не были нами замеченными. Кроме того, подсказки присутствуют не только в поиске, но также в наших приложениях, в браузере, в сервисах, отличных от Поиска, и с ними тоже нужно было что-то делать. Кроме того, ввод не обязан быть только текстовым. И всем этим мы занялись в 2017 году. О том, к чему это привело, мы поговорим в следующей статье.