92
Про качественный поиск Андрей Аксенов, Sphinx Technologies Inc

Про качественный поиск

Embed Size (px)

DESCRIPTION

Доклад "Про качественный поиск", версия с РИТ 2012 в Москве. Немного отцензурированная версия слайдов. ;)

Citation preview

Page 1: Про качественный поиск

Про качественный поиск

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

Page 2: Про качественный поиск

PARENTAL WARNINGADULT CONTENT

Page 3: Про качественный поиск

[0/4] Зачем это все?

Page 4: Про качественный поиск

Зачем этот доклад?• Скорости растут => скорости… неважны

• Ну, в жизни, а не синтетических бенчмарках

• Людей-посетителей приучают к “плохому”• Google, Yandex, итп

• Из коробки получается не очень• Из коробки не может получаться, надо по-разному тюнить• Ну и это просто интересная в целом тема!

Page 5: Про качественный поиск

Почему этот доклад?• Коротенький блиц-доклад с РИТ ‘2011…

Page 6: Про качественный поиск

Почему этот доклад?• Коротенький блиц-доклад с РИТ ‘2011…

Page 7: Про качественный поиск

Почему этот доклад?• Коротенький блиц-доклад с РИТ ‘2011…• …за год успел вырасти!

Page 8: Про качественный поиск

[1/4] Что такое релевантность

Page 9: Про качественный поиск

Релевантность, это –• Такой спец-термин из поиска• Такое большое человеческое заблуждение• Щаз будем заменять одно заблуждение набором

других!• Возникает т.н. «релевантность» ровно в тот

момент…

Page 10: Про качественный поиск

…когда кто-нибудь…

Page 11: Про качественный поиск

…где-нибудь…

Page 12: Про качественный поиск

…что-нибудь…

Page 13: Про качественный поиск

…ищет и, увы (*),находит

Page 14: Про качественный поиск
Page 15: Про качественный поиск

…ищет и, увы (*),

находит

*) – самый быстрый запрос – пустой!!!

Page 16: Про качественный поиск

…и приходится ранжировать

Page 17: Про качественный поиск
Page 18: Про качественный поиск

Один Случайный Запрос

Page 19: Про качественный поиск

[battleship]

Page 20: Про качественный поиск
Page 21: Про качественный поиск
Page 22: Про качественный поиск

Правила игры“Морской бой”?

Page 23: Про качественный поиск
Page 24: Про качественный поиск

[battle sheep]?

Page 25: Про качественный поиск
Page 26: Про качественный поиск

Внезапно, шокирующая истина!!!

Page 27: Про качественный поиск
Page 28: Про качественный поиск

“Нет никакой ложки”

Page 29: Про качественный поиск
Page 30: Про качественный поиск

И никакой “релевантности” – тоже нет

Page 31: Про качественный поиск

“Красота – в глазах смотрящего.”

Page 32: Про качественный поиск

Но ранжировать таки надо!!!

Page 33: Про качественный поиск

Как же это таки устроено?

Page 34: Про качественный поиск

Документ"The time has come," the Walrus said,"To talk of many things:Of shoes, and ships, and sealing-wax,Of cabbages, and kings,And why the sea is boiling hot-And whether pigs have wings."

Page 35: Про качественный поиск

Запрос"The time has come," the Walrus said,"To talk of many things:Of shoes, and ships, and sealing-wax,Of cabbages, and kings,And why the sea is boiling hot-And whether pigs have wings."

Page 36: Про качественный поиск

1 (один) фактор, BM25

Page 37: Про качественный поиск

Факторов больше

PageRank DomainAge DocLength

IsSpam IsPorn HITSAuthority

NumIncomingLinks NumOutgoingLinks

WhateverOtherFactor1 WhateverOtherFactor2

Page 38: Про качественный поиск

И даже еще больше

Page 39: Про качественный поиск

(btw, фактор == сигнал)

Page 40: Про качественный поиск

Что и зачем, таки, считаем?

Page 41: Про качественный поиск

Целевая функция• На входе – куча чиселок, факторов• На выходе – одно число• Rel = Rel(f1, f2, …, f200, …): RNumFactors R

• Ш.И.: но конкретные числа… неважны!• Ш.И.: важен… порядок документов

Page 42: Про качественный поиск

Метрики качества• Все начинается с оценок

• Теплых, ламповых, человеческих

• Оценивается всегда пара запрос+документ• Бинарные (0/1), “просто” числа, и т.п.• Для простоты, пусть будут тупо бинарные• Bсе это вводится, впрочем, чтобы как-то сравнивать

разные отклики

Page 43: Про качественный поиск

Пример отклика 11. Sphinx | Open Source Search Server2. Sphinx - Wikipedia, the free encyclopedia3. Great Sphinx of Giza - Wikipedia, the free encyclopedia4. Overview - Sphinx 1.1.2 documentation

Page 44: Про качественный поиск

Пример отклика 21. Great Sphinx of Giza - Wikipedia, the free encyclopedia 2. Sphinx - Wikipedia, the free encyclopedia3. Sphinx | Open Source Search Server4. Overview - Sphinx 1.1.2 documentation

Page 45: Про качественный поиск

Пример отклика 31. Sphinx - Wikipedia, the free encyclopedia2. Sphinx | Open Source Search Server3. Overview - Sphinx 1.1.2 documentation4. Great Sphinx of Giza - Wikipedia, the free encyclopedia

Page 46: Про качественный поиск

Метрики качества• Без учета порядка – Precision, Recall• С учетом порядка – Average Precision, AP

• Или DCG, BPREF, pFound, и т.п.

• Усредняем кучу запросов – Mean AP, MAP• Или средний DCG, BPREF, pFound, и т.п.

• Все, теперь это наша заветная цель• Чем больше, например MAP

=> тем больше Среднее Счастье Пользователя

Page 47: Про качественный поиск

Извилистый путь релевантности• Есть мега-функция Rel()

• Есть куча документов

• Есть куча запросов

• Есть куча пользовательских оценок

• Считаем Rel (по функции и факторам)=> генерируем отклики (сортировка по Rel)

=> считаем MAP, DCG итп (по оценкам)=> усредняем и сравниваем

Page 48: Про качественный поиск

Rel(D,Q) = Rel(f1, f2, …, f200, …)

Page 49: Про качественный поиск

Ш.И.: аналитически – невозможно

Page 50: Про качественный поиск
Page 51: Про качественный поиск

Поэтому – машинное обучение…

Page 52: Про качественный поиск
Page 53: Про качественный поиск

…считай – регрессия,на вагоне стероидов.

Page 54: Про качественный поиск
Page 55: Про качественный поиск

Что подвергается “регрессии”?• Оптимизируем – MAP, например

• Известны – факторы, оценки

• Найти – вид (!), коэффициенты Rel()

• Rel = a1f1 + a2f2 + … ?

• Rel = a1exp(f1) + 1/(a2-f2) + … ?

• …

• См. аналитически невозможно, ага

Page 56: Про качественный поиск

Засада!!! Вид идеальной функции – неизвестен

Page 57: Про качественный поиск
Page 58: Про качественный поиск

Ш.И. – поэтому, вид функции типично берем...

Page 59: Про качественный поиск

Тупо кусочно-линейный!!!

Page 60: Про качественный поиск

Я ненавижу математику!

Page 61: Про качественный поиск
Page 62: Про качественный поиск

Зачем мне этот хардкор?!

Page 63: Про качественный поиск

Метрикам – да, ML – тоже да!!!• Если хочется качества, знать таки нужно• Проверять качество вручную нереально

• Быстрая, но болезненная смерть

• Подгонять формулы вручную таки можно!• Мелкие уж точно, да и Google врет

• Но почему не опробовать готовый мат/статпакет?

Page 64: Про качественный поиск

“Итоги подведем” (с) Гамлет• Релевантность в мире веб-поиска?• Все начинается с оценок, и все оценки субъективные• Оценок и факторов на входе УУУ МНОГО

• Рукой уже никак, обязательно машинное обучение• Обучение == “умная” “регрессия”, условно

• На выходе – ну, какая-то мега-функция• Которая – максимизирует Метрику Счастья

Page 65: Про качественный поиск

“Итоги подведем” (с) Гамлет• Релевантность в мире веб-поиска для простых людей?• Все начинается с оценок, и все оценки субъективные• Оценок и факторов на входе УУУ МНОГО МАЛО

• Формулу рукой еще можно, но можно и машинное обучение• А вот проверять метрики сразу автоматом, но это просто!

• На выходе – ну, какая-то мега-функция• Которая – максимизирует Метрику Счастья

Page 66: Про качественный поиск

[2/4] Sphinx, ранкеры

Page 67: Про качественный поиск

Или…• Как все (теперь) “хорошо” в веб-поиске• Как все (пока еще) “плохо” в менее

затейливых движках• особенно опен-сорсных

Page 68: Про качественный поиск
Page 69: Про качественный поиск

“Не было ни единого разрыва!”Все остальные Веб-поиск

1-10… факторов 100-1000+ факторов

0 оценок? 1-10M+ оценок

Ad-hoc функции(см. левая пятка)

Специально обученные функции(см. маш. обучение)

Page 70: Про качественный поиск

Не все так плохо!• Вы не Google!• А, скажем, сайт про запчасти для Белазов• Незначительно поменьше данных• Чуть пореже запросы• Отклики потоньше• Ad-hoc может приемлемо сработать

Page 71: Про качественный поиск
Page 72: Про качественный поиск

Vanilla (!) Lucene @ ROMIP

Page 73: Про качественный поиск

Как это делает Sphinx• Ранкер: какая-то функция ранжирования• Только харкод: заранее встроенная в Sphinx• Можно выбирать на лету, 1 строкой

• $client->SetRankingMode(SPH_RANK_BM25)• SELECT … OPTION ranker=bm25

Page 74: Про качественный поиск

Осторожно, скользкая ступенька!• $client->SetRankingMode(SPH_RANK_BM25)

• Через API только в режиме extended• $client->SetMatchMode(SPH_MATCH_EXTENDED)

Page 75: Про качественный поиск

Кого хотеть?• BM25 – грубо говоря, аналог Lucene• PROXIMITY_BM25 – бустит (под)фразы

• Но однако не смотрит на частоты слов в подфразе

• SPH04 – еще бустит начало поля, точное совпадения поля

• Других встроенных ”про качество” пока нет• И, возможно, уже (почти) не будет…

Page 76: Про качественный поиск

[3/4] Sphinx, expression ranker

Page 77: Про качественный поиск

Expression ranker, 2.0.2+

SELECT *, WEIGHT() FROM myindexWHERE MATCH('hello world')OPTION ranker=expr('sum(lcs*user_weight) *

1000+bm25')

Page 78: Про качественный поиск

Expression ranker, 2.0.2+

SELECT *, WEIGHT() FROM myindexWHERE MATCH('hello world')OPTION ranker=expr('sum(lcs*user_weight) *

1000+bm25')

Page 79: Про качественный поиск

Да, настолько просто!• Пользоваться – вот так, буквально

• Через API тоже можно

• Дефолтная формула proximity_bm25– вот такая, буквально• sum(lcs*user_weight) * 1000 + bm25

• Как я раньше и говорил, Целых Два Фактора!!!

Page 80: Про качественный поиск

Просто было в учении• Кучка новых факторов• Document Level:

• bm25, max_lcs, query_word_count, doc_word_count

• Field Level:• lcs, user_weight, hit_count, word_count, tf_idf, min_hit_pos,

min_best_span_pos, exact_hit

• Планируются (и нетяжело) делать еще – звоните

Page 81: Про качественный поиск

Просто было в учении• Field level обязательно агрегировать

• Функция пока только SUM, но звоните

• Доступны все атрибуты документа• Доступны все встроенные математические функции• Кажется, доступны UDF (не проверял)• Работает подозрительно быстро

Page 82: Про качественный поиск

Наш самый сложный ранкер• SPH_RANK_SPH04 =

sum((4*lcs+2*(min_hit_pos==1)+exact_hit)*user_weight)*1000+bm25

• Уверен, вы можете лучше :)• Тем более, что теперь все знаете всё :)

Page 83: Про качественный поиск

[4/4] “Низколетящие фрукты”...

Page 84: Про качественный поиск

[4/4] …или, что еще можно сделать

Page 85: Про качественный поиск

Качество != ранжирование• Еще опечатки• Еще “занудность” поиска• Еще морфология• Еще синонимы, расширение запросов• Еще номера моделей, и т.п. вертикали• Еще анализ запросов (натягивание на фильтры)

Page 86: Про качественный поиск

Ш.И.: уже (давно) МОЖНО

Page 87: Про качественный поиск

Как бороться “легко”?• Опечатки? sphinx/misc/suggest/• Занудность? Оператор кворума• Анализ запросов? regexps, SHOW KEYWORDS

Page 88: Про качественный поиск

Как бороться “тяжело”?• Морфология, синонимы – wordforms, stemmer,

expansions, index_exact_words• Местами неудобно, но таки можно

• Номера моделей – препроцессинг, и-или танцы с blend_chars, stopword_step, и т.п.• Нужен ряд ручных правил под предметку, не избежать

Page 89: Про качественный поиск

Качество != ранжирование• Еще опечатки• Еще “занудность” поиска• Еще морфология• Еще синонимы, расширение запросов• Еще номера моделей, и т.п. вертикали• Еще анализ запросов (натягивание на фильтры)

Page 90: Про качественный поиск

Итого

Page 91: Про качественный поиск

Итого• Вот как устроена релевантность – вообще• Вот что уже встроено – конкретно в Сфинкс• Вот как теперь бороть релевантность – у нас• Вот какие еще есть беды с качеством – вообще• Вот как можно их тоже забарывать – в целом• Почему ваш поиск до сих пор… так себе?!

Page 92: Про качественный поиск

Вопросы?

[email protected]