SlideShare a Scribd company logo
Современные методы улучшения
       качества поиска

            Яндекс
        Den Raskovalov
  denplusplus@yandex-team.ru
           1.10.2011
Краткая история IR

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

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

1992: Первый TREC

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

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

●   Получается, что все, что мы знаем про
    документ, когда считаем релевантность – это
    позиции слов запроса (мало?)
Инвертированный индекс,
          структура и реализация
●   Минимальная реализация
●   Два файла:
    ●   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]
●   Приятное свойство: один раз собрав оценки результатов
    поиска, можно оценивать результаты работы разных
    алгоритмов.
Алгоритмы машинного обучения
●   Метод ближайшего соседа
●   SVM (попытка линейно разделить
    релевантное и нерелевантное)
●   Жадный перебор полиномиальной формулы

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

Вопросы?

More Related Content

PDF
20111002 information retrieval raskovalov_lecture3
PDF
20120226 information retrieval raskovalov_lecture03-04
PDF
Go для python-программистов
PDF
Дмитрий Прокопцев "Memory-mapped storage: ещё один подход к сериализации данных"
PDF
PostgreSQL: практические примеры оптимизации SQL-запросов / Иван Фролков (Po...
PPT
CodeFest 2012. Нелюбин Д. — Neo4j — графовая база данных
PDF
Руслан Гроховецкий "Как Python стал делать погоду в Яндексе"
PDF
RTB DSP на языке Go: укрощение buzzwords
20111002 information retrieval raskovalov_lecture3
20120226 information retrieval raskovalov_lecture03-04
Go для python-программистов
Дмитрий Прокопцев "Memory-mapped storage: ещё один подход к сериализации данных"
PostgreSQL: практические примеры оптимизации SQL-запросов / Иван Фролков (Po...
CodeFest 2012. Нелюбин Д. — Neo4j — графовая база данных
Руслан Гроховецкий "Как Python стал делать погоду в Яндексе"
RTB DSP на языке Go: укрощение buzzwords

What's hot (20)

PDF
Выступление Александра Крота из "Вымпелком" на Hadoop Meetup в рамках RIT++
PDF
C++ STL & Qt. Занятие 09.
PPTX
Оптимизация высоконагруженных ASP.NET приложений, работающих с MS SQL Server ...
PDF
C++ STL & Qt. Занятие 11.
PDF
Дмитрий Стогов
PPTX
Индексируй неиндексирумое
PDF
Отладка производительности приложения на Erlang / Максим Лапшин (Erlyvideo)
PDF
Опыт использования Spark, Основано на реальных событиях
PDF
Олег Царев, Кирилл Коринский Сравнительный анализ хранилищ данных
PDF
Дизайн больших приложений в ФП
ODP
My talk on LeoFS, HappyDev 2014
PDF
2014.12.06 03 Александр Чистяков — Устройство object storage на примере LeoFS
PDF
Back to the future: Функциональное программирование вчера и сегодня
PDF
Практика совместного использования Lua и C в opensource спам-фильтре Rspamd /...
PDF
Hadoop > cascading -> cascalog (short version)
PDF
Kranonit s16 (python). sergey burma
PDF
C++ STL & Qt. Занятие 08.
PDF
My talk on HBase ops engineering at TBD Jun 2016
PPTX
MongoDB в продакшен - миф или реальность?
PDF
NoSQL внутри SQL: приземленные вопросы практического применения / Дмитрий До...
Выступление Александра Крота из "Вымпелком" на Hadoop Meetup в рамках RIT++
C++ STL & Qt. Занятие 09.
Оптимизация высоконагруженных ASP.NET приложений, работающих с MS SQL Server ...
C++ STL & Qt. Занятие 11.
Дмитрий Стогов
Индексируй неиндексирумое
Отладка производительности приложения на Erlang / Максим Лапшин (Erlyvideo)
Опыт использования Spark, Основано на реальных событиях
Олег Царев, Кирилл Коринский Сравнительный анализ хранилищ данных
Дизайн больших приложений в ФП
My talk on LeoFS, HappyDev 2014
2014.12.06 03 Александр Чистяков — Устройство object storage на примере LeoFS
Back to the future: Функциональное программирование вчера и сегодня
Практика совместного использования Lua и C в opensource спам-фильтре Rspamd /...
Hadoop > cascading -> cascalog (short version)
Kranonit s16 (python). sergey burma
C++ STL & Qt. Занятие 08.
My talk on HBase ops engineering at TBD Jun 2016
MongoDB в продакшен - миф или реальность?
NoSQL внутри SQL: приземленные вопросы практического применения / Дмитрий До...
Ad

Similar to 20111001 information retrieval raskovalov_lecture2 (20)

PDF
08.11 SEMPRO Club - Влад Моргун - Цвет настроения серый
PDF
Говорим о СУБД языком HR
PDF
Процесс майнинг
PDF
Как и зачем можно создать DSL на Python
ODP
Синютин С. - Студия Ф1 (http://studiof1.ru/), 11 семинар
PPTX
Декларативно функциональный стиль в PHP
PPTX
Программирование как способ выражения мыслей.
PDF
Про то, что (лекция для студентов об адаптации к работе)
PDF
Интерпретация моделей машинного обучения
PDF
School IT recruiting
PDF
BigData и Data Science: методы и инструменты
PDF
20131112федорроманенко
PPTX
Ранжирование: от строчки кода до Матрикснета
PDF
Принципы работы поисковой системы
PDF
Принципы работы поисковой системы
PDF
SECON'2016. Бартунов Олег, Карьера в Open Source
PDF
Построение графов по влиянию ссылочного ранжирования на продвижение сайтов
PDF
AI&BigData Lab. Варвара Красавина "Оптимизация поиска в системе LeadScanner с...
PDF
Back to the Future: Функциональное программирование вчера и сегодня
PDF
Tech Talks @NSU: Back to the Future: Функциональное программирование вчера и ...
08.11 SEMPRO Club - Влад Моргун - Цвет настроения серый
Говорим о СУБД языком HR
Процесс майнинг
Как и зачем можно создать DSL на Python
Синютин С. - Студия Ф1 (http://studiof1.ru/), 11 семинар
Декларативно функциональный стиль в PHP
Программирование как способ выражения мыслей.
Про то, что (лекция для студентов об адаптации к работе)
Интерпретация моделей машинного обучения
School IT recruiting
BigData и Data Science: методы и инструменты
20131112федорроманенко
Ранжирование: от строчки кода до Матрикснета
Принципы работы поисковой системы
Принципы работы поисковой системы
SECON'2016. Бартунов Олег, Карьера в Open Source
Построение графов по влиянию ссылочного ранжирования на продвижение сайтов
AI&BigData Lab. Варвара Красавина "Оптимизация поиска в системе LeadScanner с...
Back to the Future: Функциональное программирование вчера и сегодня
Tech Talks @NSU: Back to the Future: Функциональное программирование вчера и ...
Ad

More from Computer Science Club (20)

PDF
20141223 kuznetsov distributed
PDF
Computer Vision
PDF
20140531 serebryany lecture01_fantastic_cpp_bugs
PDF
20140531 serebryany lecture02_find_scary_cpp_bugs
PDF
20140531 serebryany lecture01_fantastic_cpp_bugs
PDF
20140511 parallel programming_kalishenko_lecture12
PDF
20140427 parallel programming_zlobin_lecture11
PDF
20140420 parallel programming_kalishenko_lecture10
PDF
20140413 parallel programming_kalishenko_lecture09
PDF
20140329 graph drawing_dainiak_lecture02
PDF
20140329 graph drawing_dainiak_lecture01
PDF
20140310 parallel programming_kalishenko_lecture03-04
PDF
20140223-SuffixTrees-lecture01-03
PDF
20140216 parallel programming_kalishenko_lecture01
PDF
20131106 h10 lecture6_matiyasevich
PDF
20131027 h10 lecture5_matiyasevich
PDF
20131027 h10 lecture5_matiyasevich
PDF
20131013 h10 lecture4_matiyasevich
PDF
20131006 h10 lecture3_matiyasevich
PDF
20131006 h10 lecture3_matiyasevich
20141223 kuznetsov distributed
Computer Vision
20140531 serebryany lecture01_fantastic_cpp_bugs
20140531 serebryany lecture02_find_scary_cpp_bugs
20140531 serebryany lecture01_fantastic_cpp_bugs
20140511 parallel programming_kalishenko_lecture12
20140427 parallel programming_zlobin_lecture11
20140420 parallel programming_kalishenko_lecture10
20140413 parallel programming_kalishenko_lecture09
20140329 graph drawing_dainiak_lecture02
20140329 graph drawing_dainiak_lecture01
20140310 parallel programming_kalishenko_lecture03-04
20140223-SuffixTrees-lecture01-03
20140216 parallel programming_kalishenko_lecture01
20131106 h10 lecture6_matiyasevich
20131027 h10 lecture5_matiyasevich
20131027 h10 lecture5_matiyasevich
20131013 h10 lecture4_matiyasevich
20131006 h10 lecture3_matiyasevich
20131006 h10 lecture3_matiyasevich

20111001 information retrieval raskovalov_lecture2

  • 1. Современные методы улучшения качества поиска Яндекс Den Raskovalov denplusplus@yandex-team.ru 1.10.2011
  • 2. Краткая история IR 1950: Боязнь научного отставания от СССР подстегивает работы по построению мехнизированных систем поиска, изобретению индекса цитирования 1975: Salton публикует свои основные работы (TF*IDF) 1992: Первый TREC ~2000: Индустриализация IR с широким распространением web'а и появлением поисковых машин 2003: РОМИП
  • 3. Состояние IR ● Не наука ● Близко не подошла к пониманию смысла текста ● Роль эвристики велика, как нигде ● Накоплено и развито некоторые техники: ● Морфология ● Машинное обучение ● Обработка огромных объемов косвенных данных (логи запросов -> синонимы)
  • 4. Как происходит поиск? ● Запрос токенизируется, к словам запроса применяется морфологический анализ, ищутся синонимы ● Из документов индекса отбираются те, которые с большой вероятностью отвечают на запрос ● Для отфильтрованных документов рассчитываются признаки (фичи) ● К признакам применяется формула, дающая конечную оценку релевантности
  • 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. Алгоритмы машинного обучения ● Метод ближайшего соседа ● SVM (попытка линейно разделить релевантное и нерелевантное) ● Жадный перебор полиномиальной формулы ● Очень хочется пользоваться градиентным спуском. Но как?
  • 23. Алгоритмы машинного обучения ● Проблема в том, что pFound недифференцируем. На помощь приходит модель Люка-Плакетта. ● После этого можно применять градиентный спуск. ● Полезный прием: bagging. ● Бустим много раз: используем жадность. ● В качестве базовых примитивов используем “кубики” малой размерности. ● Не забудем про регуляризацию.
  • 24. Алгоритмы машинного обучения ● В результате получаем MatrixNet. ● Ближайший аналог: TreeNet от господина Фридмана. ● В реальном мире нужно распараллелить на множество машин.
  • 25. Машинное обучение ● С помощью машинного обучения в Яндексе решается множество задач: ● Решение, что обходить ● Решение, что выкладывать ● Сниппеты ● Задачи производительности ● Детекция спама ● Решение о показе рекламы
  • 26. Что еще? ● Множество источников (новости, блоги, товары) ● Актуальность ● Свежесть ● Непорнушность ● Дубликаты ● Разнообразие интентов ● Спам ● Подавление спама