Яндекс Воложа. История создания компании мечты
Шрифт:
Но еще не пришло время отделения от матки, компании CompTek, которая всего за несколько лет под руководством Аркадия Воложа с насмешливым взглядом, эдакого авторитарного лидера с манерами демократа, стала крупнейшим дистрибьютором Cisco Systems в России и СНГ с объемом поставок сетевого и телекоммуникационного оборудования в десятки миллионов долларов в год. Потому что в России компьютерная техника была наиболее ходовым (или даже практически единственным на тот момент) серьезным коммерческим продуктом на рынке информационных технологий.
При этом Волож понимал, что единственным конкурентным преимуществом и коммерческим результатом проекта Яndex могут стать только востребованные прорывные технологии. На тот момент в поиске.
Теперь бы разобраться, что же такое поиск в Интернете. Разумеется, всего лишь на пользовательском уровне. Потому что людей, понимающих суть этого процесса, на планете немного. И я сам на это не претендую.
Я, например, даже не догадывался до начала работы над книгой о Воложе и «Яндексе» (можно в другой последовательности), что между событием, произошедшим в Сети, и его отображением в поисковой базе всегда есть временной промежуток, всегда есть небольшая дистанция, в которую можно упрятать вечность или ее отсутствие. Потому что «Яндекс» ищет ответы на вопросы пользователей не в Сети, а в ее слепке, в муляже, созданном запущенными в Сеть роботами-пауками. И в этом смысле «Яндекс» (как и все поисковики) является творцом гигантской, почти необозримой виртуальной вселенной.
Конечно, технология за годы существования поисковых систем сильно изменилась, но все же основы были заложены тогда, на заре Интернета. Это было счастливое время, когда зарождалось многое привычное сегодня.
Разумеется, лучше всех о своих поисковых технологиях рассказывает сам «Яндекс» .
Поисковая машина «Яндекса» отвечает на вопросы пользователей, находя нужные документы в Интернете. А размеры современного Интернета исчисляются в экзабайтах, то есть в миллиардах миллиардов байтов. Конечно же, «Яндекс» не обходит весь Интернет каждый раз, когда ему задают вопрос. Поисковая
«Яндекс» ищет по поисковому индексу — базе данных, где для всех слов, которые есть на известных поиску сайтах, указано их местонахождение — адрес страницы и место на ней. Индекс можно сравнить с предметным указателем в книге или адресным справочником. В отличие от обычного предметного указателя, индекс содержит не только термины, а вообще все слова. А в отличие от адресного справочника, у каждого слова-адресата есть не одно, а очень много «мест прописки».
Поиск в Интернете состоит из двух частей. Первая — поисковик обходит Интернет, создавая его слепок на своих серверах. Вторая — пользователь задает запрос и получает ответ с серверов поисковика.
Подготовка данных, по которым ищет поисковая машина, называется индексированием. Специальная компьютерная система — поисковый робот — регулярно обходит Интернет, выкачивает документы и обрабатывает их. Создается своего рода слепок Интернета, который хранится на серверах поисковика и обновляется при каждом новом обходе.
У «Яндекса» два поисковых робота — основной и быстрый (он называется Orange). Основной робот индексирует Интернет в целом, а Orange отвечает за то, чтобы в поиске можно было найти самые свежие документы, которые появились минуты или даже секунды назад. У каждого робота есть список адресов документов, которые нужно проиндексировать.
Когда при обходе робот видит на уже известных сайтах новые ссылки, он добавляет их в свой список, увеличивая количество индексируемых страниц. Впрочем, владелец сайта сам может помочь основному роботу «Яндекса» найти свой ресурс и подсказать, например, как часто обновляются его страницы — через сервис «Яндекс. Вебмастер».
Сначала программа-планировщик выстраивает маршрут — очередность обхода документов. При этом планировщик учитывает важные для поисковой системы характеристики сайтов, такие как, например, цитируемость или частота обновления документов. После создания маршрута планировщик отдает его другой части поискового робота — пауку. Паук регулярно обходит документы по заданному маршруту. Если сайт на месте, то есть работает и доступен, паук выкачивает запланированные в маршруте документы. Он определяет тип скачанного документа (html, pdf, swf и т. п.), кодировку и язык, а затем отправляет данные в хранилище.
Там программа разбирает документ по кирпичику: очищает от html-разметки, оставляя чистый текст, выделяет данные о местоположении каждого слова и добавляет их в индекс. Сам документ в исходном виде также остается в хранилище до следующего обхода. Благодаря этому пользователи могут найти в «Яндексе» и посмотреть документы, даже если сайт временно недоступен. Если сайт закрылся или документ был удален или обновлен, «Яндекс» удалит копию со своих серверов или заменит ее на новую.
Поисковый индекс, данные о типе документов, кодировке, языке и сохраненные копии документов вместе составляют поисковую базу. Она обновляется постоянно, но, чтобы это обновление стало доступно пользователям, ее нужно перенести на базовый поиск. Базовый поиск — сервера, которые отвечают пользователям на запросы. Туда переносится не вся поисковая база, а только ее полезная часть — без спама, дубликатов сайтов (зеркал) и других ненужных документов.
Обновление поисковой базы из хранилища основного робота попадает в поиск «пакетами» — раз в несколько дней. Этот процесс создает дополнительную нагрузку на сервера, поэтому производится ночью, когда к «Яндексу» обращается на порядок меньше пользователей. Сначала новые части базы помещаются рядом с такими же частями из прошлого обхода. Затем они проверяются по целому ряду факторов, чтобы обновление не ухудшило качество поиска. Если проверка прошла успешно, новая часть базы заменяет собой старую.
Робот Orange предназначен для поиска в реальном времени. Его планировщик и паук настроены так, чтобы находить новые документы и выбирать из огромного их количества все, хоть сколько-нибудь интересные. Каждый такой документ Orange сразу обрабатывает и выкладывает на базовый поиск. Срочных документов не очень много по сравнению с общим объемом Интернета, поэтому обновление базы в реальном времени можно делать и при дневных нагрузках на сервера.
Можно сказать, что поиск в Интернете состоит из двух больших частей. Первая — когда «Яндекс» ищет различные документы в Интернете и составляет поисковый индекс. Вторая — когда система ищет ответ на конкретный запрос пользователя в уже подготовленной поисковой базе…
Безусловно, поиск с помощью индекса ускоряет процесс ответа пользователю, как, например, предметный указатель в книге помогает быстрее найти нужное слово. Но размеры самого «предметного указателя» в поиске — огромны. Чтобы обрабатывать такие объемы данных и делать это быстро, «Яндекс» использует тысячи серверов. Сервера объединены в кластеры и даже в кластеры кластеров. Архитектура поиска «Яндекса» устроена так, что к уже существующим серверам можно легко добавлять новые — для новых данных из постоянно растущего Интернета.
Все пользовательские запросы сначала попадают в компьютерную систему «метапоиск». Метапоиск обрабатывает каждый запрос в реальном времени — выясняет все необходимые данные про запрос (из какого региона он был задан, к какому классу относится и т. п.), проводит лингвистическую обработку. Затем метапоиск проверяет, формировались ли в последнее время результаты поиска для этого запроса. Результаты поиска по часто задаваемым запросам некоторое время хранятся в памяти метапоиска, а не формируются каждый раз заново. И если вновь пришедший запрос оказался популярным, метапоиск покажет пользователю заранее сохраненные результаты.
Если же ответа в памяти нет, то метапоиск передает запрос на сервера другой компьютерной системы — «базового поиска». На базовом поиске хранится слепок Интернета, по которому ищет «Яндекс», — поисковая база. Она разбита на части, которые хранятся на разных серверах — искать ответ одновременно по нескольким частям базы данных быстрее, чем по всей базе целиком. Кроме того, у каждого сервера есть несколько копий. Это позволяет распределять нагрузку и не терять данные — если один из серверов не сможет своевременно ответить, информация все равно найдется на дублирующих серверах. Из тысяч серверов базового поиска метапоиск выбирает наименее загруженные — таким образом, чтобы вместе они содержали целую поисковую базу.
Каждый из серверов отдает список документов, в которых есть слова из запроса, обратно в метапоиск. Там они объединяются, ранжируются с помощью технологии «Матрикснет» и попадают на страницу результатов поиска. Благодаря такой организации поиска «Яндекс» может отвечать пользователю за доли секунды…
Чтобы вникнуть в суть вопроса, человеку нужно подумать, а поисковой системе — провести лингвистический анализ запроса. Только потом можно приступать к поиску. Именно при анализе запроса система решает, по каким словам и словоформам нужно искать. Например, по запросу «гостиницы в Иркутске» недостаточно найти документы с таким сочетанием слов. Хорошие ответы могут оказаться в документах со словами «отели в Иркутске», «иркутские гостиницы», «Иркутск гостиница» и т. д. Анализируя вопрос пользователя, система определяет язык запроса, проводит морфологический разбор каждого слова, выбирает нужные для поиска словоформы и отсекает лишние.
На весь анализ запроса — определение языка, разбор слов, поиск синонимов и т. д. — уходят лишь доли секунды.
Анализ запроса начинается с определения языка. Например, слово «дружина» в русском языке означает «военная рать», а в украинском — и «военная рать», и «жена». Чтобы понять, что имеет в виду пользователь, нужно выяснить, на каком языке он общается с поисковой системой. Для этого «Яндекс» смотрит, какой алфавит использует человек, какие в запросе есть характерные сочетания букв и слова. Так, по запросу «дружина князя Игоря» «Яндекс» будет искать информацию о войске, а по запросу «дружина князя Iгоря» — еще и о жене полководца, княгине Ольге.
Кроме того, при определении языка поисковая система обращает внимание на регион пользователя и язык интерфейса. Например, если человек задает вопрос из Украины и использует интерфейс на украинском языке, это будет дополнительным фактором, чтобы посчитать запрос украиноязычным.
Определив язык запроса, «Яндекс» переходит к морфологии. Знание морфологии позволяет находить документы, содержащие разные формы одних и тех же слов. Например, по запросу «стали для ножей» «Яндекс» будет искать документы, в которых есть не только сочетание «стали для ножей», но и «сталь для ножа», «ножи сталь» и т. д. Анализируя запрос, «Яндекс» составляет список возможных словоформ для каждого слова.
По словоформе, которая есть в запросе, не всегда можно точно сказать, какое слово имел в виду человек. Например, в запросе «стали для ножей» «стали» — это не только существительное «сталь», но и глагол «стать». И в одном случае («стали для ножей») нужно искать формы существительного, а в другом («стали выпадать волосы что делать») — формы глагола. В такой ситуации нужно избавиться от неоднозначности, то есть снять омонимию. Омонимия — это совпадение слов (словоформ) с разным лексическим значением.
Чтобы выбрать для поиска наиболее вероятный список форм, система обращается к статистике совместной встречаемости слов и грамматических признаков. Например, в морфологическом разборе по запросу «стали для ножей» система выберет для поиска слово «сталь». Во-первых, потому что по статистике слово «сталь» чаще встречается со словом «нож», чем «стать». А во-вторых, потому что существительное в именительном падеже (в данном случае, «сталь») часто сочетается с существительным в родительном падеже («ножей»).
Для сбора статистики «Яндекс» использует Национальный корпус русского языка и свои собственные корпуса, где собрано огромное количество текстов в электронном виде.
После снятия омонимии поисковая система уже не будет искать слова, которые пользователь точно не имел в виду. В то же время, если ограничить поиск только словами из запроса, в поле зрения поисковой системы не попадут многие нужные документы. Ведь для одного и того же понятия в разных текстах могут использоваться разные слова, например на одном сайте может стоять аббревиатура, а на другом — полное наименование.
Для того чтобы учесть все возможные варианты, «Яндекс» расширяет запрос, добавляя другие формулировки с тем же смыслом. Например, вместе со сложносокращенным «физтех» «Яндекс» будет искать и официальное «Московский физико-технический институт», а по запросу «установка скайп» — еще и английское skype. Точно так же «Яндекс» добавляет в запрос разные написания чисел («Петр I» и «Петр Первый»), близкие по смыслу однокоренные слова, варианты написания и синонимы. Так, если в запросе есть «воронежский», система может добавить к нему однокоренное «Воронеж», к «авто-сервис мицубиши» — «автосервис мицубиси», а к «ветерок» — похожее «бриз». Выбирая, какое слово добавить, а какое нет, «Яндекс» смотрит, как часто это слово встречается с другими словами запроса — и в вопросах пользователей, и вообще в текстах. Однокоренные слова и синонимы система берет из соответствующих справочников и словарей, часть из которых «Яндекс» сам составляет специально для таких случаев.
Анализируя запрос, поисковая система выделяет в нем различные объекты — географические названия, имена людей, названия организаций и т. д. Например, если поисковая система поймет, что «Сергей Зубов» — это человек, она не будет расширять фамилию «зубов» «зубным» или искать стоматологические клиники. А если в запросе «аптеки на Парке культуры» система обнаружит, что «Парк культуры» — это место, она учтет это при ранжировании: в результатах поиска первые строчки займут документы, в которых слова «парк» и «культуры» идут подряд. Для выделения устойчивых фраз и объектов «Яндекс» тоже составляет различные справочники — например, словарь топонимов (географических названий), словарь имен и фамилий, справочник организаций, словарь устойчивых словосочетаний. Получив запрос, система каждый раз проверяет по справочникам, есть ли в нем устойчивые словосочетания.
Анализируя запрос, поисковая система всегда проверяет его на грамотность. По статистике «Яндекса», около 12 % запросов содержат ошибки. Это могут быть опечатки, орфографические ошибки или абракадабра, которая получается при неправильной раскладке клавиатуры. Если искать ровно то, что указано в поисковой строке, человек так и не получит нужный ему ответ — ведь на большинстве сайтов слова все-таки написаны грамотно. Поэтому те слова, в которых часто допускают ошибки («агентство», «винегрет») или по которым нет хорошего ответа на вопрос, «Яндекс» сразу же исправляет и показывает ответ уже на исправленный запрос. Разумеется, предупреждая пользователя, что запрос был исправлен.
В некоторых случаях сложно определить, ошибся пользователь или нет. Например, ресторан «Фуджияма» очень похож на вулкан Фудзияма, а фамилия футболиста Массад на «Моссад» (а также на «массаж» и крепость «Массада»). В таких случаях, показывая ответ на исходный вопрос, «Яндекс» спрашивает, не ошибся ли человек и не хочет ли он увидеть ответ на исправленный запрос. Есть еще один вариант — когда система не уверена, опечатался человек или нет, она покажет на одной странице результатов поиска ответы сразу на два вопроса — на заданный, в котором предположительно есть опечатка, и на исправленный.
На работу с ошибками и весь лингвистический анализ уходят доли секунды. За это время система успевает определить язык запроса, разобрать каждое слово, найти синонимы и устойчивые сочетания и в конечном счете решить, документы с какими словами нужно искать.
Последние три года работы под крышей CompTek-матки стали периодом особенно бурного развития для проекта Яndex, который Волож постепенно начал готовить к отделению от CompTek — вместе с собственным отделением. По воспоминаниям ветеранов «Яндекса», на тот момент «вся команда портала составляла около десяти человек».
К моменту старта проекта Яndex поисковая система умела выполнять проверку уникальности найденных документов (исключение копий в разных кодировках), Яndex учитывал морфологию русского языка (и поиск по точной словоформе), осуществлял поиск с учетом расстояния (в том числе в пределах абзаца — точное словосочетание), а тщательно разработанный алгоритм оценки релевантности (соответствия ответа запросу) учитывал не только количество слов запроса, найденных в тексте, но и его относительную частоту для данного документа, расстояние между словами и положение слова в документе.
Практически одновременно со стартом Яndex в публичном пространстве появился раздел «Сказки» (наблюдения за содержанием русского Интернета). Первая опубликованная 30 сентября 1997 г. сказочная история называлась «Web — гуманизм или чернуха?». Выглядела она довольно пафосно.
Web — гуманизм или чернуха? Сегодня можно точно ответить — гуманизм, со счетом 404 на 134. Перевес (в три раза) — солидный для нашего времени. Запустив наконец свою поисковую машину, мы получили удобную возможность исследовать русский Web «от себя лично», не думая о том, что иностранные поисковые машины не понимают русские кодировки и вообще далеко от России, а также не мучаясь над заданием всех склонений и спряжений.
Любители изящной словесности и ревнители русского языка скажут, что сравнение «чернуха — гуманизм» слишком прямолинейно и недостаточно для столь сильного вывода. Попробуем привести ряд примеров, которые нам представляются убедительными. Простейшая антитеза: «добро — зло». Получается: добро (3710) + добрый (10 098) + доброта (593) = 14 401; зло (3153) + злой (3248) + злость (453) = 6854. Соотношение: 14 401 / 6854 = 2,1.
Аналогичные примеры: счастье (6876) + счастливый (5672) = 12 548; несчастье (1301) + несчастливый (208) + несчастный (3082) = 4591, соотношение: 12 548 / 4591 = 2,73; хорошо (28 174) + хороший (26 295) = 54 469, плохо (12 134) + плохой (6697) = 18 831, соотношение: 54 469 / 18 831 = 2,89.
Более сложный пример: любовь (17 699) + любимый (9101) + любить (19 836) = 46 636 перекрывает не только: ненависть (1313) + ненавистный (306) + ненавидеть (1460) = 2079, но и большой список вроде — секс (2816) + сексуальный (2803) + порно (123) + порнографический (339) + эротика (554) + эротический (1072) + порнуха (96) = 6803. Соотношение: 46 636 / (2079 + 6803) = 5,25.
Набор слов: мерзавец (305) + негодяй (559) + подлец (394) + сволочь (669) = 1927 перекрывается набором — вера (7013) + надежда (10 450) + любовь (17 699) = 35 162. Даже если убрать все имена собственные (наш язык запросов отличает слова с большой и маленькой буквы), то получится Вера (2570) + Надежда (2375) + Любовь (3357) = 8302, остается 35 162 — 8302 = 26 860. А «неверия» всего 141. Соотношение: 26 860 / (1927 + 141) = 11,26.
Приведенные результаты оказались для нас самих приятны и несколько неожиданны. Все, кого заинтересовала эта «занимательная арифметика», могут провести собственное исследование, зайдя на сервери воспользовавшись поисковой системой Яndex-Web. Можно делать и более сложные эксперименты, сравнивать словосочетания (язык запросов Яndex позволяет находить два слова подряд).
Запрос «хороший / 1 человек» («хороший» стоит сразу до или сразу после слова «человек», и все это во всех склонениях) находит 308 документов. Запрос «(плохой, нехороший) / 1 человек» («плохой» или «нехороший» сразу до или после «человек») — 85. Даже вместе со словом «редиска» (46 документов) проигрывает более чем в два раза.
Мудрено (я бы даже сказал — заумно), а главное — натянуто, выспренно. Похоже, инициаторы «Яндекса» хотели успокоить себя и потенциальных пользователей Интернета — на тот момент, конечно, изысканную, образованную и чаще моральную публику, которая, соответственно, мучилась нравственными вопросами (в отличие от подавляющего большинства пользователей нынешней Сети).
К концу ноября 1997 г. уже был реализован принцип естественно-языкового запроса. То есть кможно было обращаться просто «по-русски», например: «где купить компьютер», «генетически модифицированные продукты» или «коды международной телефонной связи». Яndex на тот момент умел выполнять проверку уникальности найденных документов, исключая из результатов поиска сохраненные в различных кодировках веб-страницы с одинаковым содержимым, осуществлять оценку расстояния между искомыми словами в обнаруженных документах и определять «точность» поиска.
Разговаривайте с «Яндексом» человеческим языком! Этот призыв из 1997 г. актуален и по сей день. В конце 1997 г. средняя длина запроса равнялась всего 1,2 слова (примерно в два с небольшим раза короче нынешнего запроса).
И, конечно, базовым и уникальным свойством поискового ядра «Яндекса» был изначальный учет морфологии русского языка (в том числе и поиск по точной словоформе).
В декабре 1997 г. стало известно о том, что ссылка на Яndex появится в русской версии Internet Explorer 4.0. Это было настоящим событием и новой победой.
На тот момент поисковая машинаобрабатывала до 300 запросов в день. Проект модерировали пять человек.
Для сравнения, чтобы понять уровень отметки старта проекта: через пять лет, в 2002 г., число ежедневных запросов вырастет до 2 млн, а еще через десять лет «Яндекс» будет обрабатывать ежедневно около 150 млн запросов.
По мнению Воложа, примерно через полгода стало ясно, что поисковая машина«оказалась не демонстрационной технологией, а реально востребованным сервисом, люди пользовались “Яндексом” именно для поиска в Интернете».
И понятно, что «Яндекс» изначально пошел по правильному пути, заложив в основу поиска закономерности русского языка, в отличие от других поисковиков, основанных на закономерностях английского языка, в котором слова практически не склоняются.
Первую версию дизайна «Яндекса» и, собственно, главной страницы(23 сентября 1997 г.) делал дизайнер Артемий Лебедев. Впрочем, как и все последующие. Вот как он сам будет вспоминать спустя десятилетие с начала многолетнего сотрудничества с «Яндексом».
«Пришли ребята, которые торговали какими-то железками, и у них была поисковая технология. Мы, значит, как-то встречались, рисовали какие-то дизайны. Ели булочки на кухне. Все это было очень весело и хорошо. Никто не знал, что будет. И я про себя тоже не знал, что будет. У меня не было мысли о том, что у меня будет студия, в которой у меня работает 300 человек. Не к этому шел и не об этом мечтал. Это само собой получилось. Я не думал, что у нас будут магазины, что мы откроем кафе и что мы будем еще сами производить электронику. “Яндекс” был просто в каком-то НИИ. Там сидели приятные люди и каждый день смотрели на “Рамблер”, на то, какой он крутой, и на свою строчку поиска: ну, типа, мы никогда их не догоним. И два или три года “Яндекс” догонял “Рамблер”, и никому не могло прийти в голову, что все будет так. У первой версии главной страницы “Яндекса” была левая колонка, которая называлась “Горячие новости”, и горячие новости были проиллюстрированы бычком. Тогда мне казалось, что это уместный юмор интернетовский, и в “Яндексе”, как сейчас было бы, не встали 300 маркетологов, не стукнули тремя сотнями кулаков по столам и не сказали: “Вы что? Кто этот человек и почему он портит наш светлый имидж?!” Когда я вывесил через десять лет эту страницу, они обиделись и написали мне, чтобы я убрал бычок, потому что этого никогда не было. А он был».