Уникальность контента: шинглы и честность
В прошлых выпусках рассылки мы уже обсуждали контент: и с точки зрения защиты от копирования, и с точки зрениясоздания с нуля. Если говорить о продвигаемых сайтах, то альтернатив полностью оригинальному контенту нет – что, кстати, не исключает рерайта. Например, если речь идет о продаже товаров не собственного производства, то даже добросовестный копирайтер при создании описаний для сайта будет пользоваться информацией из официального каталога производителя. Поэтому рерайт бывает «белым», и далеко не всегда полностью оригинальное описание iPad 2, порожденное исключительно воспаленным воображением автора, ни разу не державшего его в руках, будет лучше качественного, глубокого рерайта информации с сайта Apple. Скажем прямо, он будет хуже – «водянистее» и глупее. Итак, оригинальный контент не всегда выдумыва ется из головы. Тем не менее, он должен быть модифицирован с точки зрения формы настолько, чтобы поисковики посчитали его уникальным.
Сформулируем все это более кратко:
- Для успешного продвижения сайта весь открытый для индексации контент должен быть уникальным с точки зрения поисковых систем;
- На сайтах, обязанных обеспечить конверсию посетителей в покупателей, контент может быть либо полностью авторским, либо максимально глубоким и качественным рерайтом.
- На качественных сайтах, продающих ссылки, контент должен быть уникальным, но уникализация может проводиться более грубо – чтобы обеспечить создание большого объема текстов за минимальные деньги.
Создание продающих текстов – тема для отдельной статьи (или даже книги), а с точки зрения уникализации и рерайта все упирается в алгоритмы поисковых систем. Как они распознают заимствования? Какие алгоритмы и модели используют? Знание ответов на эти вопросы поможет сэкономить немало сил и средств всем, кто занимается наполнением сайтов. Ведь, как известно, поднять движок и немного «допилить» шаблон дизайна – дело одного-трех дней, а вот наполнить 500-2500 страниц уникальным контентом – не такая уж тривиальная задача.
Постановка задачи: поиск дубликатов
На первый взгляд, все просто: поисковик индексирует все документы в интернете. Почему бы не сравнить все эти страницы, чтобы выявить дубли? Но даже для сравнения каждого документа в индексе «Яндекса» с каждым другим, нужно возвести в квадрат число 10 727 736 489 – это будет необходимым числом операций. Причем понятно, что полнотекстовое сравнение не даст правильных результатов – достаточно заменить несколько слов, букв и знаков препинания, взять фрагмент, переставить местами предложения и так далее, чтобы сравнение «лоб в лоб» показало отсутствие совпадения. Если же сравнивать небольшие кусочки текста (например, разбить каждый документ на цепочки по 3-6 слов), то количество потребных операций возрастет на множество порядков. Таких компьютеров просто не существует, и даже прогресс в создании суперкластеров не даст такой производительности. Тупик? Как бы не так! Сочетанием математических и лингвистических методов задача сравнения огромного количества документов была в значительной степени решена. Это все еще ресурсоемкая процедура, однако она под силу существующим компьютерам. Снижение количества операций стало возможным благодаря алгоритмам шинглов (см. статью Syntactic clustering of the Web за авторством A. Broder, S. Glassman, M. Manasse and G. Zweig, опубликованную в сборнике трудов 6-й международной конференции World Wide Web в апреле 1997 года).
Шинглы
Shingle переводится как «гонт», а гонт – это кровельный материал: дощечки с пазами и выступами для соединения в единый лист. Это алгоритм для поиска дубликатов путем вычисления и сопоставления контрольных сумм выборки канонизированных словосочетаний длиной от 3 до 10 (приблизительно) единиц. Как это работает? Довольно просто:
- Текст «канонизируется», то есть приводится к исходным словоформам с выбросом стоп-слов (предлогов, союзов, частиц, знаков препинания и так далее). Например, «мой дядя самых честных правил, когда не в шутку занемог» после канонизации приобретет вид такого типа: «дядя самый честный правило шутка занемочь». Теоретически, может применяться и более жесткая канонизация, когда каждое слово приводится к самому частотному синониму – тогда после обработки исходник для вычисления шингла станет таким: «дядя самый честный правило болеть». Это стало бы мощным способом борьбы с синонимайзерами и ручным рерайтом для разрушения шинглов, которые не меняют порядок слов в текстах, а только заменяют их синонимами.
- Канонизированный текст разбивается на фразы длиной от 3 до примерно 10 (ближе к 10) слов. Разбивка текста документа может идти как стык в стык – «дядя самый честный», «правило болеть уважать»; так и внахлест – «дядя самый честный», «самый честный правило», «честный правило болеть» (возможен различный шаг сдвига). Очевидно, что любое изменение канонизированного текста, особенно если оно случится в начале, приведет к появлению других шинглов. Следовательно, необходимо установить в тексте неочевидные «точки отсчета» для разбивки на шинглы: например, как пишет «Яндекс» в презентации схожего алгоритма «Спамообороны», «от буквы „ю“ до буквы „ю“; или от двухбуквия, сумма численных значений символов (букв) которого кратна 50, до следующего такого же». При этом, особенно для разбивки внахлест, текс т может содержать много повреждений (попыток уникализации), но разрушены будут не все шинглы, а только непосредственно затронутые повреждениями.
- Для каждого шингла вычисляется контрольная сумма. Применяемый метод не столь важен – это может быть любая хэш-функция: например, CRC (cyclic redundancy code) или другой. Главное – последовательности слов превращаются в последовательности цифр, с которыми компьютеру работать гораздо проще.
- Создается выборка контрольных сумм шинглов (уже в виде контрольных сумм) – понятно, что сравнение документов по всем шинглам является на порядки более ресурсоемкой (и ненужной) задачей, чем сравнение по нескольким десяткам отобранных значений контрольных сумм. Принцип формирования выборки может быть примерно таким: из заранее созданного списка случайным образом берется 85 математических функций, каждая из которых может описывать интересный для целей data mining параметр: пересечение, вложенность и так далее. Все шинглы документа «пропускаются» через каждое из 85 выражений, что дает на выходе значения, и они присваиваются соответствующему шинглу. Для каждой из 85 функций выбирается шингл с минимальным значением контрольной суммы (просто потому, что нужно выбрать какой-то – можно было бы с таким же успехом брать шингл с максимальным значением). В итоге анализируемый документ получает сигнатуру из 85 значений контрольных сумм. При сравнении с другим документом, над которым была проделана такая же операция, берутся шинглы, отобранные по совпадающим функциям – например, если при отборе шинглов было использовано 27 одинаковых функций из 85, то сравнение идет по 27 этим контрольным суммам.
- Если сравнительный анализ показывает высокий уровень совпадения контрольных сумм, документы с очень большой вероятностью являются четкими (без изменений) или нечеткими (с небольшими изменениями) дубликатами.
Следует учесть, что поисковые системы работают не на сто процентов именно так – реализация алгоритма сложнее, последовательность действий может отличаться, но в целом принцип должен стать ясен.
Добить танцем
Шинглы – далеко не единственный метод проверки контента на уникальность и естественность: применяются статистический анализ частотности слов с использованием распределения Ципфа для поиска аномалий, наложение рамок длинных пассажей (абзацеподобных последовательностей слов, длинных шинглов) для поиска совпадений в документах, прошедших ручную обработку-рерайт с разрушением шинглов и другие алгоритмы. В целом задача распознавания дублей текстового контента поисковиками решена – только очень глубокий рерайт, а фактически – создание оригинального контента с такой же информацией, позволяет свести к нулю вероятность санкций при ранжировании. Тем не менее, понимание принципов определения дубликатов позволяет копирайтерам экономить значительные усилия при создании контента для качественных сайтов-доноров.