3 December 2012

Как поисковые подсказки каждый день экономят человеческую жизнь

Яндекс corporate blogSearch enginesData Mining
Поисковые подсказки существуют в Яндексе уже больше четырёх лет. На профессиональном сленге мы называем их саджестом. Первоначально он формировался только на основе частоты тех или иных запросов. Со временем мы научили подсказки учитывать, из какого региона задаётся вопрос, связан ли он с каким-то недавним событием, можно ли показать пользователю сразу адрес сайта и какого. Ко всему прочему мы первыми из существующих поисковых систем внедрили технологию, которая позволяет саджесту учитывать предыдущий запрос пользователя и показывать ему контекстную подсказку. Теперь поисковые подсказки вступают с вами в диалог и меняются в зависимости от того, что вы только что искали.



Задача Яндекса — отвечать на вопросы, как заданные так и нет. Поиск — про заданные вопросы, но пользователю можно помочь их сформулировать. Ведь один вопрос можно сформулировать по-разному и часто правильная его постановка помогает найти более подходящие ответы. Особенно это полезно, когда человек ищет что-то по малознакомой ему теме и может недостаточно владеть правильной терминологией. Или, например, надо найти какую-то цитату или её автора. Не всегда человек может точно её воспроизвести. Если вместо «из всех искусств для нас важнейшим является кино» написать «из всех искусств для нас архиважнейшим является кино», то есть вероятность, что пользователь может не получить нужную ему информацию. Кстати, после того как он увидит подсказку с правильным вариантом, ему, может, и не понадобится искать дальше. И это не говоря о том, что саджест помогает избежать орфографических ошибок.

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

Например, поисковые подсказки умеют показывать переводы английских слов.
Перевод в поисковых подсказках Яндекса

Или давать ответы на однозначные запросы.
Ответы на однозначные запросы в поисковых подсказках Яндекса

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

С поисковыми подсказками, учитывающими предыдущий запрос, мы экономим ещё 7 месяцев. Оцените сами. Если человек искал [назад в будущее], то дальше он захочет найти [кристофер ллойд], а не [контакт] или [карта метро].

Поисковые подсказки по предыдущему запросу
Причём уточнённый саджест покажется и просто после клика в поисковой строке. В случае с фильмом Роберта Земекиса первой подсказкой будет [мы из будущего].

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

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

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

Например, на японском
Поисковые подсказки Яндекса на японском

или арабском.
Поисковые подсказки Яндекса на арабском языке
Tags:яндекспоисковые подсказкисаджестпоискпоисковые системы
Hubs: Яндекс corporate blog Search engines Data Mining
+23
12.8k 19
Comments 10
Top of the last 24 hours