Вся сложная архитектура, дата-центры, поисковое облако – все это нужно Яндексу для того, чтобы поиск мог корректно отранжировать документы по запросу пользователя. В свою очередь ранжирование также не является самоцелью поиска, его задача – предоставить пользователю максимально релевантные документы, т.е. то самое качество поиска. А качество поиска улучшается исключительно для достижения счастья пользователя. Это правда.

Yandex_2

Счастье пользователя для Яндекса не пустой звук. Недавно поиском Яндекса была подготовлена новая версия ранжирования, которая сначала тестировалась на ограниченной группе пользователей. При анализе кликабельности запросов и пользовательских характеристик, мы увидели, что новое ранжирование нравится пользователям больше, чем старое – все параметры, которые нужно было увеличить, увеличивались, а те, которые нужно было уменьшить – уменьшались. За исключением рекламного блока внизу выдачи. То есть, новое ранжирование просаживало клики по рекламе, иначе говоря – просаживало зарабатываемые деньги. Как поступить в подобной ситуации?

Есть три варианта:

• бескомпромиссно выкатить новое ранжирование на всех
• вернуться к старому ранжированию
• включить новое ранжирование на тех запросах, где нет рекламы, а там, где есть реклама, оставить старое ранжирование

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

Качество поиска и как мы его измеряем

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

1. Оценка по асессорской разметке
2. Онлайн-эксперименты

Оценка по асессорской разметке – это довольно простая вещь. Мы берем две конкурентные поисковые системы, задаем в них одинаковые запросы, смотрим на n топовых результатов и эти результаты отдаем на разметку специально обученным людям. Асессоры выставляют оценку релевантности по некоей шкале (допустим, пятибалльной).

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

Важно сказать, что асессоры, когда выставляют оценки, они не видят всей выдачи целиком, не видят какую поисковую систему они оценивают. Им просто показывается запрос и страничка (документ).

Онлайн-эксперименты, или пользовательские эксперименты (эксперименты на людях), фактически, являются А/Б-тестингом. Мы можем взять наших пользователей, разделить их случайным образом на две части, а потом одной части показывать одну версию ранжирования, а дугой части – другую версию, оценивая пользовательское поведение на поисковой выдаче (клики, время проведенное на страницах, частоту переформулировок запроса). Используя эти параметры, мы можем выдвигать гипотезы о том, какая из двух сравниваемых систем больше нравится пользователям.

Ранжирование – это сложно

Для того, чтобы представить себе, что такое ранжирование, хорошо подходит изображение нашей галактики Млечный путь. Потому что количество документов, которые проиндексировал Яндекс, и количество звезд в этой галактике – это числа приблизительно одного порядка. А задача ранжирования – показать десятку самых релевантных результатов. Это практически то же самое, что найти иголку в стоге сена.

Улучшать качество ранжирования можно по нескольким направлениям:

1. Факторы ранжирования
2. Машинное обучение
3. Лингвистические технологии

Факторы (признаки, features)

Фактор ранжирования – это некое число, описывающее либо запрос, либо документ, либо связь между запросом и документом. Самый простой пример фактора – доля слов запроса на найденной страничке. Если нет ни одного слова из запроса на страничке, то значение фактора равно нулю, если все слова из запроса есть, то значение фактора равно единице, если присутствует только половина слов, то значение фактора – 0,5.

Сейчас в веб-поиске около 1500 разных факторов. Откуда столько?

Если, к примеру, по одному вышеупомянутому фактору мы начнем сортировать выдачу, то, безусловно, какую-то десятку мы сможем отобрать, но вряд ли подобный результат понравится пользователю. Для того, чтобы отличать хорошие документы от плохих, поиску нужно учитывать множество самых разных параметров. Все эти параметры можно разделить на классы:

• статические документные
• запросные
• текстовые
• ссылочное
• пользовательские
• персональные
• метафакторы
• …

Классически простое – это текстовые факторы. Здесь мы можем оценивать покрытие документа словами запроса, близость этих слов внутри документа, близость этих слов к началу документа и так далее.

В Яндексе есть специальные инструменты, позволяющие оценить пользу того или иного фактора для ранжирования. Вот результат проверки нового фактора при помощи этого инструмента:

Yandex_4

В данном случае – прокрашивание зеленой полосы свидетельствует о несомненной пользе проверяемого фактора для ранжирования. После такого результата разработчики могут приступать к внедрению этого фактора в формулу ранжирования.

Роль машинного обучения в прокачке качества поиска

Вот у поиска есть все это большое количество факторов, что с ними делать дальше? Сортировать по отдельности нельзя, потому что каждый в отдельности – они представляют собой достаточно слабые характеристики. Логично объединить их в одну общую формулу ранжирования, которая позволит поиску гораздо эффективней сортировать документы. Условно говоря, мы комбинируем все эти 1500 факторов в одно число и потом сортируем по этому числу.

Наверняка все слышали, что один из основных инструментов машинного обучения в Яндексе называется Матрикснет. Это не один алгоритм, а целая совокупность алгоритмов машинного обучения, но все они, так или иначе, используют алгоритм GBRT (Gradient Boosted Regression Trees:

Yandex_5

Это множество решающих деревьев, которые подобраны таким образом, чтобы суммируя значения в листьях этих деревьев, можно было получить хорошее предсказание оценки релевантности, которую поставил асессор. В узлах дерева расположены разделяющие условия, которые представляют собой примерно следующее: «фактор №50 > 0,5? Если да, то мы идем налево, а если нет, то направо».

Яндекс также широко использует нейронные сети, не только в Картинках, но и в поиске тоже. Одним из недавних интересных и больших внедрений было внедрение фактора на основе так называемого алгоритма DSSM. Упрощенно, это представление запроса в виде некоторого вектора чисел с плавающей точкой, и аналогичное представление документа. Мы хотим представить запрос и документ в виде таких векторов, косинусное умножение которых хорошо предсказывает асессорскую оценку. Магия заключается в том, чтобы научиться такие вектора создавать, которые бы при перемножении давали что-то интересное. Вот такой фактор был недавно внедрен и уже дал довольно большое количество профита.

Лингвистика

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

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

• морфология
• синонимы
• связанные расширения

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

Синонимы – это аббревиатуры (Московский Государственный Университет – МГУ), разного рода транслиты (Opel – Опель), орфоварианты (МакдоналЬдс – Макдоналдс, Икея-Икеа).

Связанные расширения – это ассоциативное облако слов и запросов, с каким-то определенным весом связанных с исходным запросом.

Yandex_6

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

Откуда берутся расширения?

• словари
• майнинг из текстов
• майнинг из сессий
• …
• + машинное обучение

Какие задачи сейчас решает команда качества поиска Яндекса

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

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

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

Очень важно соблюдать баланс между производительностью и релевантностью. Это большая и постоянная задача поиска – соблюдение баланса между исследовательской деятельностью и оптимизированием кода, чтобы это все успевало у нас считаться в реал-тайме.

Журналист, новостной редактор, работает на сайте с 2009 года. Специализация: интернет-маркетинг, SEO, поисковые системы, обзоры профильных мероприятий, отраслевые новости рунета.
Языки: румынский, испанский.
Кредо: Арфы нет, возьмите бубен.