LINUX.ORG.RU

Как улучшить качество локального поиска?

 ,


0

2

Навеяло «поиском похожих тем», который выдает результаты десятилетней давности. Речь об улучшении ранжирования.

Если у кого-то есть примеры успешного тюнинга под конкретные задачи - буду рад готовым формулам и коэффициентам. Особо интересен опыт любителей posgress, т.к. там есть весьма могучие встроенные штуки, а я имел дело только со sphinx search.

А пока немного болтовни о том, что можно крутить.

===================

- исходим из того, что сайт тематический, т.к. в разных тематиках могут быть разные правила, стоп-слова, можно круто пролететь на омонимах, и т.п.
- у нас поиск по «произвольным» текстам, а не по каталогу музыки, лекарствам и т.п. Когда названия короткие и приколочены гвоздями, может хватить строгого совпадения фраз. Но на произвольных текстах это зафильтрует кучу полезного.
- в смысловой анализ фраз не лезем, т.к. нас интересует только то, что можно сделать своими силами. Чтобы «дёшево и сердито».

Базовый тюнинг

1. Стоп-слова. Это просто статистика по top 1000 словам из всей базы. В топе оказываются предлоги и т.п. Естественно, для каждого сайта она своя. В сфинксе есть готовая утилита для выгребания статистики. Смотрим результат (вдруг что-то спорное), прикидываем, с какого места начинается что-то осмысленное, а остальное льем в стоп-лист.

2. Морфология. Слова надо приводить к базовой форме. Если с английским прокатит программный стемминг, то на русском его использовать нельзя. Для русского надо так:

- приводим к базовой словоформе по словарю (словари есть), если слово не найдено - тогда программно.
- используем AOT (куча хитровыпуклых правил, в сфинксе уже поддерживается)

В принципе, тут больше особо не выжать.

Продвинутый тюнинг.

Для этого уже надо анализировать поисковые запросы. Особенно те, где нет результата или он подозрительно плохой. На самом деле посмотреть по диагонали список запросов за месяц не так сложно.

1. Строим словарь исключений. Например: самолет «ПО-2», язык «С++». Без списка исключений слова расценятся как предлоги или что-то еще, в общем результат будет фиговый. Но с учетом «тематичности» такое из логов запросов набирается очень быстро.

2. Строим словарь синонимов. Например «panasonic» = «панасоник» = «панас». «logitech» = «логитек» = «логитеч» = «лохотек». «js» = «javascript» Универсальных словарей не бывает, но под тематику строятся быстро. Главное не забивать на мониторинг запросов.

3. Поправляем стоп-слова под специфику. Например, здесь часто встречаются темы «Знатокам ХХХ» - есть смысл занести в стоп слово «знаток».

Навёрнутый тюнинг.

Дальше идет игра со всякими весовыми коэффициентами. Но проблема в том, что «на глаз» оценить результат невозможно. Поэтому нужно вручную строить эталонную базу, по которой считаются девиации. У себя до этого не дошел.

- составляем список запросов (из лога дергаем как высокочастотные, так и низкочастотные). Штук 100 хотя бы.
- для каждого запроса рисуем, какими ДОЛЖНЫ быть первые 3-10 результатов. Если сайт индексируется, то за эталон можно для начала взять гугль. Десяток добровольцев может быстро построить эталонные оценки на 1000 запросов - это достаточная выборка.
- пишем тулзу, которая для нашей формулы ранжирования посчитает корреляцию между эталонными позициями и реальными (или для двух разных формул ранжирования).

Когда есть база эталонных оценок и тулза для быстрого подсчета корреляций - можно крутить коэффициенты. Будет много случаев когда в одном месте улучшилось, а в десяти поехало, и вручную это не проверить ну совсем никак.

Что можно крутить:

1. Увеличить вес для заголовков
2. Увеличить вес для тем из того же раздела
3. Сделать «затухающую» поправку для старых тем

===================

Я так понимаю, что большинство до базы экспертных оценок не дошло, а кто дошёл - на этом сломался. Хотя инструмент по ведению базы выглядит универсальным. Если есть желающие объединить усилия - попробуйте ваши задачи описать.

Сам в ближайшие пол года тулзу делать не начну, но может с кого начальство на работе требует «срочно улучшить поиск». Дык я мог бы пока математики и практики подогнать. Пока получается так, что каждый «познает поиск с нуля», и останавливается на среднем уровне. IMHO, если объединиться и заопенсорситься - можно сделать добро в галлактических масштабах.

★★★★★

Делал поиск по сайту на pg+tsearch2, особо не заморачивался. pg умеет стоп-слова и морфологию из коробки, разный вес(динамически настраивается) для разных колонок. Исключения и синонимы тоже можно сделать.

http://disarmer.ru/info/_ed_conference_2012/ss_2.png

disarmer ★★★
()
Ответ на: комментарий от disarmer

Ну смысл в том, что «типа поиск» делают многие, но мало кто заморачивается с качеством всерьез. Ищу у кого кроме меня есть желание поковыряться. Или у кого уже есть наработки, к которым можно присоединиться.

Можно делать инструменты для составления эталонных выборок, можно шарить кастомные словари для терминов и синонимов, ... Много чего можно.

Vit ★★★★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.