Что такое шингл
Шингл (от англ. shingle — «черепица», «чешуйка») — это выбранная из текста подпоследовательность из нескольких идущих подряд слов, используемая для оценки степени его схожести с другими текстами. Длина этой подпоследовательности называется длиной шингла.
Проще говоря, мы берем текст и «нарезаем» его на пересекающиеся кусочки-фразы. Например, из предложения «Я опытный SEO-специалист и наставник» с длиной шингла в 4 слова можно выделить следующие шинглы:
- «Я опытный SEO-специалист и»
- «опытный SEO-специалист и наставник»
Именно эти «чешуйки» и являются основой для дальнейшего сравнения документов.
История алгоритма шинглов
Как и многие фундаментальные технологии интернета, этот алгоритм не появился из ниоткуда. Его история — это пример последовательного развития идеи.
Изначальную идею представил миру Уди Манбер (Udi Manber) в 1994 году. В своей работе "Finding Similar Files in a Large File System" он описал метод поиска похожих файлов, который лег в основу будущего алгоритма. Его подход уже тогда позволял находить нечёткие дубликаты эффективно.
Однако довести идею до логического завершения и дать ей современное имя смог Андрей Бродер (Andrei Broder) в 1997 году. Работая в поисковой системе AltaVista, он смог оптимизировать и адаптировать метод Манбера для гигантских объемов веб-документов. Именно Андрей Бродер в 1997 году дал алгоритму его текущее имя и представил систему, способную эффективно находить копии в сети.
Принцип работы алгоритма шинглов
Чтобы понять, как два текста сравниваются между собой, нужно рассмотреть весь процесс пошагово. Весь принцип алгоритма шинглов заключается в сравнении не самих текстов целиком, а их цифровых «отпечатков», полученных из множеств шинглов. Давайте разберем этот процесс.
Этап 1: Канонизация текста
Перед тем как разбивать текст на шинглы, его необходимо подготовить. Этот процесс называется канонизацией. Его цель — привести текст к единой, нормальной форме, чтобы избавиться от незначительных различий, которые не влияют на смысл.
Что включает в себя канонизация текста:
- Удаление стоп-слов: Текст очищается от предлогов, союзов, местоимений и других служебных частей речи («в», «на», «и», «как», «быть»). Они не несут уникальной смысловой нагрузки.
- Нормализация: Все слова приводятся к их начальной форме. Этот процесс известен как лемматизация. Например, слова «машиной», «машине», «машины» превратятся в «машина». Текст также можно приводить к одной форме: существительные — в именительный падеж и единственное число.
- Удаление знаков препинания и приведение всего текста к одному регистру (обычно нижнему).
После канонизации мы получаем «скелет» текста, состоящий только из значимых слов в их базовой форме. Это критически важный шаг для точного сравнения.
Этап 2: Разбиение на шинглы
Теперь канонизированный текст готов к нарезке. Мы должны разбивать текст на подпоследовательности, которые и называются шинглами. Для этого заранее определяется длина шингла, например, 5 слов.
Процесс происходит «внахлест», как скользящее окно. Возьмем очищенный текст: «алгоритм шингл поиск дубликат веб документ копия».
При длине шингла, равной 4, мы получим следующий набор:
- шингл 1: «алгоритм шингл поиск дубликат»
- шингл 2: «шингл поиск дубликат веб»
- шингл 3: «поиск дубликат веб документ»
- шингл 4: «дубликат веб документ копия»
Таким образом, из одного документа мы получаем уникальное множество шинглов.
Этап 3: Вычисление хэшей
Сравнивать длинные текстовые шинглы напрямую — ресурсозатратно. Чтобы ускорить процесс, для каждого шингла вычисляется его хэш — уникальное числовое значение. Вычисление хэшей шинглов превращает набор текстовых фрагментов в набор чисел (контрольных сумм).
Например, наши шинглы могут превратиться в такие хэши:
- «алгоритм шингл поиск дубликат» → 345678
- «шингл поиск дубликат веб» → 987654
- «поиск дубликат веб документ» → 123456
- «дубликат веб документ копия» → 789012
Теперь вместо четырех длинных строк у нас есть четыре коротких числа. Работать с ними компьютеру гораздо проще и быстрее.
Этап 4: Сравнение и определение схожести
Наконец, мы подходим к главному — сравнению двух документов. У нас есть два набора хэшей (по одному от каждого документа). Чтобы определить их схожесть, используется формула коэффициента Жаккара:
Схожесть (%) = (Размер пересечения множеств / Размер объединения множеств) * 100
Простыми словами:
- Пересечение — это количество одинаковых хэшей, которые есть в обоих документах.
- Объединение — это общее количество уникальных хэшей в обоих документах.
Пример:
Документ А имеет хэши: {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-специалисту глубокое видение того, как поисковик «смотрит» на контент и почему уникальность текста — это не просто формальное требование, а техническая необходимость.