Что такое шингл

Шингл (от англ. shingle — «черепица», «чешуйка») — это выбранная из текста подпоследовательность из нескольких идущих подряд слов, используемая для оценки степени его схожести с другими текстами. Длина этой подпоследовательности называется длиной шингла.

Проще говоря, мы берем текст и «нарезаем» его на пересекающиеся кусочки-фразы. Например, из предложения «Я опытный SEO-специалист и наставник» с длиной шингла в 4 слова можно выделить следующие шинглы:

  • «Я опытный SEO-специалист и»
  • «опытный SEO-специалист и наставник»

Именно эти «чешуйки» и являются основой для дальнейшего сравнения документов.

История алгоритма шинглов

Как и многие фундаментальные технологии интернета, этот алгоритм не появился из ниоткуда. Его история — это пример последовательного развития идеи.

Изначальную идею представил миру Уди Манбер (Udi Manber) в 1994 году. В своей работе "Finding Similar Files in a Large File System" он описал метод поиска похожих файлов, который лег в основу будущего алгоритма. Его подход уже тогда позволял находить нечёткие дубликаты эффективно.

Однако довести идею до логического завершения и дать ей современное имя смог Андрей Бродер (Andrei Broder) в 1997 году. Работая в поисковой системе AltaVista, он смог оптимизировать и адаптировать метод Манбера для гигантских объемов веб-документов. Именно Андрей Бродер в 1997 году дал алгоритму его текущее имя и представил систему, способную эффективно находить копии в сети.

Принцип работы алгоритма шинглов

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

Этап 1: Канонизация текста

Перед тем как разбивать текст на шинглы, его необходимо подготовить. Этот процесс называется канонизацией. Его цель — привести текст к единой, нормальной форме, чтобы избавиться от незначительных различий, которые не влияют на смысл.

Что включает в себя канонизация текста:

  1. Удаление стоп-слов: Текст очищается от предлогов, союзов, местоимений и других служебных частей речи («в», «на», «и», «как», «быть»). Они не несут уникальной смысловой нагрузки.
  2. Нормализация: Все слова приводятся к их начальной форме. Этот процесс известен как лемматизация. Например, слова «машиной», «машине», «машины» превратятся в «машина». Текст также можно приводить к одной форме: существительные — в именительный падеж и единственное число.
  3. Удаление знаков препинания и приведение всего текста к одному регистру (обычно нижнему).

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

Этап 2: Разбиение на шинглы

Теперь канонизированный текст готов к нарезке. Мы должны разбивать текст на подпоследовательности, которые и называются шинглами. Для этого заранее определяется длина шингла, например, 5 слов.

Процесс происходит «внахлест», как скользящее окно. Возьмем очищенный текст: «алгоритм шингл поиск дубликат веб документ копия».

При длине шингла, равной 4, мы получим следующий набор:

  • шингл 1: «алгоритм шингл поиск дубликат»
  • шингл 2: «шингл поиск дубликат веб»
  • шингл 3: «поиск дубликат веб документ»
  • шингл 4: «дубликат веб документ копия»

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

Этап 3: Вычисление хэшей

Сравнивать длинные текстовые шинглы напрямую — ресурсозатратно. Чтобы ускорить процесс, для каждого шингла вычисляется его хэш — уникальное числовое значение. Вычисление хэшей шинглов превращает набор текстовых фрагментов в набор чисел (контрольных сумм).

Например, наши шинглы могут превратиться в такие хэши:

  • «алгоритм шингл поиск дубликат» → 345678
  • «шингл поиск дубликат веб» → 987654
  • «поиск дубликат веб документ» → 123456
  • «дубликат веб документ копия» → 789012

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

Этап 4: Сравнение и определение схожести

Наконец, мы подходим к главному — сравнению двух документов. У нас есть два набора хэшей (по одному от каждого документа). Чтобы определить их схожесть, используется формула коэффициента Жаккара:

Схожесть (%) = (Размер пересечения множеств / Размер объединения множеств) * 100

Простыми словами:

  1. Пересечение — это количество одинаковых хэшей, которые есть в обоих документах.
  2. Объединение — это общее количество уникальных хэшей в обоих документах.

Пример:
Документ А имеет хэши: {10, 20, 30, 40}
Документ Б имеет хэши: {30, 40, 50, 60}

  • Одинаковые хэши (пересечение): {30, 40}. Их количество — 2.
  • Все уникальные хэши (объединение): {10, 20, 30, 40, 50, 60}. Их количество — 6.
  • Схожесть = (2 / 6) * 100 ≈ 33.3%

Поисковые системы устанавливают пороговое значение. Если процент схожести выше этого порога (например, 80%), документы считаются дубликатами или очень похожими.

Параметры алгоритма: длина шингла

Ключевой параметр, который влияет на результат — это длина шингла. В моей практике стандартные значения варьируются от 4 до 10 слов. Выбор зависит от задачи.

Длина шингла Преимущества Недостатки
Короткая (3-4 слова) Высокая чувствительность. Хорошо находит даже сильно переписанные тексты (рерайт), где сохранены отдельные фразы. Может давать ложные срабатывания на текстах разной тематики, где случайно совпали устойчивые выражения.
Длинная (8-10 слов) Высокая точность. Отлично находит полные или частичные копии (копипаст). Меньше ложных срабатываний. Может пропустить качественный рерайт, где все предложения были перефразированы и длинные совпадения отсутствуют.

Поисковые системы, скорее всего, используют несколько итераций с разной длиной шингла для комплексной оценки.

Применение в SEO и за его пределами

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

  • SEO: Основная задача — определение нечётких дубликатов веб-документов. Поисковые системы используют его для борьбы с плагиатом, фильтрации аффилиатов и склеивания зеркал сайтов.
  • Проверка на плагиат: Сервисы проверки уникальности текстов работают по схожему принципу, сравнивая загруженный документ с огромной базой текстов из интернета.
  • Кластеризация документов: Алгоритм помогает группировать большие объемы новостей, научных статей или отзывов по схожести их содержания.
  • Языковые модели: В более широком смысле, идеи n-грамм (которыми по сути и являются шинглы) используются в построении языковых моделей для задач от машинного перевода до генерации текста.

Проблемы и ограничения

Несмотря на свою эффективность, у классического алгоритма есть и слабые места. Главная проблема алгоритма заключается в количестве сравнений.

Представьте, что вам нужно сравнить 10 000 документов. Чтобы найти все дубликаты, нужно сравнить каждый документ с каждым. Это приводит к экспоненциальному росту количества операций, что критически отражается на производительности.

Для решения этой проблемы были разработаны более продвинутые методы, например, использующие технологию LSH (Locality-Sensitive Hashing), которые позволяют быстро находить «кандидатов» для сравнения, а не проверять все пары подряд. Однако базовый принцип алгоритма шинглов остается фундаментальным.

Заключение

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

Понимание его принципов работы дает SEO-специалисту глубокое видение того, как поисковик «смотрит» на контент и почему уникальность текста — это не просто формальное требование, а техническая необходимость.