Что происходит в поисковой системе Яндекса после того, как вы ввели запрос?
Сегодня я сидела и искала материалы в Яндексе для моей следующей статьи на Craftster, и мне, вдруг, стало интересно — а что происходит внутри Яндекса, когда они получают поисковые запросы от пользователей? Какие операции обработки данных совершает их программное обеспечение?
Я решила покопаться у них на сайте и нашла вот эту информацию, которая, думаю, будет вам интересна. Иногда, мы даже не задумываемся о том, что происходит на заднем плане в мире технологий, и очень часто такие подробности просто захватывают.
Итак — вы ввели ваш запрос в Яндекс…
Обработка запроса
Чтобы вникнуть в суть вопроса, человеку нужно подумать, а поисковой системе — провести лингвистический анализ запроса. Только потом можно приступать к поиску. Именно при анализе запроса система решает, по каким словам и словоформам нужно искать. Например, по запросу «гостиницы в иркутске» недостаточно найти документы с таким сочетанием слов. Хорошие ответы могут оказаться в документах со словами «отели в иркутске», «иркутские гостиницы», «иркутск гостиница» и т.д. Анализируя вопрос пользователя, система определяет язык запроса, проводит морфологический разбор каждого слова, выбирает нужные для поиска словоформы и отсекает лишние.
Определение языка запроса
Анализ запроса начинается с определения языка. Например, слово «дружина» в русском языке означает «военная рать», а в украинском — и «военная рать», и «жена». Чтобы понять, что имеет в виду пользователь, нужно выяснить, на каком языке он общается с поисковой системой. Для этого Яндекс смотрит, какой алфавит использует человек, какие в запросе есть характерные сочетания букв и слова. Так, по запросу [дружина князя игоря] Яндекс будет искать информацию о войске, а по запросу [дружина князя iгоря] — еще и о жене полководца, княгине Ольге.
Кроме того, при определении языка поисковая система обращает внимание на регион пользователя и язык интерфейса. Например, если человек задает вопрос из Украины и использует интерфейс на украинском языке, это будет дополнительным фактором, чтобы посчитать запрос украиноязычным.
Морфологический разбор и снятие омонимии
Определив язык запроса, Яндекс переходит к морфологии. Знание морфологии позволяет находить документы, содержащие разные формы одних и тех же слов. Например, по запросу [стали для ножей] Яндекс будет искать документы, в которых есть не только сочетание «стали для ножей», но и «сталь для ножа», «ножи сталь» и т.д. Анализируя запрос, Яндекс составляет список возможных словоформ для каждого слова.
По словоформе, которая есть в запросе, не всегда можно точно сказать, какое слово имел в виду человек. Например, в запросе [стали для ножей] «стали» — это не только существительное «сталь», но и глагол «стать». И в одном случае ([стали для ножей]) нужно искать формы существительного, а в другом ([стали выпадать волосы что делать]) – формы глагола. В такой ситуации нужно избавиться от неоднозначности, то есть снять омонимию. Омонимия — это совпадение слов (словоформ) с разным лексическим значением.
Чтобы выбрать для поиска наиболее вероятный список форм, система обращается к статистике совместной встречаемости слов и грамматических признаков. Например, в морфологическом разборе по запросу [стали для ножей] система выберет для поиска слово «сталь». Во-первых, потому что по статистике слово «сталь» чаще встречается со словом «нож», чем «стать». А во-вторых, потому что существительное в именительном падеже (в данном случае, «сталь») часто сочетается с существительным в родительном падеже («ножей»).
Для сбора статистики Яндекс использует Национальный корпус русского языка и свои собственные корпуса, где собрано огромное количество текстов в электронном виде.
Расширение запроса
После снятия омонимии поисковая система уже не будет искать слова, которые пользователь точно не имел в виду. В то же время, если ограничить поиск только словами из запроса, в поле зрения поисковой системы не попадут многие нужные документы. Ведь для одного и того же понятия в разных текстах могут использоваться разные слова, например на одном сайте может стоять аббревиатура, а на другом — полное наименование.
Для того чтобы учесть все возможные варианты, Яндекс расширяет запрос, добавляя другие формулировки с тем же смыслом. Например, вместе со сложносокращенным «физтех» Яндекс будет искать и официальное «Московский физико-технический институт », а по запросу «установка скайп» — еще и английское «skype». Точно так же Яндекс добавляет в запрос разные написания чисел («Петр I» и «Петр Первый»), близкие по смыслу однокоренные слова, варианты написания и синонимы. Так, если в запросе есть «воронежский», система может добавить к нему однокоренное «воронеж», к [Авто-сервис мицубиши] — «автосервис мицубиси», а к «ветерок» — похожее «бриз». Выбирая, какое слово добавить, а какое нет, Яндекс смотрит, как часто это слово встречается с другими словами запроса — и в вопросах пользователей, и вообще в текстах. Однокоренные слова и синонимы система берет из соответствующих справочников и словарей, часть из которых Яндекс сам составляет специально для таких случаев.
Выделение объектов
Анализируя запрос, поисковая система выделяет в нём различные объекты — географические названия, имена людей, названия организаций и т.д. Например, если поисковая система поймет, что «Сергей Зубов» — это человек, она не будет расширять фамилию «зубов» «зубным» или искать стоматологические клиники. А если в запросе [аптеки на парке культуры] система обнаружит, что «Парк культуры» — это место, она учтет это при ранжировании: в результатах поиска первые строчки займут документы, в которых слова «парк» и «культуры» идут подряд. Для выделения устойчивых фраз и объектов Яндекс тоже составляет различные справочники – например, словарь топонимов (географических названий), словарь имен и фамилий, справочник организаций, словарь устойчивых словосочетаний. Получив запрос, система каждый раз проверяет по справочникам, есть ли в нём устойчивые словосочетания.
Работа над ошибками
Анализируя запрос, поисковая система всегда проверяет его на грамотность. По статистике Яндекса, около 12% запросов содержат ошибки. Это могут быть опечатки, орфографические ошибки или абракадабра, которая получается при неправильной раскладке клавиатуры. Если искать ровно то, что указано в поисковой строке, человек так и не получит нужный ему ответ — ведь на большинстве сайтов слова все-таки написаны грамотно. Поэтому те слова, в которых часто допускают ошибки («агентство», «винегрет») или по которым нет хорошего ответа на вопрос, Яндекс сразу же исправляет и показывает ответ уже на исправленный запрос. Разумеется, предупреждая пользователя, что запрос был исправлен.
В некоторых случаях сложно определить, ошибся пользователь или нет. Например, ресторан «фуджияма» очень похож на вулкан «фудзияма», а фамилия футболиста «Массад» на «Моссад» (а также на «массаж» и крепость «Массада»). В таких случаях, показывая ответ на исходный вопрос, Яндекс спрашивает, не ошибся ли человек и не хочет ли он увидеть ответ на исправленный запрос. Есть ещё один вариант — когда система не уверена, опечатался человек или нет, она покажет на одной странице результатов поиска ответы сразу на два вопроса — на заданный, в котором предположительно есть опечатка, и на исправленный.
На работу с ошибками и весь лингвистический анализ уходят доли секунды. За это время система успевает определить язык запроса, разобрать каждое слово, найти синонимы и устойчивые сочетания и в конечном счете решить, документы с какими словами нужно искать.
* Информация заимствована с yandex.ru.