Владислав Дорофеев - Яндекс Воложа. История создания компании мечты
Чтобы выбрать для поиска наиболее вероятный список форм, система обращается к статистике совместной встречаемости слов и грамматических признаков. Например, в морфологическом разборе по запросу «стали для ножей» система выберет для поиска слово «сталь». Во-первых, потому что по статистике слово «сталь» чаще встречается со словом «нож», чем «стать». А во-вторых, потому что существительное в именительном падеже (в данном случае, «сталь») часто сочетается с существительным в родительном падеже («ножей»).
Для сбора статистики «Яндекс» использует Национальный корпус русского языка и свои собственные корпуса, где собрано огромное количество текстов в электронном виде.
После снятия омонимии поисковая система уже не будет искать слова, которые пользователь точно не имел в виду. В то же время, если ограничить поиск только словами из запроса, в поле зрения поисковой системы не попадут многие нужные документы. Ведь для одного и того же понятия в разных текстах могут использоваться разные слова, например на одном сайте может стоять аббревиатура, а на другом — полное наименование.
Для того чтобы учесть все возможные варианты, «Яндекс» расширяет запрос, добавляя другие формулировки с тем же смыслом. Например, вместе со сложносокращенным «физтех» «Яндекс» будет искать и официальное «Московский физико-технический институт», а по запросу «установка скайп» — еще и английское 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.