35
Как устроен поиск Андрей Аксенов, Sphinx

Как устроен поиск (Андрей Аксёнов)

  • Upload
    ontico

  • View
    2.528

  • Download
    1

Embed Size (px)

Citation preview

Page 1: Как устроен поиск (Андрей Аксёнов)

Как устроен поиск

Андрей Аксенов, Sphinx

Page 2: Как устроен поиск (Андрей Аксёнов)

КТО ЗДЕСЬ

• Зовут Андрей, резидент HL, 3 клона ;)• Делал вебню, игры, поиск• Знаю много страшных слов

• Вчера про “скорость” в целом• Сейчас про “поиск” в целом• Ничего нового, все украдено, explicit lyrics

Page 3: Как устроен поиск (Андрей Аксёнов)

О чем речь

• Не про Sphinx• Не про Lucene• Не про Yandex• Не про Google• Не про науку• Не про рынок• Обзор про технологию

Page 4: Как устроен поиск (Андрей Аксёнов)
Page 5: Как устроен поиск (Андрей Аксёнов)

О чем речь 2.0

• Не про библиотеки бумажных книг• Не про уголовный розыск• Не про поиск отпечатков пальцев• Не про скоростной выбор парных носков• Не про поиск по картинкам• Не про идентификацию песен и видео• Про старый добрый тупой поиск по тексту

Page 6: Как устроен поиск (Андрей Аксёнов)

“Часть” 0Как оно в целом

Page 7: Как устроен поиск (Андрей Аксёнов)

4 условные стадии

• Сбор данных– Например, web crawling, сканирование, итп– Пропустим для ясности!!!

• Индексация• Поиск• Масштабирование– Агрегация, репликация, HA, LB, итп

Page 8: Как устроен поиск (Андрей Аксёнов)

Часть 1Индексация

Page 9: Как устроен поиск (Андрей Аксёнов)

Как устроена индексация

• Экстракция текста– PDF, HTML, … -> текст

• Токенизация– Разваливаем текст на токены

• Морфологическая обработка– Стемминг либо лемматизация, POS, WSD, …

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

Page 10: Как устроен поиск (Андрей Аксёнов)

Как устроен индекс

Page 11: Как устроен поиск (Андрей Аксёнов)

“Движок” за 15 минут

CREATE TABLE mysearchindex (keyword VARCHAR(255) NOT

NULL,docid INTEGER NOT NULL,UNIQUE(keyword, docid) );

/* а можно даже в MS Word! *//* но есть нюанс… */

Page 12: Как устроен поиск (Андрей Аксёнов)
Page 13: Как устроен поиск (Андрей Аксёнов)
Page 14: Как устроен поиск (Андрей Аксёнов)

Чем слегка уступает наш “движок”?

• [+] Ключевые слова ведь найдены!!!• [-] Эффективность?• Память? Диск? Процессор

• [-] Ранжирование?• [-] Сортировка?• [-] Морфология?• [-] Семантика?

• Не, не слышал

Page 15: Как устроен поиск (Андрей Аксёнов)

Чуть подробнее про индекс

• Словарь + списки документов

• Абыр => [ 123 ]• Валг => [ 123 ]• Васечкин => [ 7, 40, 42, 1917, 2012, … ]• Вася => [ 3, 15, 40, 2012, … ]• Петров => [ 2, 3, 5, 8, 13, … ]• Петя => [ 2, 4, 8, 16, … ]

Page 16: Как устроен поиск (Андрей Аксёнов)

Чуть подробнее про индекс

• Словарь + списки документов + позиций

• Абыр => [ <123, {10,20,30…}> ]• Валг => [ <123, {7,21,47…} ]• …

Page 17: Как устроен поиск (Андрей Аксёнов)

Про эффективность

• Keyword + docid в базе = ?– Все (!) копии слов по много (!) раз– 4-8 байт на docid– 4 байта на позицию– Умножить на 2 с небольшим для индекса

• Итого = несколько раз от размера текста• Особенно если с позициями итп POS

Page 18: Как устроен поиск (Андрей Аксёнов)

Как быть!

• Сортировка и сжатие!

• Абыр => [ 123 ]• Валг => [ 123 ]• Васечкин => [ 7, 40, 42, 1917, 2012, … ]• Вася => [ 3, 15, 40, 2012, … ]• Петров => [ 2, 3, 5, 8, 13, … ]• Петя => [ 2, 4, 8, 16, … ]

Page 19: Как устроен поиск (Андрей Аксёнов)

Дельты

• Васечкин => [ 7, 40, 42, 1917, 2012, … ]– vs

• Васечкин => [ 7, 33, 2, 1875, 95, … ]• Ммм, а толку?

Page 20: Как устроен поиск (Андрей Аксёнов)

Дельты суем в какой-нибудь код

• Битовый– Хаффман, Элиас, Голомб, арифметика, итп

• Байтовый– Varint

• Блочный– Group Varint, S9, S16, PFD

Page 21: Как устроен поиск (Андрей Аксёнов)

Дельты суем в какой-нибудь код

• Битовый– Хаффман, Элиас, Голомб, арифметика, итп

• Байтовый– Varint

• Блочный– Group Varint, S9, S16, PFD

Page 22: Как устроен поиск (Андрей Аксёнов)

“Наглядный” “скриншот”

• Varint– 1 0001001– 1 1001101– 0 0010110

• Group Varint– Первый байт: 00 01 11 00 = длины (1, 2, 4, 2)– Далее: собственно данные

Page 23: Как устроен поиск (Андрей Аксёнов)

И еще куча фарша поверх…

• POS, морфология, итд итп• “Ставь точку” ;)

Page 24: Как устроен поиск (Андрей Аксёнов)

Часть 2Поиск

Page 25: Как устроен поиск (Андрей Аксёнов)

Как устроен запрос

• Matching = найти• Ranking = отранжировать

• Разные требования– Ad-hoc веб поиск– Химера “поиска на естественном языке”– Data mining, поиск по юридическим текстам– Поиск на разных (!) языках

Page 26: Как устроен поиск (Андрей Аксёнов)

Matching

• Простая часть!!!• По тексту – и не по текст– … WHERE MATCH(‘new ways to think’)– AND year BETWEEN 1950 AND 1970

• По тексту – операции над списками• Где нет – либо тоже, либо по атрибутам• Похоже на базу – но таки иначе– Early termination, эффективный UNION/MINUS,

etc

Page 27: Как устроен поиск (Андрей Аксёнов)

Ranking

• Сложная часть• Проблема в общем формально нерешаемая• Но практически таки да ;)

• Человеческие оценки• Без них, увы, никуда

• Метрики качества• P, R, AP, MAP, NDCG, Bpref, ERR…)

Page 28: Как устроен поиск (Андрей Аксёнов)

Например, precision

• Запрос Sphinx• Стоит в египте статуя Сфинкса …• Sphinx Guns | Buy Online | Free Shipping!• Задокументируй одноглазую змею | Sphinx

(url = http://sphinx.blablabla.com)• А что вы знаете о бабочках-Сфинксах?

• Процент попаданий = precision• Увы, не учитывается порядок

Page 29: Как устроен поиск (Андрей Аксёнов)

Например, average precision

• Давайте учтем порядок!• Pos 1 = weight 0.5• Pos 2 = weight 0.25• Pos 3 = weight 0.125• …• NB: ЭТИ ВЕСА АБСОЛЮТНО НЕВЕРНЫ

• Давайте усредним кучу запросов!• И вот… ЦЕЛЬ!

Page 30: Как устроен поиск (Андрей Аксёнов)

Ranking

• Сигналы• Текстовые, внетекстовые• Статические, динамические

• Простые формулы• TF*IDF• BM25 = BM25 ( TF, IDF, DocLength )

• Сложные формулы и машинное обучение

Page 31: Как устроен поиск (Андрей Аксёнов)

Часть 3Масштабирование

Page 32: Как устроен поиск (Андрей Аксёнов)

Слайда нет

• Извините, 10 утра

• Google = ~1,000,000 машин• Yandex = ~10,000 машин• Craigslist = ~30 машин• Мой хомячок = ~0.1 машины

Page 33: Как устроен поиск (Андрей Аксёнов)

Это все. А теперь…

Page 34: Как устроен поиск (Андрей Аксёнов)
Page 35: Как устроен поиск (Андрей Аксёнов)

Вопросы?

[email protected]