73
Про качественный поиск Андрей Аксенов, http://sphinxsearch.com/ #sphinxconf2011

Про качественный поиск (Андрей Аксенов)

  • Upload
    ontico

  • View
    2.045

  • Download
    0

Embed Size (px)

Citation preview

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

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

Андрей Аксенов, http://sphinxsearch.com/#sphinxconf2011

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

PARENTAL WARNING:ADULT CONTENT

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

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

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

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

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

• Из коробки получается не очень• Из коробки imho (imho!) и не может

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

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

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

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

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

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

Почему этот доклад• …с апреля по декабрь немного вырос…

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: Про качественный поиск (Андрей Аксенов)

…или даже

ОСКАР

Page 20: Про качественный поиск (Андрей Аксенов)

…или даже

ОСКАЛ

Page 21: Про качественный поиск (Андрей Аксенов)

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

Page 22: Про качественный поиск (Андрей Аксенов)

Нет никакой ложки!!!

Page 23: Про качественный поиск (Андрей Аксенов)

…и той Релевантности заветной – тоже.

Page 24: Про качественный поиск (Андрей Аксенов)

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

Page 25: Про качественный поиск (Андрей Аксенов)

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

Page 26: Про качественный поиск (Андрей Аксенов)

Как это устроено “сегодня”?

Page 27: Про качественный поиск (Андрей Аксенов)

Документ"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 28: Про качественный поиск (Андрей Аксенов)

Запрос"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 29: Про качественный поиск (Андрей Аксенов)

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

Page 30: Про качественный поиск (Андрей Аксенов)

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

PageRank DomainAge DocLength

IsSpam IsPorn HITSAuthority

NumIncomingLinks NumOutgoingLinks

WhateverOtherFactor1 WhateverOtherFactor2

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

Много больше

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

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

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

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

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

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

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

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

Метрики качества• Все начинается с оценок• Теплых, ламповых, человеческих

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

сравнивать разные отклики

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

Пример отклика 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 37: Про качественный поиск (Андрей Аксенов)

Пример отклика 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 38: Про качественный поиск (Андрей Аксенов)

Пример отклика 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 39: Про качественный поиск (Андрей Аксенов)

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

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

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

Счастье Пользователя

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

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

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

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

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

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

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

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

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

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

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

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

Что подвергается “регрессии”?• Оптимизируем – MAP, например• Известны – факторы, оценки• Найти – вид (!), коэффициенты Rel()

• Rel = a1f1 + a2f2 + … ?

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

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

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

Вид Идеальной ф-ии неизвестен

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

Ш.И. Поэтому – вид функции…

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

…тупо кусочно-линейный!!! (*)

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

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

Page 50: Про качественный поиск (Андрей Аксенов)

SEO bonus chatter

Page 51: Про качественный поиск (Андрей Аксенов)

[2/4] Встроенные ранкеры

Page 52: Про качественный поиск (Андрей Аксенов)

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

(пока еще) “плохо” в менее затейливых движках, особенно опен-сорсных

Page 53: Про качественный поиск (Андрей Аксенов)

Или…

Page 54: Про качественный поиск (Андрей Аксенов)

Текущий разрыв

Все остальные Веб-поиск

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

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

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

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

Page 55: Про качественный поиск (Андрей Аксенов)

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

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

Не все так страшно!!!• Lucene @ ROMIP

Page 57: Про качественный поиск (Андрей Аксенов)

Концепт «ранкера»• Тупо какая-то функция ранжирования• Тупо заранее (нами) встроенная в Sphinx• Можно выбирать на лету, 1 строкой• $client->SetRankingMode(SPH_RANK_BM25)• SELECT … OPTION ranker=bm25

• Осторожно, скользкая ступенька!• Через API только в режиме extended• $client->SetMatchMode(SPH_MATCH_EXTENDED)

Page 58: Про качественный поиск (Андрей Аксенов)

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

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

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

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

[3/4] Мега-фича: формулы на лету!

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

Expression ranker, 2.0.2-beta

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

1000+bm25')

Page 61: Про качественный поиск (Андрей Аксенов)

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

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

• Как я неоднократно повторял,Целых Два Фактора!!!

Page 62: Про качественный поиск (Андрей Аксенов)

Просто было в учении• Кучка новых факторов• 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 63: Про качественный поиск (Андрей Аксенов)

Просто было в учении• Field level обязательно агрегировать• Функция пока только SUM, но звоните

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

• Работает подозрительно быстро

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

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

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

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

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

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

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

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

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

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

фильтры)

Page 68: Про качественный поиск (Андрей Аксенов)

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

Page 69: Про качественный поиск (Андрей Аксенов)

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

KEYWORDS

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

Как бороться “тяжело”?• Морфология, синонимы – wordforms• Местами неудобно, местами не хватает per-

keyword слов, и т.п.

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

ручных правил, не избежать

Page 71: Про качественный поиск (Андрей Аксенов)

Итого

Page 72: Про качественный поиск (Андрей Аксенов)

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

• Почему ваш поиск до сих пор… так себе?!

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

Вопросы?(Качественные, пожалуйста! ;))