- PVSM.RU - https://www.pvsm.ru -

Как мы обновили поисковые подсказки в Яндексе и нашли для них правильную метрику

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

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

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

image [2]

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

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

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

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

Как мы обновили поисковые подсказки в Яндексе и нашли для них правильную метрику - 2

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

Проблема с 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. Пословный и полнотекстовый ввод

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

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

Как мы обновили поисковые подсказки в Яндексе и нашли для них правильную метрику - 8

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Будущее

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

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

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

Автор: Алексей Шаграев

Источник [3]


Сайт-источник PVSM.RU: https://www.pvsm.ru

Путь до страницы источника: https://www.pvsm.ru/programmirovanie/266724

Ссылки в тексте:

[1] рассказывали на Хабре: https://habrahabr.ru/company/yandex/blog/160749/

[2] Image: https://habrahabr.ru/company/yandex/blog/340552/

[3] Источник: https://habrahabr.ru/post/340552/?utm_source=habrahabr&utm_medium=rss&utm_campaign=best