2. КТО ЗДЕСЬ
• Зовут Андрей, резидент HL, 3 клона ;)
• Делал вебню, игры, поиск
• Знаю много страшных слов
• Вчера про “скорость” в целом
• Сейчас про “поиск” в целом
• Ничего нового, все украдено, explicit lyrics
3. О чем речь
• Не про Sphinx
• Не про Lucene
• Не про Yandex
• Не про Google
• Не про науку
• Не про рынок
• Обзор про технологию
4.
5. О чем речь 2.0
• Не про библиотеки бумажных книг
• Не про уголовный розыск
• Не про поиск отпечатков пальцев
• Не про скоростной выбор парных носков
• Не про поиск по картинкам
• Не про идентификацию песен и видео
• Про старый добрый тупой поиск по тексту
7. 4 условные стадии
• Сбор данных
– Например, web crawling, сканирование, итп
– Пропустим для ясности!!!
• Индексация
• Поиск
• Масштабирование
– Агрегация, репликация, HA, LB, итп
9. Как устроена индексация
• Экстракция текста
– PDF, HTML, … -> текст
• Токенизация
– Разваливаем текст на токены
• Морфологическая обработка
– Стемминг либо лемматизация, POS, WSD, …
• Создание инвертированного индекса
11. “Движок” за 15 минут
CREATE TABLE mysearchindex (
keyword VARCHAR(255) NOT NULL,
docid INTEGER NOT NULL,
UNIQUE(keyword, docid) );
/* а можно даже в MS Word! */
/* но есть нюанс… */
12.
13.
14. Чем слегка уступает наш “движок”?
• [+] Ключевые слова ведь найдены!!!
• [-] Эффективность?
• Память? Диск? Процессор
• [-] Ранжирование?
• [-] Сортировка?
• [-] Морфология?
• [-] Семантика?
• Не, не слышал
16. Чуть подробнее про индекс
• Словарь + списки документов + позиций
• Абыр => [ <123, {10,20,30…}> ]
• Валг => [ <123, {7,21,47…} ]
• …
17. Про эффективность
• Keyword + docid в базе = ?
– Все (!) копии слов по много (!) раз
– 4-8 байт на docid
– 4 байта на позицию
– Умножить на 2 с небольшим для индекса
• Итого = несколько раз от размера текста
• Особенно если с позициями итп POS
25. Как устроен запрос
• Matching = найти
• Ranking = отранжировать
• Разные требования
– Ad-hoc веб поиск
– Химера “поиска на естественном языке”
– Data mining, поиск по юридическим текстам
– Поиск на разных (!) языках
26. Matching
• Простая часть!!!
• По тексту – и не по текст
– … WHERE MATCH(‘new ways to think’)
– AND year BETWEEN 1950 AND 1970
• По тексту – операции над списками
• Где нет – либо тоже, либо по атрибутам
• Похоже на базу – но таки иначе
– Early termination, эффективный UNION/MINUS,
etc
27. Ranking
• Сложная часть
• Проблема в общем формально нерешаемая
• Но практически таки да ;)
• Человеческие оценки
• Без них, увы, никуда
• Метрики качества
• P, R, AP, MAP, NDCG, Bpref, ERR…)
28. Например, precision
• Запрос Sphinx
• Стоит в египте статуя Сфинкса …
• Sphinx Guns | Buy Online | Free Shipping!
• Задокументируй одноглазую змею | Sphinx
(url = http://sphinx.blablabla.com)
• А что вы знаете о бабочках-Сфинксах?
• Процент попаданий = precision
• Увы, не учитывается порядок
29. Например, average precision
• Давайте учтем порядок!
• Pos 1 = weight 0.5
• Pos 2 = weight 0.25
• Pos 3 = weight 0.125
• …
• NB: ЭТИ ВЕСА АБСОЛЮТНО НЕВЕРНЫ
• Давайте усредним кучу запросов!
• И вот… ЦЕЛЬ!