Upload
kuchinskaya
View
386
Download
0
Embed Size (px)
Citation preview
Поиск нечетких дубликатов в масштабах Рунета
• Поиск похожих объектов – задача Web-mining :
– Поиск одинаковых документов для задач:
• классификации и кластеризации
• определения зеркал сайтов
• определения плагиата
– Рекомендательные системы
– Поиск похожих картинок
• Зачем искать дубликаты web-страниц? – Лучше утилизация ресурсов
• Нагрузка на сеть (выкачка)
• Снижение размера индекса
• Меньше данных -> Быстрее обработка
– Проще ранжировать результаты
• 20-30% страниц в Рунете это дубликаты
• Что считаем дубликатами?
– Точные
• Пример: зеркало сайта
• Просто определить
• Не часто встречается
• Что считаем дубликатами? – Неточные (нечёткие)
• Пример: – реклама, счетчики,
даты, числа, цены
– перепечатка контента и новостей
• Сложнее искать
• Основной тип дубликатов
Точные дубликаты
Полная версия
Версия для печати
• Точные – Просто определить через контрольную сумму документа
• Чувствительно к минимальному изменению документа • Подходит только для точных дубликатов
• Неточные – Считаем “одинаковость” двух документов через метрику
сходства (similarity, от 0 до 100%) – В случае превышения порога (например, 90%) считаем
дубликатами
• Алгоритмы – Шинглирование (Shingling)
• Преобразовать множество документов в множество шинглов • k-шингл – k символов или слов
– Minhashing (Andrei Broder, 1997) • Преобразовать большое множество шинглов в короткую
сигнатуру
– Супер-шинглы • Отбираем только те сигнатуры, которые с большей
вероятностью похожи
• Шинглы – k-shingles (уникальные N-граммы слов) документа
• Пример: Однажды в студёную зимнюю пору я из лесу вышел… однажды в студёную
в студёную зимнюю студёную зимнюю пору …
– Представляем документ в виде множества {однажды в студёную, в студёную зимнюю, студёную зимнюю пору,…}
– Мера сходства (Similarity), коэффициент Жаккара:
||
||),(
BA
BABASim
• A: “Однажды в студёную зимнюю пору я из лесу вышел” { однажды в студёную, в студёную зимнюю, студёную зимнюю пору, зимнюю пору я, пору я из, я из лесу, из лесу вышел }
• B: “Однажды в студёную летнюю пору я из лесу шёл” { однажды в студёную, в студёную летнюю, студёную летнюю пору, летнюю пору я, пору я из, я из лесу, из лесу шёл }
• Пересечение: |A B| = 3
• Объединение: |A B| = 11
273.011
3
||
||),(
BA
BABASim
Min-hashing
– Вычисление коэффициента Жаккара ресурсоемко
– Хранение большого числа шинглов затратно
– Идея:
• представить документа в виде небольшой сигнатуры (вектора)
– Посчитать похожесть документов по сигнатурам
• Хешируем каждый шингл: { Однажды в студёную, в студёную зимнюю, студёную зимнюю пору, зимнюю пору я, пору я из, я из лесу, из лесу вышел }
{ 153, 324, 462, 189, 623, 980, 738 } { Однажды в студёную, в студёную летнюю, студёную летнюю пору, летнюю пору я, пору я из, я из лесу, из лесу шёл } { 153, 637, 289, 820, 623, 980, 272 }
• Сохраняем минимальные хеши: {153} и {153}
• Повторяем с различными хеш-функциями
• Процент одинаковых мин-хешей определяет схожесть документов • Теорема:
• 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
• Сигнатура документа – это вектор минимальных хешей – На практике используется 84 хеш-функции
• Пример: { 124, 162, 127, … 172 } • В итоге получаем для каждой страницы надо
672 байта (84 х 8 байт)
• Чтобы сравнить два документа надо вычислить процент совпадающих сигнатур
• Проблема: полный перебор сравнений, O(n2) – 1010 страниц * 1010 страниц * 102 хешей = 1022
операций
• Даже на современном оборудовании: – 1022 / (109 операций/сек * 104 ядер в кластере) =
109 сек или 32 года
Супер-Шинглы • Т.к. нас интересуют только сильно похожие документы
– Группируем непересекающиеся шинглы в супер-шинглы: { 124, 162, 127, 234, 198, 221 … 172 } { 124, 162, 127, 234 } { 198, 221 … } { …, 172 }
• Хешируем каждый супер-шингл: { 2034, 4098, 3891, …, 5843 }
• Сравниваем только те документы, у которых совпадают супер-шинглы
• Предполагаем, что 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
Doc
K-шинглы: Множество строк длины k присутству- ющих в документе
Сигнатуры : Небольшой числовой вектор представляющий множество и отражающий меру “сходства”
Super Shingles
Пары кандидатов : пары сигнатур, документы которых надо проверить
Реализация в MapReduce
Супер-шинглы
HBase
Key: DocId, Value: <SShingles>
MAP
MAP
MAP
REDUCE
REDUCE
SShingle -> DocId
SShingle -> DocId
Открытые проблемы • Фильтрация HTML-тегов
– Что делать с тегами, которые возможно несут смысловую нагрузку (img alt, href)?
– JavaScript, AJAX, FLASH
• Динамические страницы • Навигационная обвязка
– Удалять или оставлять?
Алексей Романенко
В е д у щ и й р а з р а б о т ч и к ,
П о и с к @ 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