Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

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

2,767 views

Published on

  • Be the first to comment

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

  1. 1. Про качественный поиск Андрей Аксенов, http://sphinxsearch.com/ #sphinxconf2011
  2. 2. PARENTAL WARNING: ADULT CONTENT
  3. 3. [0/4] Зачем вообще это все?
  4. 4. Зачем этот доклад• Скорости растут => скорости… неважны • Ну, в жизни, а не синтетических бенчмарках• Людей-посетителей приучают к “плохому” • Google, Yandex, итп• Из коробки получается не очень• Из коробки imho (imho!) и не может получаться, надо по-разному тюнить• Ну и это просто интересная в целом тема!
  5. 5. Почему этот доклад• Коротенький блиц-доклад с РИТ ‘2011…
  6. 6. Почему этот доклад• Коротенький блиц-доклад с РИТ ‘2011…
  7. 7. Почему этот доклад• …с апреля по декабрь немного вырос…
  8. 8. [1/4] Что такоерелевантность
  9. 9. Релевантность, это -• Такой спец-термин из поиска• Такое большое человеческое заблуждение• Щаз будем заменять одно заблуждение набором других!• Возникает т.н. «релевантность» ровно в тот момент…
  10. 10. …когда кто-нибудь…
  11. 11. …где-нибудь…
  12. 12. …что-нибудь…
  13. 13. …ищет и, увы (*), находит(*) самый быстрый запрос – пустой!
  14. 14. И приходится их ранжировать!!!
  15. 15. Один случайный запрос, например ОСКАР
  16. 16. Оскар. И ЧО?
  17. 17. Оскар. И ЧО?
  18. 18. Оскар. И ЧО?
  19. 19. …или дажеОСКАР
  20. 20. …или дажеОСКАЛ
  21. 21. Внезапно, шокирующая истина!!!
  22. 22. Нет никакой ложки!!!
  23. 23. …и той Релевантности заветной – тоже.
  24. 24. “Красота – в глазах смотрящего.”
  25. 25. Но ранжировать все равно надо!
  26. 26. Как это устроено “сегодня”?
  27. 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."
  28. 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."
  29. 29. 1 (один) фактор, BM25
  30. 30. Факторов большеPageRank DomainAge DocLengthIsSpam IsPorn HITSAuthorityNumIncomingLinks NumOutgoingLinksWhateverOtherFactor1 WhateverOtherFactor2
  31. 31. Много больше
  32. 32. (btw, фактор == сигнал)
  33. 33. Что и зачем, таки, считаем?
  34. 34. Целевая функция• На входе – куча чиселок, факторов• На выходе – одно число• Rel = Rel(f1, f2, …, f200, …): RNumFactors  R• Ш.И.: но конкретные числа… неважны!• Ш.И.: важен… порядок документов
  35. 35. Метрики качества• Все начинается с оценок • Теплых, ламповых, человеческих• Оценивается всегда пара запрос+документ• Бинарные (0/1), “просто” числа, и т.п.• Для простоты, пусть будут тупо бинарные• Bсе это вводится, впрочем, чтобы как-то сравнивать разные отклики
  36. 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
  37. 37. Пример отклика 21. Great Sphinx of Giza - Wikipedia, the free encyclopedia2. Sphinx - Wikipedia, the free encyclopedia3. Sphinx | Open Source Search Server4. Overview - Sphinx 1.1.2 documentation
  38. 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
  39. 39. Метрики качества• Без учета порядка – Precision, Recall• С учетом порядка – Average Precision, AP • Или DCG, BPREF, pFound, и т.п.• Усредняем кучу запросов – Mean AP, MAP • Или средний DCG, BPREF, pFound, и т.п.• Все, теперь это наша заветная цель• Чем больше MAP => тем больше Среднее Счастье Пользователя 
  40. 40. Извилистый путь релевантности• Есть мега-функция Rel()• Есть куча документов• Есть куча запросов• Есть куча пользовательских оценок• Считаем Rel (по функции и факторам) => генерируем отклики (сортировка по Rel) => считаем MAP, DCG итп (по оценкам) => усредняем и сравниваем
  41. 41. Rel(D,Q) = Rel(f1, f2, …, f200, …)
  42. 42. Ш.И.: аналитически – невозможно
  43. 43. Поэтому – машинное обучение…
  44. 44. …считай – регрессия на стероидах.
  45. 45. Что подвергается “регрессии”?• Оптимизируем – MAP, например• Известны – факторы, оценки• Найти – вид (!), коэффициенты Rel() • Rel = a1f1 + a2f2 + … ? • Rel = a1exp(f1) + 1/(a2-f2) + … ? •…• См. аналитически невозможно, ага
  46. 46. Вид Идеальной ф-ии неизвестен
  47. 47. Ш.И. Поэтому – вид функции…
  48. 48. …тупо кусочно-линейный!!! (*)
  49. 49. Итого• Релевантность в мире веб-поиска?• Все начинается с оценок• Все оценки субъективные• Оценок и факторов на входе УУУ МНОГО• Рукой уже никак, машинное обучение• “Умная” “регрессия”, условно• На выходе – ну, какая-то мега-функция• Которая – максимизрует Метрику Счастья
  50. 50. SEO bonus chatter
  51. 51. [2/4] Встроенные ранкеры
  52. 52. Или…• Как все (теперь) “хорошо” в веб-поиске, и (пока еще) “плохо” в менее затейливых движках, особенно опен-сорсных 
  53. 53. Или…
  54. 54. Текущий разрывВсе остальные Веб-поиск1-10… факторов 100-1000+ факторов0 оценок? 1-10M+ оценокAd-hoc функции Специально(см. левая пятка) обученные функции (см. маш. обучение)
  55. 55. Не все так страшно!!!• Вы не Google!• А, скажем, сайт про запчасти для Белазов• Незначительно поменьше данных• Чуть пореже запросы• Отклики потоньше• Ad-hoc может приемлемо сработать
  56. 56. Не все так страшно!!!• Lucene @ ROMIP
  57. 57. Концепт «ранкера»• Тупо какая-то функция ранжирования• Тупо заранее (нами) встроенная в Sphinx• Можно выбирать на лету, 1 строкой • $client->SetRankingMode(SPH_RANK_BM25) • SELECT … OPTION ranker=bm25• Осторожно, скользкая ступенька! • Через API только в режиме extended • $client->SetMatchMode(SPH_MATCH_EXTENDED)
  58. 58. Какие встроенные ранкеры брать?• BM25 – грубо говоря, аналог Lucene• PROXIMITY_BM25 – бустит (под)фразы • Но не смотрит на частоты слов в подфразе• SPH04 – еще бустит начало поля, точное совпадения поля• Других встроенных ”про качество” пока нет• И, возможно, уже не будет…
  59. 59. [3/4] Мега-фича:формулы на лету!
  60. 60. Expression ranker, 2.0.2-betaSELECT *, WEIGHT() FROM myindexWHERE MATCH(hello world)OPTION ranker=expr(sum(lcs*user_weight) * 1000+bm25)
  61. 61. Да, настолько просто!• Пользоваться – вот так, буквально • Через API тоже можно• Дефолтная формула proximity_bm25 – вот такая, буквально • sum(lcs*user_weight) * 1000 + bm25• Как я неоднократно повторял, Целых Два Фактора!!!
  62. 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• Планируются (и нетяжело) делать еще
  63. 63. Просто было в учении• Field level обязательно агрегировать • Функция пока только SUM, но звоните• Доступны все атрибуты• Доступны все встроенные функции• Кажется, доступны UDF (не проверял)• Работает подозрительно быстро
  64. 64. Наш самый сложный ранкер• SPH_RANK_SPH04 = sum((4*lcs+2*(min_hit_pos==1)+exact_hit)* user_weight)*1000+bm25• Уверен, вы можете лучше :)• Тем более, что теперь все знаете все :)
  65. 65. [4/4] “Низколетящие фрукты”...
  66. 66. [4/4] …или, что еще можно сделать
  67. 67. Качество != ранжирование• Еще опечатки• Еще “занудность” поиска• Еще морфология• Еще синонимы, расширение запросов• Еще номера моделей, и т.п. вертикали• Еще анализ запросов (натягивание на фильтры)
  68. 68. Ш.И.: уже (давно) все это МОЖНО
  69. 69. Как бороться “легко”?• Опечатки? sphinx/misc/suggest/• Занудность? Оператор кворума• Анализ запросов? regexps, SHOW KEYWORDS
  70. 70. Как бороться “тяжело”?• Морфология, синонимы – wordforms • Местами неудобно, местами не хватает per- keyword слов, и т.п.• Номера моделей – препроцессинг, и-или танцы с blend_chars, stopword_step, и т.п. • Скорее всего все равно понадобится ряд ручных правил, не избежать
  71. 71. Итого
  72. 72. Итого• Вот как вообще устроена релевантность• Вот что уже встроено в Сфинкс• Вот как теперь бороть релевантность• Вот какие еще есть беды с качеством• Вот как можно их тоже забарывать• Почему ваш поиск до сих пор… так себе?!
  73. 73. Вопросы?(Качественные, пожалуйста! ;))

×