- •Аннотация
- •Введение
- •Понятие нечеткого поиска и
- •1.1 Четкий и нечеткий поиск: базовые различия
- •1.2 Типичные ошибки ввода данных
- •Области применения нечеткого поиска
- •2. Алгоритмы оценки схожести строк
- •2.1. Расстояние Левенштейна: первый математический метод
- •2.2 Модификация Дамерау-Левенштейна: учет перестановок
- •2.3 Фонетические алгоритмы: Soundex и Mataphone
- •2.4 Метод n-грамм и его роль в индексации
- •Практическое применение нечеткого поиска
- •Нечеткий поиск в поисковых системах
- •3.2 Использование в интернет магазинах и базах данных
- •3.3 Современные тенденции: нейросети и семантический поиск
- •Заключение
- •Список использованных источников
2.4 Метод n-грамм и его роль в индексации
Все рассмотренные выше алгоритмы (Левенштейн, Дамерау-Левенштейн, фонетические) объединяет одна серьезная проблема: для сравнения короткого запроса с длинной строкой в базе данных они требуют попарного сравнения. Если в базе миллион записей, то компьютер должен миллион раз вычислить расстояние. Это очень медленно.
Для решения этой проблемы был предложен метод n-грамм. Идея заключается в том, чтобы разбить каждое слово на короткие фрагменты фиксированной длины n. Чаще всего используются триграммы (n=3), реже — биграммы (n=2).
Рис. 4. Примеры n-грамм слов
Пример.
Возьмем слово «СОЛНЦЕ» и разобьем его на триграммы (перебираем окно из трех букв с шагом 1):
СОЛ
ОЛН
ЛНЦ
НЦЕ
Теперь проделаем то же самое со словом, которое пользователь ввел с ошибкой, например, «СОНЦЕ» (пропущена буква «Л»):
СОН
ОНЦ
НЦЕ
Сравним наборы триграмм. У двух слов есть одна общая триграмма — «НЦЕ». Чем больше общих триграмм, тем более похожи слова.
Математическое выражение. Степень схожести двух слов можно оценить с помощью коэффициента Жаккара:
где A и B - множества
n-грамм двух слов,
- количество общих n-грамм,
- общее количество уникальных n-грамм в
обоих словах. Значение коэффициента
находится между 0 (нет общих фрагментов)
и 1 (все фрагменты совпадают).
Главное преимущество метода n-грамм заключается в возможности предварительной индексации. Система заранее, еще до поступления запроса пользователя, составляет для каждого слова в базе список его n-грамм. Затем она строит инвертированный индекс: для каждой уникальной n-граммы (например, «СОЛ») хранится список всех слов, в которые эта n-грамма входит.
Когда пользователь вводит запрос, система:
Разбивает запрос на n-граммы.
Находит по индексу все слова, которые содержат хотя бы одну из этих n-грамм.
Вычисляет точное расстояние (например, Левенштейна) только для небольшого множества кандидатов.
Такой подход ускоряет работу в тысячи раз по сравнению с полным перебором.
Практическое применение нечеткого поиска
Любая технология ценна не сама по себе, а тем, как она используется в реальных системах. Нечеткий поиск - не исключение. То, что начиналось как абстрактная математическая задача, сегодня работает в поисковых системах, интернет-магазинах, банковских и медицинских базах данных, системах проверки орфографии и многих других местах. В данной главе рассматриваются конкретные примеры внедрения нечеткого поиска, анализируются сценарии использования, а также обсуждаются современные тенденции, связанные с применением нейросетей и семантического поиска.
Нечеткий поиск в поисковых системах
Самый известный и массовый пример использования нечеткого поиска - это веб-поисковики. Google, Яндекс, Bing обрабатывают миллиарды запросов ежедневно, и значительная часть этих запросов содержит орфографические ошибки. Если бы поисковые системы требовали точного совпадения, пользователи постоянно получали бы пустые результаты и быстро разочаровались бы в технологии.
Функция, которую сегодня знают все - «Возможно, вы имели в виду...» - является прямой реализацией нечеткого поиска. Когда пользователь вводит, например, «купить брытву», система быстро вычисляет, какие слова из ее словаря наиболее похожи на введенное. Найдя слово «бритву» с небольшим расстоянием Левенштейна, поисковик предлагает правильный вариант и одновременно выдает результаты по этому исправленному запросу.
Рис. 5. Функция «Возможно, вы искали…» в работе
Интересно, что современные поисковые системы не ограничиваются одним лишь расстоянием Левенштейна. Они учитывают:
частоту запросов - если очень много людей ошибаются одинаково, система запоминает эту ошибку как типичную;
контекст - слово «лук» может означать и овощ, и оружие, и нечеткий поиск учитывает окружающие слова;
язык пользователя - одна и та же опечатка по-разному интерпретируется для русского и английского языков.
Таким образом, нечеткий поиск в поисковых системах превратился из простого алгоритма сравнения строк в сложную систему, учитывающую поведение миллионов пользователей.
