Архитектура поиска Яндекса, ответы на вопросы
Вопрос: Если Вам важна скорость, то почему Вы не используете графические ускорители?
Ответ: Не используем, т.к. в поиске надо удовлетворить пользователя и вся функциональность, которую можно выделить в такие хорошие параллельные вычисления – это матрикснет.
Вопрос: У Вас миллионы документов на сервере на нижнем уровне, а основная информация влезает в оперативную память или на жесткий диск?
Ответ: Почти вся информация лежит в оперативной памяти. Это файлы, которые мапятся в памяти и все они закэшированы (при этом число пейдж фолов минимально).
Вопрос: Есть два варианта компрессии, почему оба они в продакшне?
Ответ: Продакшн поиск поддерживает оба алгоритма.
Вопрос: Коэффициенты для матрикснета, как вычисляются?
Ответ: Есть оценки асессоров, которые размечают выдачу. Для этих размеченных документов есть факторы. Потом мы пытаемся приблизить эту функцию градиентным спуском, каждый раз мы выбираем лучший моном, который лучше всего оптимизирует функцию. И таким образом спускаемся по градиенту несколько тысяч раз. Спускаемся на дельту, при этом чем меньше дельта, по которой мы спускаемся по градиенту, тем лучше качество (а каждый спуск это свое дерево). К сожалению, нужно очень много итераций.
Вопрос: Откуда уверенность, что все эти 120 МБ формулы нужны? Не получилось ли так, что большая часть коэффициентов – это мусор?
Ответ: В продакшне есть код, который закомментирован, который этот «мусор» выкидывает. Т.е. на самом деле, можно считать матрикснет рекурсивно, сначала наиболее важные термы, потом остальные. Например, считаем матрикснет для тысячи документов, вначале посчитали самые важные, то, что важное посчитали в первую очередь, а «хвост» можно уже не считать. Полезность матрикснета определяется оценками асессоров. Каждая внедренная формула давала плюс к Pfound (это формальная метрика качества поиска). Если бы не давала, то не было бы тысячи коэффициентов, было бы десять коэффициентов.
Вопрос: Каким образом происходит шардинг поискового индекса?
Ответ: Берется интернет и делится на группы. Нужно учесть две вещи: во первых нужно соблюсти локальность, чтобы данные с одного хоста попали на один шард – так лучше ищется, во вторых нужно лучше размазывать, т.к. иначе получится база с совершенно разными характеристиками. (Где-то хэш, где-то явный хост). И чтобы базы были одинаковые и чтобы качественные.
Вопрос: У Вас на сервере хранятся индексы, там где номер документа и позиция в документе, ведь одно слово может находиться на большом количестве серверов?
Ответ: Одно слово с вероятностью 99% находится на всех тысячах серверов, т.е. на один Ваш запрос обрабатываются и процеживается весь миллиард документов.
Вопрос: Правильно ли утверждение, что Яндекс кэширует только первые две страницы выдачи, а не все то, что нашлось?
Ответ: Те страницы, которые после второй, они не нужны, по ним вообще не кликают.
Вопрос: Есть ли у документа шанс понять, что он настолько нерелевантен, что у него нет шансов попасть даже в первые две страницы?
Ответ: Есть много разных ранжирований, которые документ представляют. В начале, до базового поиска есть робот он упорядочивает все документы по их вероятности встретиться в выдаче пользователю. И та часть, которая совсем мусорная она кладется в отдельное место. И в самом поиске вся воронка придумана для того, чтобы процеживать документы на каждом шагу. В начале нам не нужны документы, в которых нету слов запросов, потом на фаст ранке мы считаем фичи, по которым промежуточно ранжируем.
Вопрос: Что будет, если пользователь запросит 110 страницу поиска?
Ответ: Отправится запрос на базовый поиск с запросом выдачи 110 документа. У базового поиска все эти документы есть. Базовый поиск выдает не ТОП, он выдает сразу все. Т.е. снипеты формируются когда формируется выдача. Т.е. базовому поиску не сложнее искать ТОП, чем искать все.
Вопрос: Сколько реплик у базового поиска?
Ответ: Их больше 1, но меньше 10. Есть русский шард, украинский, зарубежный – они по разному устроены. Но на русский у Яндекса больший коэффициент репликаций.
Вопрос: Если мы формулу ранжирования уменьшаем в 100 раз, то на сколько Pfound упадет?
Ответ: Pfound не линейно зависит от формулы.
Вопрос: Если мы асессоров разделим на две группы, то какая разница в Pfound между ними будет?
Ответ: Дисперсия среди асессоров уже не очень заметна, т.к. у Яндекса есть большие выборки.
Вопрос: На каждый элемент индекса имеется 32 бита на признаки?
Ответ: Словопозиции, это часть информации. На каждый документ мы имеем свою часть информации, например длину документа, когда он был модифицирован, его Page Rank, т.е. у нас много статической информации про документ. Дальше набор слововхождений в документ. Мы ищем «зеленое яблоко», а нашли «зеленое яблоку». В результате у нас у документа признак – это странный многомерный вектор. И задача превратить его в отдельные признаки ранжирования, например BM25. Т.е. есть способ из того, насколько соответствует Ваш запрос тому, что есть в документе необходимо поставить число. И таких способов много.
Вопрос: Документы и индексы лежат на одном шарде? Кэш документов откуда тянется сниппет.
Ответ: На одной машине лежат сниппеты и обратные индексы. Снипеты лежат на диске без кэширования. Запросы к снипетам они редки, т.к. у нас тысячи серверов и в ТОП попадает только часть, т.е. снипеты редки и их мало, поэтому их можно читать с диска.
Вопрос: В какой момент работы Вы начинаете менять выдачу с учетом географического местоположения пользователя?
Ответ: У Вас есть IP адрес и определяется местоположение, потом Яндекс запускает специально натренированный матрикснет, которых много штук, конкретно для Вашего региона. А специально натренированный матрикснет тренируется специальными образом с помощью асессоров, т.е. оценки формируются асессорами и по ним формируются уже формулы.
Оставить комментарий
Комментарии:
Будто до матрикснета было лучше. Из двух зол меньшее. Сейчас более интересен верен ли путь внедрения Google Instant. =)
Столько много информации в одном месте сразу по нескольким интересующие вопросам. Спасибо за точные и лаконичные ответы.