25
Поиск нечетких дубликатов в масштабах Рунета

Romanenko

Embed Size (px)

Citation preview

Page 1: Romanenko

Поиск нечетких дубликатов в масштабах Рунета

Page 2: Romanenko

• Поиск похожих объектов – задача Web-mining :

– Поиск одинаковых документов для задач:

• классификации и кластеризации

• определения зеркал сайтов

• определения плагиата

– Рекомендательные системы

– Поиск похожих картинок

Page 3: Romanenko

• Зачем искать дубликаты web-страниц? – Лучше утилизация ресурсов

• Нагрузка на сеть (выкачка)

• Снижение размера индекса

• Меньше данных -> Быстрее обработка

– Проще ранжировать результаты

• 20-30% страниц в Рунете это дубликаты

Page 4: Romanenko

• Что считаем дубликатами?

– Точные

• Пример: зеркало сайта

• Просто определить

• Не часто встречается

Page 5: Romanenko

• Что считаем дубликатами? – Неточные (нечёткие)

• Пример: – реклама, счетчики,

даты, числа, цены

– перепечатка контента и новостей

• Сложнее искать

• Основной тип дубликатов

Page 6: Romanenko

Точные дубликаты

Page 7: Romanenko
Page 8: Romanenko
Page 9: Romanenko

Полная версия

Версия для печати

Page 10: Romanenko
Page 11: Romanenko

• Точные – Просто определить через контрольную сумму документа

• Чувствительно к минимальному изменению документа • Подходит только для точных дубликатов

• Неточные – Считаем “одинаковость” двух документов через метрику

сходства (similarity, от 0 до 100%) – В случае превышения порога (например, 90%) считаем

дубликатами

Page 12: Romanenko

• Алгоритмы – Шинглирование (Shingling)

• Преобразовать множество документов в множество шинглов • k-шингл – k символов или слов

– Minhashing (Andrei Broder, 1997) • Преобразовать большое множество шинглов в короткую

сигнатуру

– Супер-шинглы • Отбираем только те сигнатуры, которые с большей

вероятностью похожи

Page 13: Romanenko

• Шинглы – k-shingles (уникальные N-граммы слов) документа

• Пример: Однажды в студёную зимнюю пору я из лесу вышел… однажды в студёную

в студёную зимнюю студёную зимнюю пору …

– Представляем документ в виде множества {однажды в студёную, в студёную зимнюю, студёную зимнюю пору,…}

– Мера сходства (Similarity), коэффициент Жаккара:

||

||),(

BA

BABASim

Page 14: Romanenko

• A: “Однажды в студёную зимнюю пору я из лесу вышел” { однажды в студёную, в студёную зимнюю, студёную зимнюю пору, зимнюю пору я, пору я из, я из лесу, из лесу вышел }

• B: “Однажды в студёную летнюю пору я из лесу шёл” { однажды в студёную, в студёную летнюю, студёную летнюю пору, летнюю пору я, пору я из, я из лесу, из лесу шёл }

• Пересечение: |A B| = 3

• Объединение: |A B| = 11

273.011

3

||

||),(

BA

BABASim

Page 15: Romanenko

Min-hashing

– Вычисление коэффициента Жаккара ресурсоемко

– Хранение большого числа шинглов затратно

– Идея:

• представить документа в виде небольшой сигнатуры (вектора)

– Посчитать похожесть документов по сигнатурам

Page 16: Romanenko

• Хешируем каждый шингл: { Однажды в студёную, в студёную зимнюю, студёную зимнюю пору, зимнюю пору я, пору я из, я из лесу, из лесу вышел }

{ 153, 324, 462, 189, 623, 980, 738 } { Однажды в студёную, в студёную летнюю, студёную летнюю пору, летнюю пору я, пору я из, я из лесу, из лесу шёл } { 153, 637, 289, 820, 623, 980, 272 }

• Сохраняем минимальные хеши: {153} и {153}

Page 17: Romanenko

• Повторяем с различными хеш-функциями

• Процент одинаковых мин-хешей определяет схожесть документов • Теорема:

• Sim(Doc 1, Doc 2) = 1 / 4

Hash-1 Hash-2 Hash-3 Hash-4

Doc 1 153 155 187 255

Doc 2 153 179 187 155

||

||)]()(Pr[

BA

BABMinHashAMinHash

Page 18: Romanenko

• Сигнатура документа – это вектор минимальных хешей – На практике используется 84 хеш-функции

• Пример: { 124, 162, 127, … 172 } • В итоге получаем для каждой страницы надо

672 байта (84 х 8 байт)

Page 19: Romanenko

• Чтобы сравнить два документа надо вычислить процент совпадающих сигнатур

• Проблема: полный перебор сравнений, O(n2) – 1010 страниц * 1010 страниц * 102 хешей = 1022

операций

• Даже на современном оборудовании: – 1022 / (109 операций/сек * 104 ядер в кластере) =

109 сек или 32 года

Page 20: Romanenko

Супер-Шинглы • Т.к. нас интересуют только сильно похожие документы

– Группируем непересекающиеся шинглы в супер-шинглы: { 124, 162, 127, 234, 198, 221 … 172 } { 124, 162, 127, 234 } { 198, 221 … } { …, 172 }

• Хешируем каждый супер-шингл: { 2034, 4098, 3891, …, 5843 }

• Сравниваем только те документы, у которых совпадают супер-шинглы

Page 21: Romanenko

• Предполагаем, что Doc1 и Doc2 являются дубликатами • Храним таблицу отсортированной по колонкам и

сравниваем соседние строки.

S-Shingle-1 S-Shingle-2 S-Shingle-3

Doc 1 2034 4098 3891

Doc 2 3135 5267 1315

Doc 3 3135 5267 7351

Page 22: Romanenko

Doc

K-шинглы: Множество строк длины k присутству- ющих в документе

Сигнатуры : Небольшой числовой вектор представляющий множество и отражающий меру “сходства”

Super Shingles

Пары кандидатов : пары сигнатур, документы которых надо проверить

Page 23: Romanenko

Реализация в MapReduce

Супер-шинглы

HBase

Key: DocId, Value: <SShingles>

MAP

MAP

MAP

REDUCE

REDUCE

SShingle -> DocId

SShingle -> DocId

Page 24: Romanenko

Открытые проблемы • Фильтрация HTML-тегов

– Что делать с тегами, которые возможно несут смысловую нагрузку (img alt, href)?

– JavaScript, AJAX, FLASH

• Динамические страницы • Навигационная обвязка

– Удалять или оставлять?

Page 25: Romanenko

Алексей Романенко

В е д у щ и й р а з р а б о т ч и к ,

П о и с к @ M a i l . R u

a . r o m a n e n k o @ c o r p . m a i l . r u