Читать «Яндекс Воложа. История создания компании мечты» онлайн - страница 49

Владислав Юрьевич Дорофеев

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

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

«Яндекс» ищет по поисковому индексу — базе данных, где для всех слов, которые есть на известных поиску сайтах, указано их местонахождение — адрес страницы и место на ней. Индекс можно сравнить с предметным указателем в книге или адресным справочником. В отличие от обычного предметного указателя, индекс содержит не только термины, а вообще все слова. А в отличие от адресного справочника, у каждого слова-адресата есть не одно, а очень много «мест прописки».

Поиск в Интернете состоит из двух частей. Первая — поисковик обходит Интернет, создавая его слепок на своих серверах. Вторая — пользователь задает запрос и получает ответ с серверов поисковика.

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

У «Яндекса» два поисковых робота — основной и быстрый (он называется Orange). Основной робот индексирует Интернет в целом, а Orange отвечает за то, чтобы в поиске можно было найти самые свежие документы, которые появились минуты или даже секунды назад. У каждого робота есть список адресов документов, которые нужно проиндексировать.

Когда при обходе робот видит на уже известных сайтах новые ссылки, он добавляет их в свой список, увеличивая количество индексируемых страниц. Впрочем, владелец сайта сам может помочь основному роботу «Яндекса» найти свой ресурс и подсказать, например, как часто обновляются его страницы — через сервис «Яндекс. Вебмастер».

Сначала программа-планировщик выстраивает маршрут — очередность обхода документов. При этом планировщик учитывает важные для поисковой системы характеристики сайтов, такие как, например, цитируемость или частота обновления документов. После создания маршрута планировщик отдает его другой части поискового робота — пауку. Паук регулярно обходит документы по заданному маршруту. Если сайт на месте, то есть работает и доступен, паук выкачивает запланированные в маршруте документы. Он определяет тип скачанного документа (html, pdf, swf и т. п.), кодировку и язык, а затем отправляет данные в хранилище.

Там программа разбирает документ по кирпичику: очищает от html-разметки, оставляя чистый текст, выделяет данные о местоположении каждого слова и добавляет их в индекс. Сам документ в исходном виде также остается в хранилище до следующего обхода. Благодаря этому пользователи могут найти в «Яндексе» и посмотреть документы, даже если сайт временно недоступен. Если сайт закрылся или документ был удален или обновлен, «Яндекс» удалит копию со своих серверов или заменит ее на новую.

Поисковый индекс, данные о типе документов, кодировке, языке и сохраненные копии документов вместе составляют поисковую базу. Она обновляется постоянно, но, чтобы это обновление стало доступно пользователям, ее нужно перенести на базовый поиск. Базовый поиск — сервера, которые отвечают пользователям на запросы. Туда переносится не вся поисковая база, а только ее полезная часть — без спама, дубликатов сайтов (зеркал) и других ненужных документов.

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

Робот Orange предназначен для поиска в реальном времени. Его планировщик и паук настроены так, чтобы находить новые документы и выбирать из огромного их количества все, хоть сколько-нибудь интересные. Каждый такой документ Orange сразу обрабатывает и выкладывает на базовый поиск. Срочных документов не очень много по сравнению с общим объемом Интернета, поэтому обновление базы в реальном времени можно делать и при дневных нагрузках на сервера.

Можно сказать, что поиск в Интернете состоит из двух больших частей. Первая — когда «Яндекс» ищет различные документы в Интернете и составляет поисковый индекс. Вторая — когда система ищет ответ на конкретный запрос пользователя в уже подготовленной поисковой базе…

Безусловно, поиск с помощью индекса ускоряет процесс ответа пользователю, как, например, предметный указатель в книге помогает быстрее найти нужное слово. Но размеры самого «предметного указателя» в поиске — огромны. Чтобы обрабатывать такие объемы данных и делать это быстро, «Яндекс» использует тысячи серверов. Сервера объединены в кластеры и даже в кластеры кластеров. Архитектура поиска «Яндекса» устроена так, что к уже существующим серверам можно легко добавлять новые — для новых данных из постоянно растущего Интернета.

Все пользовательские запросы сначала попадают в компьютерную систему «метапоиск». Метапоиск обрабатывает каждый запрос в реальном времени — выясняет все необходимые данные про запрос (из какого региона он был задан, к какому классу относится и т. п.), проводит лингвистическую обработку. Затем метапоиск проверяет, формировались ли в последнее время результаты поиска для этого запроса. Результаты поиска по часто задаваемым запросам некоторое время хранятся в памяти метапоиска, а не формируются каждый раз заново. И если вновь пришедший запрос оказался популярным, метапоиск покажет пользователю заранее сохраненные результаты.

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

Каждый из серверов отдает список документов, в которых есть слова из запроса, обратно в метапоиск. Там они объединяются, ранжируются с помощью технологии «Матрикснет» и попадают на страницу результатов поиска. Благодаря такой организации поиска «Яндекс» может отвечать пользователю за доли секунды…

Чтобы вникнуть в суть вопроса, человеку нужно подумать, а поисковой системе — провести лингвистический анализ запроса. Только потом можно приступать к поиску. Именно при анализе запроса система решает, по каким словам и словоформам нужно искать. Например, по запросу «гостиницы в Иркутске» недостаточно найти документы с таким сочетанием слов. Хорошие ответы могут оказаться в документах со словами «отели в Иркутске», «иркутские гостиницы», «Иркутск гостиница» и т. д. Анализируя вопрос пользователя, система определяет язык запроса, проводит морфологический разбор каждого слова, выбирает нужные для поиска словоформы и отсекает лишние.

На весь анализ запроса — определение языка, разбор слов, поиск синонимов и т. д. — уходят лишь доли секунды.

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

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

Определив язык запроса, «Яндекс» переходит к морфологии. Знание морфологии позволяет находить документы, содержащие разные формы одних и тех же слов. Например, по запросу «стали для ножей» «Яндекс» будет искать документы, в которых есть не только сочетание «стали для ножей», но и «сталь для ножа», «ножи сталь» и т. д. Анализируя запрос, «Яндекс» составляет список возможных словоформ для каждого слова.

По словоформе, которая есть в запросе, не всегда можно точно сказать, какое слово имел в виду человек. Например, в запросе «стали для ножей» «стали» — это не только существительное «сталь», но и глагол «стать». И в одном случае («стали для ножей») нужно искать формы существительного, а в другом («стали выпадать волосы что делать») — формы глагола. В такой ситуации нужно избавиться от неоднозначности, то есть снять омонимию. Омонимия — это совпадение слов (словоформ) с разным лексическим значением.

Чтобы выбрать для поиска наиболее вероятный список форм, система обращается к статистике совместной встречаемости слов и грамматических признаков. Например, в морфологическом разборе по запросу «стали для ножей» система выберет для поиска слово «сталь». Во-первых, потому что по статистике слово «сталь» чаще встречается со словом «нож», чем «стать». А во-вторых, потому что существительное в именительном падеже (в данном случае, «сталь») часто сочетается с существительным в родительном падеже («ножей»).

Для сбора статистики «Яндекс» использует Национальный корпус русского языка и свои собственные корпуса, где собрано огромное количество текстов в электронном виде.

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

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

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

Анализируя запрос, поисковая система всегда проверяет его на грамотность. По статистике «Яндекса», около 12 % запросов содержат ошибки. Это могут быть опечатки, орфографические ошибки или абракадабра, которая получается при неправильной раскладке клавиатуры. Если искать ровно то, что указано в поисковой строке, человек так и не получит нужный ему ответ — ведь на большинстве сайтов слова все-таки написаны грамотно. Поэтому те слова, в которых часто допускают ошибки («агентство», «винегрет») или по которым нет хорошего ответа на вопрос, «Яндекс» сразу же исправляет и показывает ответ уже на исправленный запрос. Разумеется, предупреждая пользователя, что запрос был исправлен.

В некоторых случаях сложно определить, ошибся пользователь или нет. Например, ресторан «Фуджияма» очень похож на вулкан Фудзияма, а фамилия футболиста Массад на «Моссад» (а также на «массаж» и крепость «Массада»). В таких случаях, показывая ответ на исходный вопрос, «Яндекс» спрашивает, не ошибся ли человек и не хочет ли он увидеть ответ на исправленный запрос. Есть еще один вариант — когда система не уверена, опечатался человек или нет, она покажет на одной странице результатов поиска ответы сразу на два вопроса — на заданный, в котором предположительно есть опечатка, и на исправленный.

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