Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Нечеткий поиск в информационных системах. Агеев ФФ-404.docx
Скачиваний:
1
Добавлен:
31.05.2026
Размер:
327.13 Кб
Скачать

2.4 Метод n-грамм и его роль в индексации

Все рассмотренные выше алгоритмы (Левенштейн, Дамерау-Левенштейн, фонетические) объединяет одна серьезная проблема: для сравнения короткого запроса с длинной строкой в базе данных они требуют попарного сравнения. Если в базе миллион записей, то компьютер должен миллион раз вычислить расстояние. Это очень медленно.

Для решения этой проблемы был предложен метод n-грамм. Идея заключается в том, чтобы разбить каждое слово на короткие фрагменты фиксированной длины n. Чаще всего используются триграммы (n=3), реже — биграммы (n=2).

Рис. 4. Примеры n-грамм слов

Пример.

Возьмем слово «СОЛНЦЕ» и разобьем его на триграммы (перебираем окно из трех букв с шагом 1):

  • СОЛ

  • ОЛН

  • ЛНЦ

  • НЦЕ

Теперь проделаем то же самое со словом, которое пользователь ввел с ошибкой, например, «СОНЦЕ» (пропущена буква «Л»):

  • СОН

  • ОНЦ

  • НЦЕ

Сравним наборы триграмм. У двух слов есть одна общая триграмма — «НЦЕ». Чем больше общих триграмм, тем более похожи слова.

Математическое выражение. Степень схожести двух слов можно оценить с помощью коэффициента Жаккара:

где A и B - множества n-грамм двух слов, - количество общих n-грамм, - общее количество уникальных n-грамм в обоих словах. Значение коэффициента находится между 0 (нет общих фрагментов) и 1 (все фрагменты совпадают).

Главное преимущество метода n-грамм заключается в возможности предварительной индексации. Система заранее, еще до поступления запроса пользователя, составляет для каждого слова в базе список его n-грамм. Затем она строит инвертированный индекс: для каждой уникальной n-граммы (например, «СОЛ») хранится список всех слов, в которые эта n-грамма входит.

Когда пользователь вводит запрос, система:

  1. Разбивает запрос на n-граммы.

  2. Находит по индексу все слова, которые содержат хотя бы одну из этих n-грамм.

  3. Вычисляет точное расстояние (например, Левенштейна) только для небольшого множества кандидатов.

Такой подход ускоряет работу в тысячи раз по сравнению с полным перебором.

  1. Практическое применение нечеткого поиска

Любая технология ценна не сама по себе, а тем, как она используется в реальных системах. Нечеткий поиск - не исключение. То, что начиналось как абстрактная математическая задача, сегодня работает в поисковых системах, интернет-магазинах, банковских и медицинских базах данных, системах проверки орфографии и многих других местах. В данной главе рассматриваются конкретные примеры внедрения нечеткого поиска, анализируются сценарии использования, а также обсуждаются современные тенденции, связанные с применением нейросетей и семантического поиска.

    1. Нечеткий поиск в поисковых системах

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

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

Рис. 5. Функция «Возможно, вы искали…» в работе

Интересно, что современные поисковые системы не ограничиваются одним лишь расстоянием Левенштейна. Они учитывают:

  • частоту запросов - если очень много людей ошибаются одинаково, система запоминает эту ошибку как типичную;

  • контекст - слово «лук» может означать и овощ, и оружие, и нечеткий поиск учитывает окружающие слова;

  • язык пользователя - одна и та же опечатка по-разному интерпретируется для русского и английского языков.

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