Алгоритм приближенного выполнения операции соединения по подобию Перевалова М. А., 5 курс, кафедра системного программирования СПбГУ, red1orchid@gmail.com Аннотация В связи с только возрастающей скоростью увеличения объема информации и необходимостью соединения данных из различных источников, возникает задача поиска подобных объектов. Соединение по подобию (similarity join) – полезная операция, нашедшая много применений в таких областях, как очистка данных, нахождение нечетких дубликатов, интеграция данных и data mining. При двух заданных коллекциях объектов, соединение по подобию возвращает все пары подобных объектов из этих коллекций. Алгоритмическая сложность задачи соединение по подобию заключается в поиске эффективных решений. Наивный алгоритм, вычисляющий подобие каждой пары, работает со сложностью 𝑂(𝑚 ∙ 𝑛), и при больших объемах данных вычислительные затраты становятся несоизмеримо высоки. Данная работа посвящена приближенному выполнению этой задачи. Преимущества такого подхода состоят в том, что пользователь сам может оценить требуемое качество результата и ресурсы, которыми он располагает. Алгоритм предоставляет результаты за любое отведенное ему время работы, оставляя управление соотношением времени и качества пользователю. Введение С информационным поиском тесно связано понятие top-k запросов. В ответ на свой запрос пользователь обычно заинтересован в нахождении лучших k запросов, где k заданный параметр. С ростом количества гетерогенных данных, запросы становятся более сложными, часто требующими обработки различных мультимедиа данных. Фундаментальное отличие между мультимедиа данными и короткими текстовыми строками состоит в том, что мультимедиа данные могут иметь атрибуты, нечеткие по своему существу. Так мы не можем сказать, что определенное изображение «зеленое» или «не зеленое», но мы можем оценить уровень цвета по шкале [0, 1], где 0 – совсем не зеленое, и 1 – абсолютно зеленое. В статье [5] представлено несколько известных алгоритмов, решающих проблему top-k запросов с учетом оценок нескольких атрибутов. В данной же работе мы хотим учитывать оценки объектов и их подобие. Количественным способом определения подобия пары объектов является использование функций подобия. Функции подобия так же оценивают степень похожести объектов по шкале [0, 1], где более высокие оценки означают более высокую степень подобия. Принципиальная разница заключается в том, что вычисление функции подобия является недешевой операцией и разработанный алгоритм нацелен на всевозможное сокращение количества этих вычислений. В работе представлена точная и приближенная версия алгоритма. Учитывая специфику информационного поиска и то, что нахождение точного ответа еще не гарантирует желанный результат, во многих случаях имеет смысл поиск приближенного результата, допускающего некоторое количество ошибок. Это может быть полезно в случае, когда временные ресурсы ограничены. Конечный выбор остается за пользователем – он может потратить больше времени на ожидание точного ответа, или довольствоваться более быстрым, но приближенным результатом. Соединение по подобию Объекты в данной работе рассматриваются, как множества токенов из конечной совокупности U = {ω1 , ω2 , … , ω|U| }, на которой задан определенный порядок. Функция подобия sim(∙ ,∙) возвращает значение подобия двух объектов в пределах промежутка [0, 1]. Для двух заданных множеств R и S и порога θ операция соединение по подобию возвращает все пары объектов из каждого множества, чье подобие не меньше θ, т.е.: {〈𝑟, 𝑠〉| 𝑠𝑖𝑚(𝑟, 𝑠) ≥ 𝜃, 𝑟 ∈ 𝑅, 𝑠 ∈ 𝑆} Среди существующих эффективных алгоритмов соединения по подобию есть несколько разных подходов к решению этой задачи. Среди них инвертированные индексы [2,4,6], префиксное фильтрование [1,2,4,6] и фильтрование, основанное на сигнатурах [3]. В данной работе используется префиксное фильтрование, на котором основано не малое количество алгоритмов, некоторые из которых показали себя высоко эффективными и способными обрабатывать десятки миллионов записей. Идея префиксного фильтрования основана на интуитивном заключении, что если два объекта с упорядоченными токенами похожи, некоторые их фрагменты должны пересекаться друг с другом, а у непохожих объектов такое пересечение будет недостаточным. Для возможности такой проверки необходимо перейти от конкретной функции подобия к количеству общих токенов объектов. Продемонстрируем, как это можно сделать1: |𝑟∩𝑠| Функция подобия Жакарра (коэффициент Жаккара): 𝐽(𝑟, 𝑠) = |𝑟∪𝑠| 𝐽(𝑟, 𝑠) ≥ 𝑡 ⇔ 𝑂(𝑟, 𝑠) ≥ 𝑡 (|𝑟| + |𝑠|), где 𝑂(𝑟, 𝑠) = |𝑟 ∩ 𝑠| 1+𝑡 Таким образом, от ограничения типа 𝑠𝑖𝑚(𝑟, 𝑠) ≥ 𝜃 мы переходим к ограничению типа 𝑂(𝑟, 𝑠) ≥ 𝛼, где 𝛼 своя для каждой конкретной функции. Это позволяет сформулировать принцип префиксного фильтрования более формально в следующей лемме: Лемма 1. Принцип префиксного фильтрования. Рассмотрим совокупность токенов U c некоторым заданным порядком 𝒪 и коллекцию объектов, токены которых отсортированы в этом порядке. Назовем -префиксом объекта 𝑟 первые 𝑝 токенов 𝑟. Если 𝑂(𝑟, 𝑠) ≥ 𝛼, то (|𝑟| − 𝛼 + 1)-префикс 𝑟 и (|𝑟| − 𝛼 + 1)-префикс 𝑠 должны иметь по меньшей мере один общий токен. Помимо этого в данной работе используется принцип фильтрования по размеру, предложенный в статье [6] и основанный на преобразовании ограничений конкретных функций подобия в ограничения на размер объектов. 𝐽(𝑟, 𝑠) ≥ 𝑡 ⟺ 𝑡 ∙ |𝑟 ∪ 𝑠| ≤ |𝑟 ∩ 𝑠| Описание алгоритма Разработанный алгоритм принимает на вход две коллекции объектов с оценками, каждая из которых отсортирована в порядке убывания оценок. Вдобавок токены объектов упорядочены в некотором едином порядке. Результатом работы алгоритма являются k пар объектов, каждый из соответствующей коллекции, с наивысшей итоговой оценкой среди всех остальных. Итоговая оценка складывается из оценки обоих объектов и их подобия, и вычисляется по следующей формуле: 1 Представлен конкретный пример для функции подобия Жакарра. С преобразованиями других функций подобия можно ознакомиться в работе [4]. 𝜃 = min(𝐴𝑟 , 𝐴𝑠 ) ∙ 𝑠𝑖𝑚(𝑟, 𝑠), где 𝐴𝑟 и 𝐴𝑠 - оценки объектов. Основная идея алгоритма состоит в заполнении буфера первыми k парами объектов и последующем их уточнении по ходу работы, пока в буфере не будут искомые лучшие k пар. В приближенной же версии алгоритм можно остановить раньше и в любой момент получить текущие результаты. Алгоритм начинается с вычисления итоговой оценки первых k пар объектов и записи их в буфер. Пары обрабатываются в порядке уменьшения их оценок. Далее в буфере происходит сортировка по итоговым оценкам и текущему порогу T присваивается значение минимальной из них. 0 ≤ 𝑠𝑖𝑚(𝑟, 𝑠) ≤ 1 ⇒ если min(𝐴𝑟 , 𝐴𝑠 ) < 𝑇, то и 𝜃 < 𝑇 А так как оценки объектов только убывают с дальнейшим перебором пар, то итоговые оценки любой последующей пары уже не превысят итоговой оценки минимальной из k текущих пар. Т.е. работа алгоритма останавливается, когда любая из оценок текущей пары становится меньше текущего порога T. Алгоритм продолжает обрабатывать каждую пару объектов до выполнения условия остановки или, в случае приближенной версии, до заданного количества пар. Над объектами производится сначала фильтрование по размеру, а затем префиксное фильтрование, и итоговая оценка вычисляется только для пар, удовлетворяющих обоим условиям. Модель стоимости Основная сложность приближенной версии данного алгоритма состоит в том, чтобы преобразовать время, отведенное на работу алгоритма, в количество пар, которые можно успеть за это время обработать. Для этого оценим вычислительную сложность алгоритма и выразим время работы в зависимости от следующих естественных параметров: 2 𝑡𝑖𝑚𝑒 = 𝑘(4 + 2𝑙𝑜𝑏 )𝑇 + 𝑘 ∙ 𝑙𝑜𝑔𝑘 ∙ 𝑇 + 5𝑐𝑎𝑙𝑙 ∙ 𝑇 + 𝑐𝑠 ∙ 𝑙𝑝𝑟 ∙𝑇 + 𝑐𝑝 (2𝑙𝑜𝑏 − 𝑙𝑝𝑟 + 2) ∙ 𝑇 k – желаемое количество пар в результате 𝑙𝑜𝑏 – средний размер объекта 𝑙𝑝𝑟 – средняя длина префикса объекта 𝑐𝑎𝑙𝑙 – количество пар объектов, обработанных алгоритмом (без учета первых k) 𝑐𝑠 – количество пар, удовлетворяющих фильтрованию по размеру 𝑐𝑝 – количество пар, удовлетворяющих префиксному фильтрованию 𝑇 − среднее системное время, затрачиваемое на: чтение/запись сравнение одну вычислительную операцию Рассмотрим данную формулу более подробно. Первое слагаемое отражает чтение объектов для первых k пар, вычисление итоговой оценки и запись пары в буфер. Второе слагаемое – сортировка буфера, третье – чтение объектов, проверка условия остановки и проверка условия фильтрования по размеру. Четвертое слагаемое отражает стоимость сверки префиксов объектов, которая производится только для пар, прошедших фильтрование по размеру. Подобным образом вычисление итоговой оценки проводится только для объектов, удовлетворяющих префиксному фильтрованию. Таким образом, получаем зависимость времени работы алгоритма от желаемого количества пар k и некоторых статистических параметров. В случае приближенной версии, наоборот, фиксируем время и выражаем из формулы количество пар 𝑐𝑎𝑙𝑙 , по обработке которых алгоритм должен завершить свою работу. Помимо этого было бы полезно заранее уметь предсказывать, какую точность будет иметь результат в зависимости от времени работы. Под точностью здесь понимается отношение 𝑘 ′ /𝑘, где k' – количество пар среди возвращаемых k, принадлежащих истинным k результатам. Значение k' мы точно так же можем выразить из приведенной выше формулы, зафиксировав все параметры, кроме k. Это позволяет пользователю оценить качество результата и более осознанно управлять соотношением время/качество. Заключение В данной работе представлен алгоритм приближенного выполнения задачи соединение по подобию. В алгоритме использовано несколько широко распространенных приемов, позволяющих сократить количество вычислительных операций. Так же в работе представлена модель стоимости, позволяющая заранее оценить качество получаемого результата в зависимости от отведенного времени работы. Литература 1. Surajit Chaudhuri, Venkatesh Ganti, and Raghav Kaushik. A primitive operator for similarity joins in data cleaning. 2. Jiannan Wang, Guoliang Li, and Jianhua Feng. Can we beat the prefix filtering?: an adaptive framework for similarity join and search. 3. Arvind Arasu, Venkatesh Ganti, and Raghav Kaushik. Efficient exact setsimilarity joins. 4. Chuan Xiao, Wei Wang, and Xuemin Lin. Efficient Similarity Joins for Near Duplicate Detection. 5. Ronald Fagin, Amnon Lotem and Moni Naor. Optimal aggregation algorithms for middleware // Journal of Comp and Syst Sciences. 2003. 6. Roberto J. Bayardo, Yiming Ma, and Ramakrishnan Srikant. Scaling up all pairs similarity search.