SlideShare a Scribd company logo
1 of 56
Download to read offline
Современные методы улучшения
       качества поиска

            Яндекс
        Den Raskovalov
  denplusplus@yandex-team.ru
         Санкт-Петербург
           25.02.2011
Краткая история IR

1950: Боязнь научного отставания от СССР подстегивает
работы по построению мехнизированных систем поиска,
изобретению индекса цитирования

1975: Salton публикует свои основные работы (TF*IDF)

1992: Первый TREC

~2000: Индустриализация IR с широким
распространением web'а и появлением поисковых машин

2003: РОМИП
Состояние IR
●   Не наука
●   Близко не подошла к пониманию смысла
    текста
●   Роль эвристики велика, как нигде
●   Накоплено и развито некоторые техники:
    ●   Морфология
    ●   Машинное обучение
    ●   Обработка огромных объемов косвенных данных
        (логи запросов -> синонимы)
Как происходит поиск?
●   Запрос токенизируется, к словам запроса
    применяется морфологический анализ,
    ищутся синонимы
●   Из документов индекса отбираются те,
    которые с большой вероятностью имеют
    отношение к запросу (фильтрация)
●   Для отфильтрованных документов
    рассчитываются признаки (фичи, features)
●   К признакам применяется формула, дающая
    конечную оценку релевантности
Инвертированный индекс
●   Позволяет для данного ключа (слова) найти
    (проитерироваться) по его вхождениям
    (позициям) в документы коллекции
●   Есть возможность дополнительно хранить
    информацию про вхождение (сегмент,
    позицию)

●   Получается, что все, что мы знаем про
    документ, когда считаем релевантность – это
    позиции слов запроса (мало?)
Инвертированный индекс,
          структура и реализация
●   Минимальная реализация
●   Два файла:
    ●   Key – отсортированный список слов, с
        указанием, где они хранятся в inv-файле
    ●   Inv – плоский файл с информацией о позициях
        –   Позиции для одного ключа идут подряд
        –   Позиции отсортированы по (id документа, позиции в
            документе)
    Читать удобно с помощью memory map
Инвертированный индекс, его
             построение
●   Проблема: индексатор получает документ за
    документом
●   Накапливать инвертированный индекс в
    памяти map< string, vector<TPosition> >
●   Когда памяти перестает хватать, записать
    порцию инвертированного индекса на диск
●   Когда документы кончатся, слить порции
    инвертированного индекса с диска в один
    индекс по всем документам
Инвертированный индекс:
                 слияние
●   Идея для слияния используется та же, что и
    для внешней сортировки
    ●   Завести heap, хранящий итераторы на порции
    ●   Записывать каждый раз в выходной файл
        минимальную позицию, пока все не закончатся


        Можно разработать весьма эффективные
        алгоритмы сжатия инвертированного индекса
        (дельта-кодирование, префиксное сжатие)
Фильтрация
●   Запрос состоит из нескольких слов, какие документы считать
    найденными?
●   Зачем нужна? На самом деле, для оптимизации. Цель – не
    потерять релевантные документы.
●   Те, которые содержат слова запроса. Содержат где?
●   Есть текст, есть ссылки на документ (ссылки можно трактовать, как
    хорошие описания)
●   [мой дядя самых чистых правил, когда не в шутку занемог]
●   [скачать учебник философия вуз платон и демокрит pdf djvu torrent]
●   AND?
●   OR?
●   Все или почти все слова запроса.
Фильтрация: кворум
Q – запрос
qi – i-ое слово запроса
w(qi) – функция веса слова
D - документ




                ∑ w(qi )> Quorum (Q)⋅∑ w(qi )
                qi ∈ D                        q i ∈Q


                         Quorum (Q)=1−0.01(1/ √( Q −1))
                                                       ∣ ∣



              w(q i )=−log ( DocFreq (qi )/ SumOfFreq)
Фильтрация: идеи
●   Слова в заголовках важнее, чем в остальном тексте
●   Существительные важнее, чем прилагательные
●   Очень редкие слова только мешают (опечатки)
●   Стоп-слова (предлоги, союзы) должны иметь нулевой вес
●   Иногда очень частые слова очень важны, их нельзя отбрасывать
    (география) [нотариус москва]


●   Решение – выбрать метрику, составить обучающую выборку,
    произвести машинное обучение
Вопросы?
Ранжирование
●   Для того, что работать над качеством
    ранжирования, надо уметь его измерять
    (трюизм, да).
●   В основе оценки качества работы любого
    алгоритма лежит сравнение результатов его
    работы с результатом работы человека.
Ранжирование: тексты
●   До появления интернета, был только текст
    документа
    ●   ТF-IDF (Salton)
    ●   BM25 (Robertson)
        –
        –
        –   Пенальти длинным документам
        –   Пенальти большому числу вхождений слова
    ●   Морфология
    ●   Тезаурусы (синонимы)
    ●   BM25F - Зоны
Ранжирование: ссылки
●   С появлением WWW и HTML появляются
    ссылки. Зачастую они хорошо описывают
    документ. Сам факт их наличия много
    говорит о документе:
    ●   LF-IDF
    ●   LinkBM25
Ранжирование: PageRank
●   Рассмотрим граф. Вершины – страницы
    интернета, ребро – ссылка.
●   Рассмотрим модель “блуждающей
    обезьянки”.
●   PageRank страницы – мера времени,
    которая обезьянка проводит на странице.
●   Не зависящая от запроса мера важности
    страницы в интернете.
Ранжирование: клики
●   Можно собирать реацкию пользователя. По
    нерелевантному не кликают. На
    нерелевантном не проводят время.
Ранжирование
●   Одна из основных проблем ранжирования:
    как научиться сочетать столь разнородные
    сигналы?
●   Для того, что работать над качеством
    ранжирования, надо уметь его измерять
    (трюизм, да).
●   В основе оценки качества работы любого
    алгоритма лежит сравнение результатов его
    работы с результатом работы человека.
Метрики: бинарный
 классификатор
Метрики: ранжирование
●   Point-wise
    ●   Например, невязка (сумма квадратов отклонение
        оценок от предасказанной релевантности)
●   Pair-wise
    ●   Например, число неправильно отранжированных пар
●   List-wise
    ●   Сумма по всем запросам
        –   Релевантности первого документа (P1)
        –   Релевантности первых десяти документов (P10)
        –   NDCG (сумма релевантностей, нормированный на позицию
            документа)
Метрики ранжирования: pFound
●   В основе метрики лежит модель поведения пользователя:
    ●   Пользователь просматривает выдачу сверху-вниз результат за
        результатом
    ●   После просмотра каждого результата пользователь может
        остановить поиск:
        –   Текущий результат решил его поисковую задачу
        –   Он отчаялся
    ●   pFound – это вероятность того, что пользователь нашел
    ●   pView[i] = pView[i-1]*(1 – pSuccess[i – 1]))*0.85
    ●   pFound = sum pView[i]*pSuccess[i]
●   Приятное свойство: один раз собрав оценки результатов
    поиска, можно оценивать результаты работы разных
    алгоритмов.
Проблема недооцеенности
●   Оценки быстро устаревают
●   Релевантные документы исчезают
●   Все классические метрики при этом
    стремятся к нулю по абсолютному значению
    и не сохраняют порядок ранжирования
    систем
Анализ поведения пользователей

● “Счастье”
● Кликовые метрики

● Средняя позиция первого (по времени!) клика


●   Доля некликнутых страниц
●   Доля длинных кликов
●   Общая кликабельность выдачи
●   A/B тестирование
Sec. 8.6.3




           A/B тестирование
●
    Проверка «единственного» небольшого изменения
●
    Условия: наличие популярной поисковой системы
●
    Большинство пользователей все еще используют старую
    систему
●
    Малый процент (1-2-4-10%) выполняем в новой системе
●
    Одновременное выполнение
●
    Анализ затронутых запросов
●
    «Общие» запросы для стандартной и экспериментальной
    систем
●
    Менее точно, низкая разрешающая способность, но
    надежно и не требует оценок




                                                          24
A/B тест: пример эксперимента
Алгоритмы машинного обучения
●   Метод ближайшего соседа
●   SVM (попытка линейно разделить
    релевантное и нерелевантное)
●   Жадный перебор полиномиальной формулы

●   Очень хочется пользоваться градиентным
    спуском. Но как?
Алгоритмы машинного обучения
●   Проблема в том, что pFound недифференцируем.
    На помощь приходит модель Люка-Плакетта.
●   После этого можно применять градиентный
    спуск.
●   Полезный прием: bagging.
●   Бустим много раз: используем жадность.
●   В качестве базовых примитивов используем
    “кубики” малой размерности.
●   Не забудем про регуляризацию.
Алгоритмы машинного обучения
●   В результате получаем MatrixNet.
●   Ближайший аналог: TreeNet от господина
    Фридмана.
●   В реальном мире нужно распараллелить на
    множество машин.
Машинное обучение
●   С помощью машинного обучения в Яндексе
    решается множество задач:
    ●   Решение, что обходить
    ●   Решение, что выкладывать
    ●   Сниппеты
    ●   Задачи производительности
    ●   Детекция спама
    ●   Решение о показе рекламы
Что еще?
●   Множество источников (новости, блоги, товары)
●   Актуальность
●   Свежесть
●   Непорнушность
●   Дубликаты
●   Разнообразие интентов
●   Спам
●   Подавление спама
Спасибо.

Вопросы?
Современные методы увеличения
  производительности поиска

    Организация разработки
       в поиске Яндекса


            Яндекс
        Den Raskovalov
  denplusplus@yandex-team.ru
           25.02.2011
       Санкт-Петербург
Базовый поиск
●   Базовый поиск – это программа, которая по поисковому индексу
    умеет находить самые релевантные документы, строить
    сниппеты, возвращать дополнительную документную
    информацию.
●   Индекс обычно содержит миллионы документов.
●   Реализован, как HTTP-сервер (для отладки подходит браузер).
●   В базовом поиске тратятся 95% всех ресурсов при обслуживании
    запроса.
●   Стоимость кластера - десятки миллионов долларов. 1%
    производительности - сотни тысяч долларов.
Базовый поиск
●   Все данные, нужные для поиска, хранятся в оперативной
    памяти.
●   Форматы, используемые в индексе, рассчитаны на
    прямую совместимость с системой индексации.
●   В разработке программы принимали/принимают участие
    ~500 программистов.
●   Чтобы часто тестировать качество/скорость, нужно, чтобы
    это не требовало человеческих ресурсов.
●   Профайлер – ваш лучший друг (vtune, valgrind, callgrind,
    kcachegrind).
●   Некоторые оптимизации не меняют результаты поиска,
    некоторые – их немного ухудшают.
Базовый поиск: тестирование
    производительности
Оптимизации
●   Сжатие инвертированного индекса
●   Фильтрация
●   Синтаксический колдунщик
●   Pruning
●   Fastrank
●   Параллельное выполнение запроса
●   Частичное выполнение MatrixNet'а
●   Отсечение по времени выполнения запроса
●   Использование SSEk инструкций процессора
●   Кодогенерация
Сжатие инвертированного
               индекса
●   Алгоритмы компрессии списка позиций
    хорошо работают для групп близких чисел.
●   Хорошо бы, чтобы документы, содержащие
    слово, шли подряд.
●   Решение? Отсортировать по url ;)
Фильтрация
●   Пример оптимизации: часто документ не
    модет пройти фильтрацию, если в нем нет
    некоторых тяжелых слов:
           ∑ w(qi )> Quorum(Q)⋅∑ w(qi )
          q i ∈D                    q i ∈Q


             Quorum(Q )=1−0.01(1/ √( Q −1))
                                       ∣ ∣


● Фактически внутри запроса появляются
слова, которые связаны AND.
● Когда мы итерируемся, если мы можем

быстро узнать, какой документ следует за
текущим, можно сразу идти на max(next_i)
Синтаксический колдунщик
●   [скачать учебник философия для вузов платон
    и демокрит pdf djvu torrent]
●   Можно написать алгоритм, который
    проанализирует синтаксическую
    согласованность групп слов внутри запроса
●   [“скачать учебник” “философия для вузов”
    “платон и демокрит” “pdf” “djvu” “torrent”]
●   Это уменьшит число найденных документов
●   Сейчас эта оптимизация не используется, как
    сильно ухудшающая качество поиска
Pruning
●   Pruning – раннее отсечение запроса
●   Если мы нашли 40000 документов, то мы обрываем поиск.
●   Хорошо бы, чтобы хорошие документы были в самом начале.
●   Пусть качество == вероятность показа
●   Как же быть с эффективностью сжатия индекса?
●   Разобьем на 16 групп по качеству, внутри каждой отсортируем по
    URL'у.
●   Требует итеративной архитектуры базового поиска. Один за другим
    перебираем документы, один за другим подвергаем их фильтрации,
    можем посчитать релевантность для одного документа. Может
    прервать поиск после любого документа.
Fastrank
●   Фичей очень много
●   MatrixNet содержит множество деревьев.
●   Что же делать?
●   Нам нужно вернусть обычно лишь 10 лучших
    результатов.
●   Давайте выделим “легкие” фичи, подберем
    “легкую” функцию ранжирования.
Fastrank
if (CurrentDocument.FastRank >
FastRankHeap.Min() || FastRankHeap.Size() <
300) {
 if (FastRankHeap.Size() >= 300)
    FastRankHeap.Pop();
    FastRankHeap.Push(CurrentDocument.FastRank
    );
 PositionCache.Memorize(CurrentDocument);
}
EarlyRank
●   Та же идея, только будем оперировать
    только наличием/отсутствием слов в
    тексте/ссылках.
●   Будем экономить на чтении и распаковке
    позиций в инвертированном индексе.
Параллельное выполнение
                 запроса
●   В типовом современном серверном процессоре 24 ядра.
●   Исполнение одного запроса в несколько тредов не увеличиваем
    емкость (количество запросов, которые можно выполнить за секунду).
    И даже уменьшает (расходы на слияние).
●   Зато позволяет увеличить латентность (среднее время выполнения
    запроса).
●   Можно распараллелить, разбив документы на несколько виртуальных
    интервалов.
●   Можно распараллелить лишь некоторые стадии (после fastrank'а).
●   Легкие запросы нет смысла распараллеливать (можно оценить
    “легкость” прямо во время выполнения запроса).
Частичое выполнение MatrixNet'а
●   Результирующая ”формула” MatrixNet'а состоит из
    тысяч деревьев, каждое из которых дает небольшой
    вклад в итоговую релевантность. Нет малого числа
    “очень важных” деревьев.
●   Это позволяет применить привычный прием.
●   Если базовому поиску нужно вернуть 10 лучших
    документов, давайте для 300 документов после
    FastRank посчитаем 1/10 деревьев MatrixNet. И лишь
    для 30 лучших по “легкому MatrixNet” посчитаем
    “полный” MatrixNet.
SSE и кодогенерация
●   SSE позволяет выполнить одну и ту же
    операцию (например, сложение, умножение)
    с векторами из 4/8/16 чисел.
                      ●  Именно это и нужно.
                      Можно реорганизовать код
                      так,   чтобы     вычислять
                      формулы      релевантности
                      для     “пачек”   из   4/8
                      документов.
Кодогенерация
●   Многие данные (формулы) удобнее
    превратить в код на этапе компиляции.
●   Он должен помещаться в кэш комманд
    процессора.
●   Удобно использовать шаблоны C++, для
    явных указаний, какой вариант чаще всего
    будет использоваться в production (условные
    дампы).
Отсечение по времени
                выполнения запроса
●   Хорошо бы, чтобы базовый поиск отвечал всегда за 200ms. Такое
    ограничение может проистекать из требования, чтобы пользователь
    всегда получал ответ за 1s.
●   Просто ограничить время выполнения запроса на одной машине
    нельзя? Почему?
●   Давайте в процессе исполнения запроса накапливать счетчики:
    ●   Число скипов
    ●   Число обработанных позиций
    ●   Число найденных документов
    ●   ...
●   Построим регрессионную формулу, предсказывающую время
    выполнения запроса по внутренним статистикам.
●   Если формула предсказывает, что мы работаем уже больше 200ms,
    прервем поиск.
Вопросы?

More Related Content

What's hot

Back to the future: Функциональное программирование вчера и сегодня
Back to the future: Функциональное программирование вчера и сегодняBack to the future: Функциональное программирование вчера и сегодня
Back to the future: Функциональное программирование вчера и сегодняAlexander Granin
 
Реляционные базы данных
Реляционные базы данныхРеляционные базы данных
Реляционные базы данныхLevon Avakyan
 
Программирование как способ выражения мыслей.
Программирование как способ выражения мыслей. Программирование как способ выражения мыслей.
Программирование как способ выражения мыслей. Levon Avakyan
 
неприятная правда про язык go
неприятная правда про язык goнеприятная правда про язык go
неприятная правда про язык goDaniel Podolsky
 
Golang в действии: Как нам удается писать highload приложение на (не?)подходя...
Golang в действии: Как нам удается писать highload приложение на (не?)подходя...Golang в действии: Как нам удается писать highload приложение на (не?)подходя...
Golang в действии: Как нам удается писать highload приложение на (не?)подходя...Daniel Podolsky
 
My talk at YouCon Saratov 2016
My talk at YouCon Saratov 2016My talk at YouCon Saratov 2016
My talk at YouCon Saratov 2016Alex Chistyakov
 
Дизайн больших приложений в ФП
Дизайн больших приложений в ФПДизайн больших приложений в ФП
Дизайн больших приложений в ФПAlexander Granin
 
Интеллектуальный анализ текста
Интеллектуальный анализ текстаИнтеллектуальный анализ текста
Интеллектуальный анализ текстаLidia Pivovarova
 
Как и зачем можно создать DSL на Python
Как и зачем можно создать DSL на PythonКак и зачем можно создать DSL на Python
Как и зачем можно создать DSL на PythonPyNSK
 
Zyabrev -
Zyabrev - Zyabrev -
Zyabrev - Anna
 
08 машинный перевод
08 машинный перевод08 машинный перевод
08 машинный переводLidia Pivovarova
 

What's hot (20)

Back to the future: Функциональное программирование вчера и сегодня
Back to the future: Функциональное программирование вчера и сегодняBack to the future: Функциональное программирование вчера и сегодня
Back to the future: Функциональное программирование вчера и сегодня
 
Реляционные базы данных
Реляционные базы данныхРеляционные базы данных
Реляционные базы данных
 
Процесс майнинг
Процесс майнингПроцесс майнинг
Процесс майнинг
 
Программирование как способ выражения мыслей.
Программирование как способ выражения мыслей. Программирование как способ выражения мыслей.
Программирование как способ выражения мыслей.
 
неприятная правда про язык go
неприятная правда про язык goнеприятная правда про язык go
неприятная правда про язык go
 
Golang в действии: Как нам удается писать highload приложение на (не?)подходя...
Golang в действии: Как нам удается писать highload приложение на (не?)подходя...Golang в действии: Как нам удается писать highload приложение на (не?)подходя...
Golang в действии: Как нам удается писать highload приложение на (не?)подходя...
 
My talk at YouCon Saratov 2016
My talk at YouCon Saratov 2016My talk at YouCon Saratov 2016
My talk at YouCon Saratov 2016
 
Дизайн больших приложений в ФП
Дизайн больших приложений в ФПДизайн больших приложений в ФП
Дизайн больших приложений в ФП
 
бицоев сравнение систем анализа тональности на русском языке
бицоев сравнение систем анализа тональности на русском языкебицоев сравнение систем анализа тональности на русском языке
бицоев сравнение систем анализа тональности на русском языке
 
Ryazan
RyazanRyazan
Ryazan
 
Интеллектуальный анализ текста
Интеллектуальный анализ текстаИнтеллектуальный анализ текста
Интеллектуальный анализ текста
 
Извлечение знаний и фактов из текстов
Извлечение знаний и фактов из текстовИзвлечение знаний и фактов из текстов
Извлечение знаний и фактов из текстов
 
Котиков Простые методы выделения ключевых слов и построения рефератов
Котиков Простые методы выделения ключевых слов и построения рефератовКотиков Простые методы выделения ключевых слов и построения рефератов
Котиков Простые методы выделения ключевых слов и построения рефератов
 
Как и зачем можно создать DSL на Python
Как и зачем можно создать DSL на PythonКак и зачем можно создать DSL на Python
Как и зачем можно создать DSL на Python
 
Zyabrev -
Zyabrev - Zyabrev -
Zyabrev -
 
Black box testing
Black box testingBlack box testing
Black box testing
 
Смирнова. Методы исправления ошибок в текстах, написанных иностранцами.
Смирнова. Методы исправления ошибок в текстах, написанных иностранцами.Смирнова. Методы исправления ошибок в текстах, написанных иностранцами.
Смирнова. Методы исправления ошибок в текстах, написанных иностранцами.
 
переменные в Python
переменные в Pythonпеременные в Python
переменные в Python
 
переменные в Python
переменные в Pythonпеременные в Python
переменные в Python
 
08 машинный перевод
08 машинный перевод08 машинный перевод
08 машинный перевод
 

Viewers also liked

Img 20131014 0014_new
Img 20131014 0014_newImg 20131014 0014_new
Img 20131014 0014_newlchonillom
 
NEW BOOKINGS OPEN IN MVL LIMITED,THE PALMS, 2BHK NEW BOOKINGS,MVL THE PALMS ...
 NEW BOOKINGS OPEN IN MVL LIMITED,THE PALMS, 2BHK NEW BOOKINGS,MVL THE PALMS ... NEW BOOKINGS OPEN IN MVL LIMITED,THE PALMS, 2BHK NEW BOOKINGS,MVL THE PALMS ...
NEW BOOKINGS OPEN IN MVL LIMITED,THE PALMS, 2BHK NEW BOOKINGS,MVL THE PALMS ...Geetanjali Geetu
 
Муниципальное общеобразовательное учреждение «Лицей №2»
Муниципальное общеобразовательное учреждение «Лицей №2» Муниципальное общеобразовательное учреждение «Лицей №2»
Муниципальное общеобразовательное учреждение «Лицей №2» Школьная лига РОСНАНО
 
Comprar um computador beatriz e ines
Comprar um computador beatriz e inesComprar um computador beatriz e ines
Comprar um computador beatriz e inesnonoano_terceira
 
Portfolio copy-120819233710-phpapp01
Portfolio copy-120819233710-phpapp01Portfolio copy-120819233710-phpapp01
Portfolio copy-120819233710-phpapp01Sejahtera Affif
 
Modul struktur data_affif
Modul struktur data_affifModul struktur data_affif
Modul struktur data_affifSejahtera Affif
 
Affif makalah cryptografi&strong-password
Affif makalah cryptografi&strong-passwordAffif makalah cryptografi&strong-password
Affif makalah cryptografi&strong-passwordSejahtera Affif
 
Painel de controlo madalena e patricia
Painel de controlo madalena e patriciaPainel de controlo madalena e patricia
Painel de controlo madalena e patricianonoano_terceira
 
Advanced dreamweaver
Advanced dreamweaverAdvanced dreamweaver
Advanced dreamweaverSumit Tambe
 
Adsense success story in 2013
Adsense success story in 2013Adsense success story in 2013
Adsense success story in 2013vanessacute
 
Painel2 - Ciência e Tecnologia para o Desenvolvimento Sustentável – Filipe Du...
Painel2 - Ciência e Tecnologia para o Desenvolvimento Sustentável – Filipe Du...Painel2 - Ciência e Tecnologia para o Desenvolvimento Sustentável – Filipe Du...
Painel2 - Ciência e Tecnologia para o Desenvolvimento Sustentável – Filipe Du...CIDAADS
 
Macromedia dreamweaver 8
Macromedia dreamweaver 8Macromedia dreamweaver 8
Macromedia dreamweaver 8Sejahtera Affif
 

Viewers also liked (18)

Img 20131014 0014_new
Img 20131014 0014_newImg 20131014 0014_new
Img 20131014 0014_new
 
NEW BOOKINGS OPEN IN MVL LIMITED,THE PALMS, 2BHK NEW BOOKINGS,MVL THE PALMS ...
 NEW BOOKINGS OPEN IN MVL LIMITED,THE PALMS, 2BHK NEW BOOKINGS,MVL THE PALMS ... NEW BOOKINGS OPEN IN MVL LIMITED,THE PALMS, 2BHK NEW BOOKINGS,MVL THE PALMS ...
NEW BOOKINGS OPEN IN MVL LIMITED,THE PALMS, 2BHK NEW BOOKINGS,MVL THE PALMS ...
 
Муниципальное общеобразовательное учреждение «Лицей №2»
Муниципальное общеобразовательное учреждение «Лицей №2» Муниципальное общеобразовательное учреждение «Лицей №2»
Муниципальное общеобразовательное учреждение «Лицей №2»
 
Windows 8
Windows 8Windows 8
Windows 8
 
Comprar um computador beatriz e ines
Comprar um computador beatriz e inesComprar um computador beatriz e ines
Comprar um computador beatriz e ines
 
Dinamica aurora
Dinamica auroraDinamica aurora
Dinamica aurora
 
S jkr 0704960_chapter1
S jkr 0704960_chapter1S jkr 0704960_chapter1
S jkr 0704960_chapter1
 
Portfolio copy-120819233710-phpapp01
Portfolio copy-120819233710-phpapp01Portfolio copy-120819233710-phpapp01
Portfolio copy-120819233710-phpapp01
 
Modul struktur data_affif
Modul struktur data_affifModul struktur data_affif
Modul struktur data_affif
 
Affif makalah cryptografi&strong-password
Affif makalah cryptografi&strong-passwordAffif makalah cryptografi&strong-password
Affif makalah cryptografi&strong-password
 
Ap m6 ak jasa bank
Ap m6 ak jasa bankAp m6 ak jasa bank
Ap m6 ak jasa bank
 
Painel de controlo madalena e patricia
Painel de controlo madalena e patriciaPainel de controlo madalena e patricia
Painel de controlo madalena e patricia
 
Advanced dreamweaver
Advanced dreamweaverAdvanced dreamweaver
Advanced dreamweaver
 
Calidade profesionalidade docente
Calidade profesionalidade docenteCalidade profesionalidade docente
Calidade profesionalidade docente
 
Adsense success story in 2013
Adsense success story in 2013Adsense success story in 2013
Adsense success story in 2013
 
Painel2 - Ciência e Tecnologia para o Desenvolvimento Sustentável – Filipe Du...
Painel2 - Ciência e Tecnologia para o Desenvolvimento Sustentável – Filipe Du...Painel2 - Ciência e Tecnologia para o Desenvolvimento Sustentável – Filipe Du...
Painel2 - Ciência e Tecnologia para o Desenvolvimento Sustentável – Filipe Du...
 
Macromedia dreamweaver 8
Macromedia dreamweaver 8Macromedia dreamweaver 8
Macromedia dreamweaver 8
 
Tuncar huaroc roxana
Tuncar huaroc roxanaTuncar huaroc roxana
Tuncar huaroc roxana
 

Similar to 20120226 information retrieval raskovalov_lecture03-04

08.11 SEMPRO Club - Влад Моргун - Цвет настроения серый
08.11 SEMPRO Club - Влад Моргун - Цвет настроения серый08.11 SEMPRO Club - Влад Моргун - Цвет настроения серый
08.11 SEMPRO Club - Влад Моргун - Цвет настроения серыйVladislav Morgun
 
Говорим о СУБД языком HR
Говорим о СУБД языком HRГоворим о СУБД языком HR
Говорим о СУБД языком HRKonstantin Osipov
 
20131112федорроманенко
20131112федорроманенко20131112федорроманенко
20131112федорроманенкоYandex
 
Синютин С. - Студия Ф1 (http://studiof1.ru/), 11 семинар
Синютин С. - Студия Ф1 (http://studiof1.ru/), 11 семинарСинютин С. - Студия Ф1 (http://studiof1.ru/), 11 семинар
Синютин С. - Студия Ф1 (http://studiof1.ru/), 11 семинарСергей Синютин
 
Ранжирование: от строчки кода до Матрикснета
Ранжирование:  от строчки кода до МатрикснетаРанжирование:  от строчки кода до Матрикснета
Ранжирование: от строчки кода до Матрикснетаyaevents
 
"Мы два месяца долбались, а потом построили индекс" (c) Аксенов
"Мы два месяца долбались, а потом построили индекс" (c) Аксенов"Мы два месяца долбались, а потом построили индекс" (c) Аксенов
"Мы два месяца долбались, а потом построили индекс" (c) АксеновAlex Chistyakov
 
BigData и Data Science: методы и инструменты
BigData и Data Science: методы и инструменты BigData и Data Science: методы и инструменты
BigData и Data Science: методы и инструменты Dima Karamshuk
 
20131105 романенко
20131105 романенко20131105 романенко
20131105 романенкоYandex
 
Максим Богуславский, Banki.ru, «Как вырастить в себе автоматизатора и разрабо...
Максим Богуславский, Banki.ru, «Как вырастить в себе автоматизатора и разрабо...Максим Богуславский, Banki.ru, «Как вырастить в себе автоматизатора и разрабо...
Максим Богуславский, Banki.ru, «Как вырастить в себе автоматизатора и разрабо...Mail.ru Group
 
Mail.ru: Как вырастить в себе автоматизатора и разработчика
Mail.ru:  Как вырастить в себе автоматизатора и разработчикаMail.ru:  Как вырастить в себе автоматизатора и разработчика
Mail.ru: Как вырастить в себе автоматизатора и разработчикаMaxim Boguslavsky
 
Оценка эффективности работы аналитика
Оценка эффективности работы аналитикаОценка эффективности работы аналитика
Оценка эффективности работы аналитикаSQALab
 
Владимир Лучанинов. Сделай сам анализатор SERP
Владимир Лучанинов. Сделай сам анализатор SERPВладимир Лучанинов. Сделай сам анализатор SERP
Владимир Лучанинов. Сделай сам анализатор SERPOctopus Events
 
Андрей Похилько — Нагрузочное тестирование типичного интернет сервиса
Андрей Похилько — Нагрузочное тестирование типичного интернет сервисаАндрей Похилько — Нагрузочное тестирование типичного интернет сервиса
Андрей Похилько — Нагрузочное тестирование типичного интернет сервисаYandex
 
Никулин Павел. Machine learning для текстового анализа
Никулин Павел. Machine learning для текстового анализаНикулин Павел. Machine learning для текстового анализа
Никулин Павел. Machine learning для текстового анализаДмитрий Шахов
 
Оценка производительности hadoop кластера.
Оценка производительности hadoop кластера.Оценка производительности hadoop кластера.
Оценка производительности hadoop кластера.Vyacheslav Murashkin
 
CodeFest 2013. Сурова И. — Аналитик — инструкция по применению для менеджеров...
CodeFest 2013. Сурова И. — Аналитик — инструкция по применению для менеджеров...CodeFest 2013. Сурова И. — Аналитик — инструкция по применению для менеджеров...
CodeFest 2013. Сурова И. — Аналитик — инструкция по применению для менеджеров...CodeFest
 
Доменно специфичные базы данных и рассылка Aviasales, Борис Каплуновский (Avi...
Доменно специфичные базы данных и рассылка Aviasales, Борис Каплуновский (Avi...Доменно специфичные базы данных и рассылка Aviasales, Борис Каплуновский (Avi...
Доменно специфичные базы данных и рассылка Aviasales, Борис Каплуновский (Avi...Ontico
 
"Outside In". Web application testing.
"Outside In". Web application testing."Outside In". Web application testing.
"Outside In". Web application testing.Mad Devs
 

Similar to 20120226 information retrieval raskovalov_lecture03-04 (20)

08.11 SEMPRO Club - Влад Моргун - Цвет настроения серый
08.11 SEMPRO Club - Влад Моргун - Цвет настроения серый08.11 SEMPRO Club - Влад Моргун - Цвет настроения серый
08.11 SEMPRO Club - Влад Моргун - Цвет настроения серый
 
Говорим о СУБД языком HR
Говорим о СУБД языком HRГоворим о СУБД языком HR
Говорим о СУБД языком HR
 
20131112федорроманенко
20131112федорроманенко20131112федорроманенко
20131112федорроманенко
 
Синютин С. - Студия Ф1 (http://studiof1.ru/), 11 семинар
Синютин С. - Студия Ф1 (http://studiof1.ru/), 11 семинарСинютин С. - Студия Ф1 (http://studiof1.ru/), 11 семинар
Синютин С. - Студия Ф1 (http://studiof1.ru/), 11 семинар
 
Ранжирование: от строчки кода до Матрикснета
Ранжирование:  от строчки кода до МатрикснетаРанжирование:  от строчки кода до Матрикснета
Ранжирование: от строчки кода до Матрикснета
 
"Мы два месяца долбались, а потом построили индекс" (c) Аксенов
"Мы два месяца долбались, а потом построили индекс" (c) Аксенов"Мы два месяца долбались, а потом построили индекс" (c) Аксенов
"Мы два месяца долбались, а потом построили индекс" (c) Аксенов
 
BigData и Data Science: методы и инструменты
BigData и Data Science: методы и инструменты BigData и Data Science: методы и инструменты
BigData и Data Science: методы и инструменты
 
Lovely scrum
Lovely scrumLovely scrum
Lovely scrum
 
20131105 романенко
20131105 романенко20131105 романенко
20131105 романенко
 
Максим Богуславский, Banki.ru, «Как вырастить в себе автоматизатора и разрабо...
Максим Богуславский, Banki.ru, «Как вырастить в себе автоматизатора и разрабо...Максим Богуславский, Banki.ru, «Как вырастить в себе автоматизатора и разрабо...
Максим Богуславский, Banki.ru, «Как вырастить в себе автоматизатора и разрабо...
 
Mail.ru: Как вырастить в себе автоматизатора и разработчика
Mail.ru:  Как вырастить в себе автоматизатора и разработчикаMail.ru:  Как вырастить в себе автоматизатора и разработчика
Mail.ru: Как вырастить в себе автоматизатора и разработчика
 
Analyst Days 2014
Analyst Days 2014Analyst Days 2014
Analyst Days 2014
 
Оценка эффективности работы аналитика
Оценка эффективности работы аналитикаОценка эффективности работы аналитика
Оценка эффективности работы аналитика
 
Владимир Лучанинов. Сделай сам анализатор SERP
Владимир Лучанинов. Сделай сам анализатор SERPВладимир Лучанинов. Сделай сам анализатор SERP
Владимир Лучанинов. Сделай сам анализатор SERP
 
Андрей Похилько — Нагрузочное тестирование типичного интернет сервиса
Андрей Похилько — Нагрузочное тестирование типичного интернет сервисаАндрей Похилько — Нагрузочное тестирование типичного интернет сервиса
Андрей Похилько — Нагрузочное тестирование типичного интернет сервиса
 
Никулин Павел. Machine learning для текстового анализа
Никулин Павел. Machine learning для текстового анализаНикулин Павел. Machine learning для текстового анализа
Никулин Павел. Machine learning для текстового анализа
 
Оценка производительности hadoop кластера.
Оценка производительности hadoop кластера.Оценка производительности hadoop кластера.
Оценка производительности hadoop кластера.
 
CodeFest 2013. Сурова И. — Аналитик — инструкция по применению для менеджеров...
CodeFest 2013. Сурова И. — Аналитик — инструкция по применению для менеджеров...CodeFest 2013. Сурова И. — Аналитик — инструкция по применению для менеджеров...
CodeFest 2013. Сурова И. — Аналитик — инструкция по применению для менеджеров...
 
Доменно специфичные базы данных и рассылка Aviasales, Борис Каплуновский (Avi...
Доменно специфичные базы данных и рассылка Aviasales, Борис Каплуновский (Avi...Доменно специфичные базы данных и рассылка Aviasales, Борис Каплуновский (Avi...
Доменно специфичные базы данных и рассылка Aviasales, Борис Каплуновский (Avi...
 
"Outside In". Web application testing.
"Outside In". Web application testing."Outside In". Web application testing.
"Outside In". Web application testing.
 

More from Computer Science Club

20140531 serebryany lecture01_fantastic_cpp_bugs
20140531 serebryany lecture01_fantastic_cpp_bugs20140531 serebryany lecture01_fantastic_cpp_bugs
20140531 serebryany lecture01_fantastic_cpp_bugsComputer Science Club
 
20140531 serebryany lecture02_find_scary_cpp_bugs
20140531 serebryany lecture02_find_scary_cpp_bugs20140531 serebryany lecture02_find_scary_cpp_bugs
20140531 serebryany lecture02_find_scary_cpp_bugsComputer Science Club
 
20140531 serebryany lecture01_fantastic_cpp_bugs
20140531 serebryany lecture01_fantastic_cpp_bugs20140531 serebryany lecture01_fantastic_cpp_bugs
20140531 serebryany lecture01_fantastic_cpp_bugsComputer Science Club
 
20140511 parallel programming_kalishenko_lecture12
20140511 parallel programming_kalishenko_lecture1220140511 parallel programming_kalishenko_lecture12
20140511 parallel programming_kalishenko_lecture12Computer Science Club
 
20140427 parallel programming_zlobin_lecture11
20140427 parallel programming_zlobin_lecture1120140427 parallel programming_zlobin_lecture11
20140427 parallel programming_zlobin_lecture11Computer Science Club
 
20140420 parallel programming_kalishenko_lecture10
20140420 parallel programming_kalishenko_lecture1020140420 parallel programming_kalishenko_lecture10
20140420 parallel programming_kalishenko_lecture10Computer Science Club
 
20140413 parallel programming_kalishenko_lecture09
20140413 parallel programming_kalishenko_lecture0920140413 parallel programming_kalishenko_lecture09
20140413 parallel programming_kalishenko_lecture09Computer Science Club
 
20140329 graph drawing_dainiak_lecture02
20140329 graph drawing_dainiak_lecture0220140329 graph drawing_dainiak_lecture02
20140329 graph drawing_dainiak_lecture02Computer Science Club
 
20140329 graph drawing_dainiak_lecture01
20140329 graph drawing_dainiak_lecture0120140329 graph drawing_dainiak_lecture01
20140329 graph drawing_dainiak_lecture01Computer Science Club
 
20140310 parallel programming_kalishenko_lecture03-04
20140310 parallel programming_kalishenko_lecture03-0420140310 parallel programming_kalishenko_lecture03-04
20140310 parallel programming_kalishenko_lecture03-04Computer Science Club
 
20140216 parallel programming_kalishenko_lecture01
20140216 parallel programming_kalishenko_lecture0120140216 parallel programming_kalishenko_lecture01
20140216 parallel programming_kalishenko_lecture01Computer Science Club
 

More from Computer Science Club (20)

20141223 kuznetsov distributed
20141223 kuznetsov distributed20141223 kuznetsov distributed
20141223 kuznetsov distributed
 
Computer Vision
Computer VisionComputer Vision
Computer Vision
 
20140531 serebryany lecture01_fantastic_cpp_bugs
20140531 serebryany lecture01_fantastic_cpp_bugs20140531 serebryany lecture01_fantastic_cpp_bugs
20140531 serebryany lecture01_fantastic_cpp_bugs
 
20140531 serebryany lecture02_find_scary_cpp_bugs
20140531 serebryany lecture02_find_scary_cpp_bugs20140531 serebryany lecture02_find_scary_cpp_bugs
20140531 serebryany lecture02_find_scary_cpp_bugs
 
20140531 serebryany lecture01_fantastic_cpp_bugs
20140531 serebryany lecture01_fantastic_cpp_bugs20140531 serebryany lecture01_fantastic_cpp_bugs
20140531 serebryany lecture01_fantastic_cpp_bugs
 
20140511 parallel programming_kalishenko_lecture12
20140511 parallel programming_kalishenko_lecture1220140511 parallel programming_kalishenko_lecture12
20140511 parallel programming_kalishenko_lecture12
 
20140427 parallel programming_zlobin_lecture11
20140427 parallel programming_zlobin_lecture1120140427 parallel programming_zlobin_lecture11
20140427 parallel programming_zlobin_lecture11
 
20140420 parallel programming_kalishenko_lecture10
20140420 parallel programming_kalishenko_lecture1020140420 parallel programming_kalishenko_lecture10
20140420 parallel programming_kalishenko_lecture10
 
20140413 parallel programming_kalishenko_lecture09
20140413 parallel programming_kalishenko_lecture0920140413 parallel programming_kalishenko_lecture09
20140413 parallel programming_kalishenko_lecture09
 
20140329 graph drawing_dainiak_lecture02
20140329 graph drawing_dainiak_lecture0220140329 graph drawing_dainiak_lecture02
20140329 graph drawing_dainiak_lecture02
 
20140329 graph drawing_dainiak_lecture01
20140329 graph drawing_dainiak_lecture0120140329 graph drawing_dainiak_lecture01
20140329 graph drawing_dainiak_lecture01
 
20140310 parallel programming_kalishenko_lecture03-04
20140310 parallel programming_kalishenko_lecture03-0420140310 parallel programming_kalishenko_lecture03-04
20140310 parallel programming_kalishenko_lecture03-04
 
20140223-SuffixTrees-lecture01-03
20140223-SuffixTrees-lecture01-0320140223-SuffixTrees-lecture01-03
20140223-SuffixTrees-lecture01-03
 
20140216 parallel programming_kalishenko_lecture01
20140216 parallel programming_kalishenko_lecture0120140216 parallel programming_kalishenko_lecture01
20140216 parallel programming_kalishenko_lecture01
 
20131106 h10 lecture6_matiyasevich
20131106 h10 lecture6_matiyasevich20131106 h10 lecture6_matiyasevich
20131106 h10 lecture6_matiyasevich
 
20131027 h10 lecture5_matiyasevich
20131027 h10 lecture5_matiyasevich20131027 h10 lecture5_matiyasevich
20131027 h10 lecture5_matiyasevich
 
20131027 h10 lecture5_matiyasevich
20131027 h10 lecture5_matiyasevich20131027 h10 lecture5_matiyasevich
20131027 h10 lecture5_matiyasevich
 
20131013 h10 lecture4_matiyasevich
20131013 h10 lecture4_matiyasevich20131013 h10 lecture4_matiyasevich
20131013 h10 lecture4_matiyasevich
 
20131006 h10 lecture3_matiyasevich
20131006 h10 lecture3_matiyasevich20131006 h10 lecture3_matiyasevich
20131006 h10 lecture3_matiyasevich
 
20131006 h10 lecture3_matiyasevich
20131006 h10 lecture3_matiyasevich20131006 h10 lecture3_matiyasevich
20131006 h10 lecture3_matiyasevich
 

20120226 information retrieval raskovalov_lecture03-04

  • 1. Современные методы улучшения качества поиска Яндекс Den Raskovalov denplusplus@yandex-team.ru Санкт-Петербург 25.02.2011
  • 2. Краткая история IR 1950: Боязнь научного отставания от СССР подстегивает работы по построению мехнизированных систем поиска, изобретению индекса цитирования 1975: Salton публикует свои основные работы (TF*IDF) 1992: Первый TREC ~2000: Индустриализация IR с широким распространением web'а и появлением поисковых машин 2003: РОМИП
  • 3. Состояние IR ● Не наука ● Близко не подошла к пониманию смысла текста ● Роль эвристики велика, как нигде ● Накоплено и развито некоторые техники: ● Морфология ● Машинное обучение ● Обработка огромных объемов косвенных данных (логи запросов -> синонимы)
  • 4. Как происходит поиск? ● Запрос токенизируется, к словам запроса применяется морфологический анализ, ищутся синонимы ● Из документов индекса отбираются те, которые с большой вероятностью имеют отношение к запросу (фильтрация) ● Для отфильтрованных документов рассчитываются признаки (фичи, features) ● К признакам применяется формула, дающая конечную оценку релевантности
  • 5. Инвертированный индекс ● Позволяет для данного ключа (слова) найти (проитерироваться) по его вхождениям (позициям) в документы коллекции ● Есть возможность дополнительно хранить информацию про вхождение (сегмент, позицию) ● Получается, что все, что мы знаем про документ, когда считаем релевантность – это позиции слов запроса (мало?)
  • 6. Инвертированный индекс, структура и реализация ● Минимальная реализация ● Два файла: ● Key – отсортированный список слов, с указанием, где они хранятся в inv-файле ● Inv – плоский файл с информацией о позициях – Позиции для одного ключа идут подряд – Позиции отсортированы по (id документа, позиции в документе) Читать удобно с помощью memory map
  • 7. Инвертированный индекс, его построение ● Проблема: индексатор получает документ за документом ● Накапливать инвертированный индекс в памяти map< string, vector<TPosition> > ● Когда памяти перестает хватать, записать порцию инвертированного индекса на диск ● Когда документы кончатся, слить порции инвертированного индекса с диска в один индекс по всем документам
  • 8. Инвертированный индекс: слияние ● Идея для слияния используется та же, что и для внешней сортировки ● Завести heap, хранящий итераторы на порции ● Записывать каждый раз в выходной файл минимальную позицию, пока все не закончатся Можно разработать весьма эффективные алгоритмы сжатия инвертированного индекса (дельта-кодирование, префиксное сжатие)
  • 9. Фильтрация ● Запрос состоит из нескольких слов, какие документы считать найденными? ● Зачем нужна? На самом деле, для оптимизации. Цель – не потерять релевантные документы. ● Те, которые содержат слова запроса. Содержат где? ● Есть текст, есть ссылки на документ (ссылки можно трактовать, как хорошие описания) ● [мой дядя самых чистых правил, когда не в шутку занемог] ● [скачать учебник философия вуз платон и демокрит pdf djvu torrent] ● AND? ● OR? ● Все или почти все слова запроса.
  • 10. Фильтрация: кворум Q – запрос qi – i-ое слово запроса w(qi) – функция веса слова D - документ ∑ w(qi )> Quorum (Q)⋅∑ w(qi ) qi ∈ D q i ∈Q Quorum (Q)=1−0.01(1/ √( Q −1)) ∣ ∣ w(q i )=−log ( DocFreq (qi )/ SumOfFreq)
  • 11. Фильтрация: идеи ● Слова в заголовках важнее, чем в остальном тексте ● Существительные важнее, чем прилагательные ● Очень редкие слова только мешают (опечатки) ● Стоп-слова (предлоги, союзы) должны иметь нулевой вес ● Иногда очень частые слова очень важны, их нельзя отбрасывать (география) [нотариус москва] ● Решение – выбрать метрику, составить обучающую выборку, произвести машинное обучение
  • 13. Ранжирование ● Для того, что работать над качеством ранжирования, надо уметь его измерять (трюизм, да). ● В основе оценки качества работы любого алгоритма лежит сравнение результатов его работы с результатом работы человека.
  • 14. Ранжирование: тексты ● До появления интернета, был только текст документа ● ТF-IDF (Salton) ● BM25 (Robertson) – – – Пенальти длинным документам – Пенальти большому числу вхождений слова ● Морфология ● Тезаурусы (синонимы) ● BM25F - Зоны
  • 15. Ранжирование: ссылки ● С появлением WWW и HTML появляются ссылки. Зачастую они хорошо описывают документ. Сам факт их наличия много говорит о документе: ● LF-IDF ● LinkBM25
  • 16. Ранжирование: PageRank ● Рассмотрим граф. Вершины – страницы интернета, ребро – ссылка. ● Рассмотрим модель “блуждающей обезьянки”. ● PageRank страницы – мера времени, которая обезьянка проводит на странице. ● Не зависящая от запроса мера важности страницы в интернете.
  • 17. Ранжирование: клики ● Можно собирать реацкию пользователя. По нерелевантному не кликают. На нерелевантном не проводят время.
  • 18. Ранжирование ● Одна из основных проблем ранжирования: как научиться сочетать столь разнородные сигналы? ● Для того, что работать над качеством ранжирования, надо уметь его измерять (трюизм, да). ● В основе оценки качества работы любого алгоритма лежит сравнение результатов его работы с результатом работы человека.
  • 20. Метрики: ранжирование ● Point-wise ● Например, невязка (сумма квадратов отклонение оценок от предасказанной релевантности) ● Pair-wise ● Например, число неправильно отранжированных пар ● List-wise ● Сумма по всем запросам – Релевантности первого документа (P1) – Релевантности первых десяти документов (P10) – NDCG (сумма релевантностей, нормированный на позицию документа)
  • 21. Метрики ранжирования: pFound ● В основе метрики лежит модель поведения пользователя: ● Пользователь просматривает выдачу сверху-вниз результат за результатом ● После просмотра каждого результата пользователь может остановить поиск: – Текущий результат решил его поисковую задачу – Он отчаялся ● pFound – это вероятность того, что пользователь нашел ● pView[i] = pView[i-1]*(1 – pSuccess[i – 1]))*0.85 ● pFound = sum pView[i]*pSuccess[i] ● Приятное свойство: один раз собрав оценки результатов поиска, можно оценивать результаты работы разных алгоритмов.
  • 22. Проблема недооцеенности ● Оценки быстро устаревают ● Релевантные документы исчезают ● Все классические метрики при этом стремятся к нулю по абсолютному значению и не сохраняют порядок ранжирования систем
  • 23. Анализ поведения пользователей ● “Счастье” ● Кликовые метрики ● Средняя позиция первого (по времени!) клика ● Доля некликнутых страниц ● Доля длинных кликов ● Общая кликабельность выдачи ● A/B тестирование
  • 24. Sec. 8.6.3 A/B тестирование ● Проверка «единственного» небольшого изменения ● Условия: наличие популярной поисковой системы ● Большинство пользователей все еще используют старую систему ● Малый процент (1-2-4-10%) выполняем в новой системе ● Одновременное выполнение ● Анализ затронутых запросов ● «Общие» запросы для стандартной и экспериментальной систем ● Менее точно, низкая разрешающая способность, но надежно и не требует оценок 24
  • 25. A/B тест: пример эксперимента
  • 26. Алгоритмы машинного обучения ● Метод ближайшего соседа ● SVM (попытка линейно разделить релевантное и нерелевантное) ● Жадный перебор полиномиальной формулы ● Очень хочется пользоваться градиентным спуском. Но как?
  • 27. Алгоритмы машинного обучения ● Проблема в том, что pFound недифференцируем. На помощь приходит модель Люка-Плакетта. ● После этого можно применять градиентный спуск. ● Полезный прием: bagging. ● Бустим много раз: используем жадность. ● В качестве базовых примитивов используем “кубики” малой размерности. ● Не забудем про регуляризацию.
  • 28. Алгоритмы машинного обучения ● В результате получаем MatrixNet. ● Ближайший аналог: TreeNet от господина Фридмана. ● В реальном мире нужно распараллелить на множество машин.
  • 29. Машинное обучение ● С помощью машинного обучения в Яндексе решается множество задач: ● Решение, что обходить ● Решение, что выкладывать ● Сниппеты ● Задачи производительности ● Детекция спама ● Решение о показе рекламы
  • 30. Что еще? ● Множество источников (новости, блоги, товары) ● Актуальность ● Свежесть ● Непорнушность ● Дубликаты ● Разнообразие интентов ● Спам ● Подавление спама
  • 32. Современные методы увеличения производительности поиска Организация разработки в поиске Яндекса Яндекс Den Raskovalov denplusplus@yandex-team.ru 25.02.2011 Санкт-Петербург
  • 33. Базовый поиск ● Базовый поиск – это программа, которая по поисковому индексу умеет находить самые релевантные документы, строить сниппеты, возвращать дополнительную документную информацию. ● Индекс обычно содержит миллионы документов. ● Реализован, как HTTP-сервер (для отладки подходит браузер). ● В базовом поиске тратятся 95% всех ресурсов при обслуживании запроса. ● Стоимость кластера - десятки миллионов долларов. 1% производительности - сотни тысяч долларов.
  • 34. Базовый поиск ● Все данные, нужные для поиска, хранятся в оперативной памяти. ● Форматы, используемые в индексе, рассчитаны на прямую совместимость с системой индексации. ● В разработке программы принимали/принимают участие ~500 программистов. ● Чтобы часто тестировать качество/скорость, нужно, чтобы это не требовало человеческих ресурсов. ● Профайлер – ваш лучший друг (vtune, valgrind, callgrind, kcachegrind). ● Некоторые оптимизации не меняют результаты поиска, некоторые – их немного ухудшают.
  • 35.
  • 36. Базовый поиск: тестирование производительности
  • 37. Оптимизации ● Сжатие инвертированного индекса ● Фильтрация ● Синтаксический колдунщик ● Pruning ● Fastrank ● Параллельное выполнение запроса ● Частичное выполнение MatrixNet'а ● Отсечение по времени выполнения запроса ● Использование SSEk инструкций процессора ● Кодогенерация
  • 38.
  • 39.
  • 40.
  • 41.
  • 42. Сжатие инвертированного индекса ● Алгоритмы компрессии списка позиций хорошо работают для групп близких чисел. ● Хорошо бы, чтобы документы, содержащие слово, шли подряд. ● Решение? Отсортировать по url ;)
  • 43. Фильтрация ● Пример оптимизации: часто документ не модет пройти фильтрацию, если в нем нет некоторых тяжелых слов: ∑ w(qi )> Quorum(Q)⋅∑ w(qi ) q i ∈D q i ∈Q Quorum(Q )=1−0.01(1/ √( Q −1)) ∣ ∣ ● Фактически внутри запроса появляются слова, которые связаны AND. ● Когда мы итерируемся, если мы можем быстро узнать, какой документ следует за текущим, можно сразу идти на max(next_i)
  • 44. Синтаксический колдунщик ● [скачать учебник философия для вузов платон и демокрит pdf djvu torrent] ● Можно написать алгоритм, который проанализирует синтаксическую согласованность групп слов внутри запроса ● [“скачать учебник” “философия для вузов” “платон и демокрит” “pdf” “djvu” “torrent”] ● Это уменьшит число найденных документов ● Сейчас эта оптимизация не используется, как сильно ухудшающая качество поиска
  • 45. Pruning ● Pruning – раннее отсечение запроса ● Если мы нашли 40000 документов, то мы обрываем поиск. ● Хорошо бы, чтобы хорошие документы были в самом начале. ● Пусть качество == вероятность показа ● Как же быть с эффективностью сжатия индекса? ● Разобьем на 16 групп по качеству, внутри каждой отсортируем по URL'у. ● Требует итеративной архитектуры базового поиска. Один за другим перебираем документы, один за другим подвергаем их фильтрации, можем посчитать релевантность для одного документа. Может прервать поиск после любого документа.
  • 46. Fastrank ● Фичей очень много ● MatrixNet содержит множество деревьев. ● Что же делать? ● Нам нужно вернусть обычно лишь 10 лучших результатов. ● Давайте выделим “легкие” фичи, подберем “легкую” функцию ранжирования.
  • 47. Fastrank if (CurrentDocument.FastRank > FastRankHeap.Min() || FastRankHeap.Size() < 300) { if (FastRankHeap.Size() >= 300) FastRankHeap.Pop(); FastRankHeap.Push(CurrentDocument.FastRank ); PositionCache.Memorize(CurrentDocument); }
  • 48. EarlyRank ● Та же идея, только будем оперировать только наличием/отсутствием слов в тексте/ссылках. ● Будем экономить на чтении и распаковке позиций в инвертированном индексе.
  • 49. Параллельное выполнение запроса ● В типовом современном серверном процессоре 24 ядра. ● Исполнение одного запроса в несколько тредов не увеличиваем емкость (количество запросов, которые можно выполнить за секунду). И даже уменьшает (расходы на слияние). ● Зато позволяет увеличить латентность (среднее время выполнения запроса). ● Можно распараллелить, разбив документы на несколько виртуальных интервалов. ● Можно распараллелить лишь некоторые стадии (после fastrank'а). ● Легкие запросы нет смысла распараллеливать (можно оценить “легкость” прямо во время выполнения запроса).
  • 50.
  • 51. Частичое выполнение MatrixNet'а ● Результирующая ”формула” MatrixNet'а состоит из тысяч деревьев, каждое из которых дает небольшой вклад в итоговую релевантность. Нет малого числа “очень важных” деревьев. ● Это позволяет применить привычный прием. ● Если базовому поиску нужно вернуть 10 лучших документов, давайте для 300 документов после FastRank посчитаем 1/10 деревьев MatrixNet. И лишь для 30 лучших по “легкому MatrixNet” посчитаем “полный” MatrixNet.
  • 52. SSE и кодогенерация ● SSE позволяет выполнить одну и ту же операцию (например, сложение, умножение) с векторами из 4/8/16 чисел. ● Именно это и нужно. Можно реорганизовать код так, чтобы вычислять формулы релевантности для “пачек” из 4/8 документов.
  • 53. Кодогенерация ● Многие данные (формулы) удобнее превратить в код на этапе компиляции. ● Он должен помещаться в кэш комманд процессора. ● Удобно использовать шаблоны C++, для явных указаний, какой вариант чаще всего будет использоваться в production (условные дампы).
  • 54.
  • 55. Отсечение по времени выполнения запроса ● Хорошо бы, чтобы базовый поиск отвечал всегда за 200ms. Такое ограничение может проистекать из требования, чтобы пользователь всегда получал ответ за 1s. ● Просто ограничить время выполнения запроса на одной машине нельзя? Почему? ● Давайте в процессе исполнения запроса накапливать счетчики: ● Число скипов ● Число обработанных позиций ● Число найденных документов ● ... ● Построим регрессионную формулу, предсказывающую время выполнения запроса по внутренним статистикам. ● Если формула предсказывает, что мы работаем уже больше 200ms, прервем поиск.