2. • Поиск похожих объектов – задача Web-mining :
– Поиск одинаковых документов для задач:
• классификации и кластеризации
• определения зеркал сайтов
• определения плагиата
– Рекомендательные системы
– Поиск похожих картинок
3. • Зачем искать дубликаты web-страниц?
– Лучше утилизация ресурсов
• Нагрузка на сеть (выкачка)
• Снижение размера индекса
• Меньше данных -> Быстрее обработка
– Проще ранжировать результаты
• 20-30% страниц в Рунете это дубликаты
4. • Что считаем дубликатами?
– Точные
• Пример: зеркало сайта
• Просто определить
• Не часто встречается
5. • Что считаем дубликатами?
– Неточные (нечёткие)
• Пример:
– реклама, счетчики,
даты, числа, цены
– перепечатка
контента и новостей
• Сложнее искать
• Основной тип дубликатов
11. • Точные
– Просто определить через контрольную сумму документа
• Чувствительно к минимальному изменению документа
• Подходит только для точных дубликатов
• Неточные
– Считаем “одинаковость” двух документов через метрику
сходства (similarity, от 0 до 100%)
– В случае превышения порога (например, 90%) считаем
дубликатами
12. • Алгоритмы
– Шинглирование (Shingling)
• Преобразовать множество документов в множество шинглов
• k-шингл – k символов или слов
– Minhashing (Andrei Broder, 1997)
• Преобразовать большое множество шинглов в короткую
сигнатуру
– Супер-шинглы
• Отбираем только те сигнатуры, которые с большей
вероятностью похожи
13. • Шинглы
– k-shingles (уникальные N-граммы слов) документа
• Пример: Однажды в студёную зимнюю пору я из лесу вышел…
однажды в студёную
в студёную зимнюю
студёную зимнюю пору
…
– Представляем документ в виде множества
{однажды в студёную, в студёную зимнюю, студёную зимнюю пору,…}
– Мера сходства (Similarity), коэффициент Жаккара:
| A B |
Sim( A, B)
| A B |
14. • A: “Однажды в студёную зимнюю пору я из лесу вышел”
{ однажды в студёную, в студёную зимнюю, студёную зимнюю пору, зимнюю
пору я, пору я из, я из лесу, из лесу вышел }
• B: “Однажды в студёную летнюю пору я из лесу шёл”
{ однажды в студёную, в студёную летнюю, студёную летнюю пору, летнюю
пору я, пору я из, я из лесу, из лесу шёл }
• Пересечение: |A B| = 3
• Объединение: |A B| = 11
| A B | 3
Sim( A, B) 0.273
| A B | 11
15. Min-hashing
– Вычисление коэффициента Жаккара ресурсоемко
– Хранение большого числа шинглов затратно
– Идея:
• представить документа в виде небольшой сигнатуры
(вектора)
– Посчитать похожесть документов по сигнатурам
16. • Хешируем каждый шингл:
{ Однажды в студёную, в студёную зимнюю, студёную зимнюю
пору, зимнюю пору я, пору я из, я из лесу, из лесу вышел }
{ 153, 324, 462, 189, 623, 980, 738 }
{ Однажды в студёную, в студёную летнюю, студёную летнюю пору,
летнюю пору я, пору я из, я из лесу, из лесу шёл }
{ 153, 637, 289, 820, 623, 980, 272 }
• Сохраняем минимальные хеши:
{153} и {153}
17. • Повторяем с различными хеш-функциями
Hash-1 Hash-2 Hash-3 Hash-4
Doc 1 153 155 187 255
Doc 2 153 179 187 155
• Процент одинаковых мин-хешей определяет схожесть документов
• Теорема: | A B |
Pr[MinHash( A) MinHash( B)]
| A B |
• Sim(Doc 1, Doc 2) = 1 / 4
18. • Сигнатура документа – это вектор
минимальных хешей
– На практике используется 84 хеш-функции
• Пример: { 124, 162, 127, … 172 }
• В итоге получаем для каждой страницы надо
672 байта (84 х 8 байт)
19. • Чтобы сравнить два документа надо
вычислить процент совпадающих сигнатур
• Проблема: полный перебор сравнений, O(n2)
– 1010 страниц * 1010 страниц * 102 хешей = 1022
операций
• Даже на современном оборудовании:
– 1022 / (109 операций/сек * 104 ядер в кластере) =
109 сек или 32 года
20. Супер-Шинглы
• Т.к. нас интересуют только сильно похожие документы
– Группируем непересекающиеся шинглы в супер-шинглы:
{ 124, 162, 127, 234, 198, 221 … 172 }
{ 124, 162, 127, 234 }
{ 198, 221 … }
{ …, 172 }
• Хешируем каждый супер-шингл:
{ 2034, 4098, 3891, …, 5843 }
• Сравниваем только те документы, у которых совпадают супер-
шинглы
21. S-Shingle-1 S-Shingle-2 S-Shingle-3
Doc 1 2034 4098 3891
Doc 2 3135 5267 1315
Doc 3 3135 5267 7351
• Предполагаем, что Doc1 и Doc2 являются дубликатами
• Храним таблицу отсортированной по колонкам и
сравниваем соседние строки.
22. Пары
кандидатов :
Super пары сигнатур,
Doc
Shingles документы
которых надо
проверить
K-шинглы: Сигнатуры :
Множество строк Небольшой числовой вектор
длины k присутству- представляющий множество
ющих в документе и отражающий меру
“сходства”
24. Открытые проблемы
• Фильтрация HTML-тегов
– Что делать с тегами, которые возможно несут
смысловую нагрузку (img alt, href)?
– JavaScript, AJAX, FLASH
• Динамические страницы
• Навигационная обвязка
– Удалять или оставлять?
25. А л е к с е й Ро м а н е н к о
Ведущий разработчик,
Поиск@Mail.Ru
a.romanenko@corp.mail.ru