Обработка запроса

Яндекс даёт ответы

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

Определение языка

Анализ запроса начинается с определения языка. Например, слово «дружина» в русском языке означает «военная рать», а в украинском – «военная рать» и «жена». Чтобы понять, что имеет в виду пользователь, нужно выяснить, на каком языке он общается с поисковой системой. Для этого Яндекс смотрит, какой алфавит использует человек, какие в запросе есть характерные слова и сочетания букв. Так, по запросу [дружина князя игоря] Яндекс будет искать информацию о войске, а по запросу [дружина князя iгоря] – еще и о жене полководца, княгине Ольге.
Кроме того, при определении языка поисковая система обращает внимание на регион пользователя и язык интерфейса. Например, если человек задает вопрос из Украины и использует интерфейс на украинском языке, это будет дополнительным фактором, чтобы посчитать запрос украиноязычным. Яндекс умеет работать с кириллическими запросами на русском, украинском, белорусском, казахском, татарском и башкирском языках.

Морфология

Определив язык запроса, Яндекс переходит к морфологии и определяет, к какой части речи относятся написанные слова. Это позволяет находить документы, содержащие разные формы одних и тех же слов. Например, по запросу [стали для ножей] Яндекс будет искать документы, в которых есть не только это словосочетание, но и варианты: «сталь для ножа», «ножи сталь» и т.д. Анализируя запрос, Яндекс составляет список возможных словоформ для каждого слова.
По словоформе, которая есть в запросе, не всегда можно точно сказать, какое слово имел в виду человек. Например, в запросе [стали для ножей] слово «стали» – это не только существительное «сталь», но и глагол «стать». И в случае [стали для ножей] нужно искать формы существительного, а в случае [стали выпадать волосы что делать] – формы глагола. Нужно избавиться от неоднозначности, снять омонимию – совпадение слов с разным лексическим значением.
Чтобы выбрать для поиска наиболее вероятный список форм, система проверяет, как часто слова из запроса встречаются вместе, – для этого она обращается к собственной статистике. Например, в морфологическом разборе по запросу [стали для ножей] система выберет для поиска слово «сталь». Во-первых, по статистике слово «сталь» чаще встречается со словом «нож», чем «стать». А во-вторых, существительное в именительном падеже «сталь» часто сочетается с существительным в родительном падеже «ножей».
Для сбора статистики Яндекс использует Национальный корпус русского языка, где собрано огромное количество текстов в электронном виде.

Расширение запроса

После снятия омонимии поисковая система не будет искать слова, которые пользователь точно не имел в виду. Но если ограничить поиск только словами из запроса, в поле зрения поисковой системы не попадут многие нужные документы. Ведь для одного и того же понятия в разных текстах могут использоваться разные слова: например, на одном сайте может быть аббревиатура, а на другом – полное наименование.
Для того чтобы учесть все возможные варианты, Яндекс дополняет запрос, добавляя новые формулировки с тем же смыслом. Например, вместе со сложносокращенным [физтех] Яндекс будет искать и официальное «Московский физико-технический институт», а по запросу [установка скайп] – ещё и skype. Точно так же Яндекс добавляет в запрос разные написания чисел – «Пётр I» и «Пётр Первый», близкие по смыслу однокоренные слова, варианты написания и синонимы. Если в запросе есть «воронежский», система может добавить к нему однокоренное «воронеж», к [авто-сервис мицубиши] – «автосервис мицубиси», а к [ветерок] – похожее «бриз». Выбирая, какое слово добавить, а какое нет, Яндекс смотрит, как часто это слово встречается с другими словами в запросах пользователей и вообще в текстах. Однокоренные слова и синонимы система берет из собственных словарей, которые Яндекс составляет специально для таких случаев.

Выделение объектов

Анализируя запрос, поисковая система выделяет в нём различные объекты — географические названия, имена людей, названия организаций и т.д. Например, если поисковая система поймет, что [Сергей Зубов] – это человек, она не будет дополнять запрос словоформой «зубным» или искать стоматологические клиники. А если в запросе [аптеки на парке культуры] система обнаружит, что «Парк культуры» — это место, она учтёт это при ранжировании: в результатах поиска первые строчки займут документы, в которых слова «парк» и «культуры» идут подряд. Для выделения устойчивых фраз и объектов Яндекс тоже составляет различные словари: географических названий – топонимов, имен и фамилий, названий организаций и другие. Получив запрос, система каждый раз проверяет по словарям, есть ли в нём устойчивые словосочетания.

Работа над ошибками

По статистике Яндекса, около 12% запросов содержат ошибки. Это опечатки, орфографические ошибки или абракадабра, которая получается при неправильной раскладке клавиатуры. Если искать ровно то, что указано в поисковой строке, человек так и не получит нужный ему ответ – на большинстве сайтов слова написаны грамотно. Поэтому поисковая система проверяет запрос на грамотность.
Слова, в которых часто допускают ошибки (например, «агентство» и «винегрет») или по которым нет хорошего ответа, Яндекс сразу исправляет и показывает ответ на исправленный запрос. Разумеется, предупреждая пользователя, что запрос был исправлен.
В некоторых случаях сложно определить, ошибся пользователь или нет. Например, ресторан «фуджияма» очень похож на вулкан «фудзияма», а фамилия футболиста «Массад» на «Моссад», «массаж» и крепость «Массада». В таких случаях, показывая ответ на исходный вопрос, Яндекс спрашивает, не ошибся ли человек и не хочет ли он увидеть ответ на исправленный запрос. Есть ещё один вариант – когда система не уверена, опечатался человек или нет. Тогда она покажет на странице результатов поиска ответы сразу на два вопроса – на заданный, в котором предположительно есть опечатка, и на исправленный.
На работу с ошибками и весь лингвистический анализ уходят доли секунды. За это время система успевает определить язык запроса, разобрать каждое слово, найти синонимы и устойчивые сочетания и в конечном счете решить, документы с какими словами нужно искать.