20131105 романенко

39

Upload: yandex

Post on 08-Jul-2015

487 views

Category:

Education


5 download

DESCRIPTION

Федор Романенко на Я.Студенте в МГУ 5 ноября. Поиск: что там внутри?

TRANSCRIPT

Page 1: 20131105 романенко
Page 2: 20131105 романенко

Федор Романенко Качество поиска Яндекса,

ведущий менеджер-эксперт

Поиск: что там внутри?

Page 3: 20131105 романенко

Как он ищет?

Поиск

Page 4: 20131105 романенко

4

Робот

Вы ищете во всем интернете? Так быстро?

• нет, мы скачиваем странички, обрабатываем и

кладем в индекс

• по индексу ищем быстро: 100мс, 200 млн. / день

• неизбежна задержка: скачивание, обработка,

выкладывание на поиск

• основная проблема задержек: нужна переагрегация

данных

Page 5: 20131105 романенко

5

Структура инвертированного индекса

Было: сортировка по документам и позициям

(word, d, s, w, f)+

Стало: по словам, потом - документам и позициям

(word, (d, s, w, f)+ )+

Классическая структура инвертированного индекса

Ключи:

prefix-compression( (key, offset)+ )

Скип-лист:

(d, offset)+

Инвертированный индекс:

( differential-compression( posting lists ) )+

Page 6: 20131105 романенко

6

Поиск – дерево запроса

(студент && ( мгу || (московский && государственный &&

университет) ) )

Page 7: 20131105 романенко

7

Поиск – ленивые итераторы Дерево ленивых итераторов - идем по номерам документов по

возрастанию:

• узел - curDoc :="мин. номер документа >= curDoc"

• И - curDoc:=Max(curDoc(i))

• ИЛИ - curDoc:=Min(сurDoc(i))

(

[2, 3, 5, 13 ] или

[2, 6, 21 ]

) и

[ 3, 7, 14, 21 ]

=>

[ 3, 21 ]

Результат: документ + набор “хитов”

Page 8: 20131105 романенко

8

Фильтрация

Документ нашелся = допущен в ранжирование

• есть нужные слова запроса в тексте или

ссылках

• стоят на нужном расстоянии / подряд

• кворум для длинных запросов

sum(idf(hits)) >= Q(sum(idf(query words)), query)

Page 9: 20131105 романенко

9

Оптимизации

Для одной машины (индекс 3M документов)

Прюнинг (для широких запросов)

• документы отсортированы по убыванию статранка

• рассматриваем не более 50K отфильтрованных

• ограничиваем время выполнения

ФастРанк (легкая формула)

• считаем легкую формулу на легких факторах

• отправляем в ранжирование Top 1000 лучших

Page 10: 20131105 романенко

10

Ранжирование

• считаем все тяжелые факторы, всего 800

• 10K бинарных деревьев глубины 6

• получаем ранг документа

• выбираем Top10 по рангу

Page 11: 20131105 романенко

11

Метапоиск: слияние, кеширование и

сниппеты

• управляем нагрузкой и репликами

• собираем Top10 с каждой машины

• считаем Top10(Top10(i))

• кешируем

• запрашиваем сниппеты для Top10

Page 12: 20131105 романенко

12

Построение выдачи

• собираем TopN от вертикалей

• считаем классификаторы по – оффлайн данным

– запросу

– ответам

– статистике ответа

• строим выдачу из вертикалей и

колдунщиков

Page 13: 20131105 романенко

13

Надежность и производительность

• достигается распределением нагрузки и репликацией

• сетевые балансеры направляют запросы в 7 ДЦ (по IP)

• в ДЦ запрос попадает на 1 из 200 метапоисков (по IP)

• метапоиск отправляет на 1 из 100 кеширующих

метапоисков (по запросу)

• метапоиски мониторят загрузку и производительность

базовых поисков

• выбирают 2000 базовых из 10 реплик

• перезадают запрос, принимают решение о выдаче

частичного результата

Page 14: 20131105 романенко

Разве еще не всё написали?

Качество поиска

Page 15: 20131105 романенко

15

История

• Яндекс-поиск в интернете - 1997

• рост отдела качества поиска - 2006

• MatrixNet – 2009

• 1000 инженеров - 2013

Page 16: 20131105 романенко

16

Алгоритм поиска?

Нет одного алгоритма, их десять тысяч

• обход и индексация интернета

• производительность

• лингвистика

• разработка факторов и анализ данных

• очистка данных и антиспам

• определение целевой метрики

• алгоритмы машинного обучения

• смешивание выдачи

Page 17: 20131105 романенко

17

Качество

• у почти всех алгоритмов есть "качество", т.е.

выбор из нескольких вариантов – плохих и

получше

• мы непрерывно занимаемся улучшением

качества

• будем им заниматься всегда

• качество измеряется числовыми метриками

• метрика хороша, если показывает наше

плохое качество

Page 18: 20131105 романенко

18

Базовая метрика качества поиска

Для ответа:

• оценки: IR (0%), R- (7%), R+ (14%), U (40%), V (61%)

Для десятки:

• Gain: rel(i) - релевантность одного документа [0..1]

• Cumulative G: sum(1..10, rel(i)) - сложим для десятки

• Discounted CG: rel(1) + sum(2..10, rel(i) / log2(i)) - с

дискаунтом за позицию

• Normalized DCG - DCG / IDCG - нормализуем на

максимум

Для поиска:

• среднее по репрезентативной корзине запросов

Page 19: 20131105 романенко

19

Метрика pFound

Каскадная модель удовлетворенности

пользователя

• с вероятностью R удовлетворяется ответом

• с вероятностью (1-R)*0.15 устает

• с вероятностью (1-R)*0.85 читает дальше

Page 20: 20131105 романенко

20

Обучение с учителем

• асессоры оценивают ответы по инструкции

• инструкция (150 страниц) описывает наше

продуктовое видение

• 1000 асессоров

• 10 млн. ручных оценок за 2 года

• настоящих запросов все равно больше (200 млн/д)

• учим машину на примерах

Page 21: 20131105 романенко

21

Модель ранжирования

• факторы ранжирования (числа), считаются для пары

(запрос, документ)

• на них считаем формулу релевантности, берем top10

• модель: (f1(q, d), f2(q, d), ... , fn(q, d)) -> rank(q, d)

• Специфическая модель: не призвана отражать реальный

мир, просто сложная штука с кучей параметров

Page 22: 20131105 романенко

22

MatrixNet

• MatrixNet: 10K бинарных деревьев глубины 6

• количество параметров огромно: 10K * (64*3) ~ 2 млн.

• сложная и гибкая, но не переобучается ...

-4025627,483990,-36437960,39979596,

-92842056,-50086892,-100233272,243162224,

-22282850,57163664,-24991620,-9889194,

...

vars[5699] = fFactorInt[376] > 1060970280 ? 1 : 0; // 0.738757

vars[5700] = fFactorInt[376] > 1061923687 ? 1 : 0; // 0.795584

vars[5701] = fFactorInt[376] > 1049721454 ? 1 : 0; // 0.284137

vars[5702] = fFactorInt[376] > 948291011 ? 1 : 0; // 6.37877e-05

...

,{376, .0f}

,{376, 0.6251018047f}

,{-1, .0}

,{376, 0.05682743713f}

,{376, 0.4546194971f}

...

Page 23: 20131105 романенко

23

Машинное обучение ранжирования

• сталкиваем Модель Пользователя и Модель

Ранжирования

• подбираем параметры модели ранжирования

• максимизируем метрику жадной оптимизацией

• MLR находит скрытые закономерности в данных и

ожидания пользователей

• метрика = удовлетворение модельного юзера,

работающего с моделью ранжирования

• использует возможность посчитать счастье на огромном

кол-ве отличающихся поисков без экспериментов

Page 24: 20131105 романенко

Никак не влезет на одну машину

Много данных

Page 25: 20131105 романенко

25

Откуда данные?

• каждый ответ поиска (200 млн/день) и клики записываются

• логи всех сервисов

• данные от браузера и счетчиков Метрики

• от партнеров

• любые данные могут быть полезны в качестве

Огромная коллекция – 20 петабайт, нужно уметь с ней

работать!

Page 26: 20131105 романенко

26

Распределенные вычисления

• большинство таблиц не влезает на одну машину

• нужны распределенные вычисления

• вручную можно внедрить 5 алгоритмов за карьеру

• нужна надежность хранения

• проблема эффективной загрузки серверов

• общий кластер -> приоритизация и планирование

500 задач одновременно на 2000 серверах!

Page 27: 20131105 романенко

27

Парадигма MapReduce

• входная таблица с независимыми записями

• Map(record) -> (key, value)+

• сортировка по key

• Reduce(key, (value)+) -> result(key)

• Map - выборка нужных данных, определение ключей

• Reduce - агрегация по ключу

Page 28: 20131105 романенко

28

MapReduce

Page 29: 20131105 романенко

29

Пример WordCount

Найти 100 самых частотных слов в коллекции документов

• На входе: таблица с документами Docs

• Map: считаем слова в документе, =>

(word, tf)

• Reduce1: для word суммируем частоты tf =>

(hash(word) % 1000, (word, count))

• Reduce2: для 0..999 вычисляем Top100 самых частотных =>

("result", (word, count)+)

• Reduce3: сливаем 1000 Top100 пар (word, count) =>

("output", (word, count)+)

Простая реализация (не тестировалась ;)

mapreduce -map "tr -cs '[:alnum:]' '\n'" -reduce "uniq -c“ –src Docs –dst Stat mapreduce –read Stat | sort +0nr | head -n 100

Page 30: 20131105 романенко

30

Реализация MapReduce

Yandex MapReduce:

• тройная репликация или Reed Solomon Code

• сжатие чанков ZIP (сжатие 4.31)

• последовательная почанковая обработка

• умный шедулер

Real-Time MapReduce:

• нужен для свежести и RT-персонализации

• инкрементальное обновление результата при изменении

входных данных

• мгновенная инвалидация и пересчет по цепочке

• RT база данных в основе

Page 31: 20131105 романенко

Что вы имели в виду?

Свежесть и разнообразие

Page 32: 20131105 романенко

32

Свежесть

Страница в интернете, почему же она не находится?

Поиск страницы по узкому запросу:

• найти и проиндексировать

Поиск новостей на свежую тему:

• не так просто, само не найдется!

• свежее составляет 0.1% от базы, но нужно в 20% случаев

• не накопились факторы: ссылки и пользовательское

поведение

Page 33: 20131105 романенко

33

Real-Time робот

• распределенная RT-архитектура

• непрерывное обновление веб-графа

• CrawlRank (aka OPIC) алгоритм - RT PageRank

• адаптивный переобход хабов для поиска нового

• десятки фидов об обновлениях

• RT-индексация и поиск

Выкладываем лучшие документы с задержкой в

секунды

Page 34: 20131105 романенко

34

Новости по широкому запросу

• найти новости по [навальный] ранжированием не

получится

• вероятность << 0.1%

• если были новости, то нужно много свежего

• если нет, то свежее - вряд ли хорошее

• нужен "семантический" триггер

• величина "свежего интента“ - вероятность, что

пользователь с таким запросом хочет свежее – [захват автобуса норвегия] = 90%

– [цискаридзе] = 40%

– [задорнов] = 10%

Page 35: 20131105 романенко

35

Детектор свежести

• классификатор наличия потребности в свежем

• самый большой в поиске, на 150 факторах: – изменение частоты запросов

– появление новостных сюжетов

– увеличение кол-ва релевантных свежих

– клики на свежее

– всплеск слова в Твиттере

– новостные слова (взрыв, заявил, путин)

• 10% - немного свежего (0.2)

• 6% - много свежего (0.4)

• 2% - только свежее (0.9)

Page 36: 20131105 романенко

36

Разнообразие при неоднозначности

• один запрос - одна выдача - много интентов

• удовлетворить разных пользователей одной

страницей => разнообразие

• смешиваем вертикали: веб-поиск, свежесть, видео,

региональная ...

• метрика WidepFound (расширение pFound): – вероятности интентов

– релевантности документов для интентов

Page 37: 20131105 романенко

37

Спектр - универсальное разнообразие

• учимся понимать запросы [объект потребность]:

[битлз mp3 скачать]

• считаем вероятности потребностей по логам

запросов

• смешиваем по запросу [битлз] выдачи для – [битлз слушать онлайн]

– [битлз видео]

– [битлз фото]

– [битлз википедия]

Page 38: 20131105 романенко

Это для начала!

Page 39: 20131105 романенко

Федор Романенко

Ведущий менеджер-эксперт

качества поиска

+7-903-6841530

[email protected]

Спасибо!