HighLoad++ 2017
Зал «Найроби+Касабланка», 7 ноября, 11:00
Тезисы:
http://www.highload.ru/2017/abstracts/3037.html
Паттерн — это повторяющаяся структура в данных. Это может быть подмножество, подстрока, подпоследовательность, последовательность или множество подстрок, подграф, элемент изображения или видео-фрагмент.
Чаще всего находят все достаточно часто встречающиеся паттерны в датасете и сортируют их по частоте появления. Так, например, можно найти наиболее встречаемые юзкейсы в логах работы системы.
...
2. ∙ Паттерн — это...
Типы паттернов
2
∙
Паттерн — это...
2017-11-07
Поиск паттернов
Что такое паттерны
Примеры
Типы паттернов
1. Паттерн — это что-то повторяющееся в данных.
2. То есть: некоторая структура, которая
представляет для нас интерес.
3. Как правило, это означает, что она должна
встречаться чаще заданного числа раз (в
абсолютном или относительном измерении). Это
число называется ≪поддержка≫.
3. ∙ Интересный паттерн должен...
∙
встречаться часто в данных — поддержка
(support),
∙ удовлетворять другим критериям.
Типы паттернов
2
∙ Интересный паттерн должен...
∙ встречаться часто в данных — поддержка
(support),
∙
удовлетворять другим критериям.
2017-11-07
Поиск паттернов
Что такое паттерны
Примеры
Типы паттернов
1. То есть: некоторая структура, которая
представляет для нас интерес.
2. Как правило, это означает, что она должна
встречаться чаще заданного числа раз (в
абсолютном или относительном измерении). Это
число называется ≪поддержка≫.
4. Типы паттернов
2
2017-11-07
Поиск паттернов
Что такое паттерны
Примеры
Типы паттернов
1. Магазины хотят ставить рядом товары, которые
часто покупают вместе.
2. ... То есть, которые часто появляются в одном
чеке друг с другом.
3. ... По крайней мере так было когда-то —
исторические корни задачи: байка про
подгузники и пиво.
4. ... Сейчас-то они наоборот делают и самое нужное прячут в самом потаённом углу,
чтобы я прошёлся до касс/выхода через весь магазин и купил ещё что-нибудь лишнего
(шутка).
5. Типы паттернов
2
2017-11-07
Поиск паттернов
Что такое паттерны
Примеры
Типы паттернов
1. Веб-аналитикам интересно понимать, какую
последовательность действий пользователи
чаще всего делают на сайте.
2. При этом может быть некоторая вариативность в
промежуточных действиях, которая не
представляет интереса: например, важно только,
что человек нажал на иконку с товаром, а потом
— на кнопку ≪В корзину≫.
6. Mozilla /5.0 ( Windows NT 6 . 1 ; WOW64) AppleWebKit /537.36 (KHTML, l i k e
Gecko ) Chrome /43.0.2357.81 S a f a r i /537.36 OPR/30.0.1835.59
Mozilla /5.0 ( Windows NT 6 . 1 ; Win64 ; x64 ) AppleWebKit /537.36 (KHTML,
l i k e Gecko ) Chrome /61.0.3163.100 S a f a r i /537.36
Dalvik /2.1.0 ( Linux ; U; Android 5 . 1 ; E5533 Build /29.1.B. 0 . 8 7 )
Mozilla /5.0 ( Windows NT 1 0 . 0 ; WOW64; Trident / 7 . 0 ; rv : 1 1 . 0 ) l i k e
Gecko
Mozilla /5.0 ( Windows NT 5.1) AppleWebKit /537.36 (KHTML, l i k e Gecko )
Chrome /49.0.2623.112 S a f a r i /537.36 OPR/36.0.2130.80
Dalvik /2.1.0 ( Linux ; U; Android 7 . 0 ; SM−J530FM Build /NRD90M)
Mozilla /5.0 ( Linux ; Android 4 . 4 . 2 ; GT−P5200 Build /KOT49H)
AppleWebKit /537.36 (KHTML, l i k e Gecko ) Chrome /61.0.3163.98
S a f a r i /537.36
Dalvik /2.1.0 ( Linux ; U; Android 5 . 0 . 2 ; C6903 Build /14.5.A. 0 . 2 4 2 )
Mozilla /5.0 ( Windows NT 1 0 . 0 ; WOW64) AppleWebKit /537.36 (KHTML, l i k e
Gecko ) Chrome /60.0.3112.113
Паттерны в строках
3
Mozilla /5.0 ( Windows NT 6 . 1 ; WOW64) AppleWebKit /537.36 (KHTML, l i k e
Gecko ) Chrome /43.0.2357.81 S a f a r i /537.36 OPR/30.0.1835.59
Mozilla /5.0 ( Windows NT 6 . 1 ; Win64 ; x64 ) AppleWebKit /537.36 (KHTML,
l i k e Gecko ) Chrome /61.0.3163.100 S a f a r i /537.36
Dalvik /2.1.0 ( Linux ; U; Android 5 . 1 ; E5533 Build /29.1.B. 0 . 8 7 )
Mozilla /5.0 ( Windows NT 1 0 . 0 ; WOW64; Trident / 7 . 0 ; rv : 1 1 . 0 ) l i k e
Gecko
Mozilla /5.0 ( Windows NT 5.1) AppleWebKit /537.36 (KHTML, l i k e Gecko )
Chrome /49.0.2623.112 S a f a r i /537.36 OPR/36.0.2130.80
Dalvik /2.1.0 ( Linux ; U; Android 7 . 0 ; SM−J530FM Build /NRD90M)
Mozilla /5.0 ( Linux ; Android 4 . 4 . 2 ; GT−P5200 Build /KOT49H)
AppleWebKit /537.36 (KHTML, l i k e Gecko ) Chrome /61.0.3163.98
S a f a r i /537.36
Dalvik /2. 1.0 ( Linux ; U; Android 5 . 0 . 2 ; C6903 Build /14.5.A. 0 . 2 4 2 )
Mozilla /5.0 ( Windows NT 1 0 . 0 ; WOW64) AppleWebKit /537.36 (KHTML, l i k e
Gecko ) Chrome /60.0.3112.113
2017-11-07
Поиск паттернов
Что такое паттерны
Примеры
Паттерны в строках
1. Здесь можно искать подстроки, или
подпоследовательности символов, или
подпоследовательности токенов.
2. browscap или RFC2616 можно использовать для
проверки.
3. А теперь опишем эти три задачи более
формально..
7. ∙
Подмножества: {a, b, f } ∈ {a, b, c, d, e, f };
Типы паттернов: абстракции
4
∙ Подмножества: {a, b, f } ∈ {a, b, c, d, e, f };
2017-11-07
Поиск паттернов
Что такое паттерны
Абстракции
Типы паттернов: абстракции
1. Примеры подмножеств: товары в чеке, свойства
объектов, иногда бинарные флаги
конвертируются в множества.
8. ∙
Подмножества: {a, b, f } ∈ {a, b, c, d, e, f };
∙
подстроки ”abc” ∈ ”blablabcblabla”;
Типы паттернов: абстракции
4
∙ Подмножества: {a, b, f } ∈ {a, b, c, d, e, f };
∙ подстроки ”abc” ∈ ”blablabcblabla”;
2017-11-07
Поиск паттернов
Что такое паттерны
Абстракции
Типы паттернов: абстракции
1. Не стоит путать с задачей поиска максимальной
общей подстроки среди k строк, наши паттерны
не обязательно являются подстроками для всех
исходных строк, они просто достаточно часто
встречаются.
9. ∙
Подмножества: {a, b, f } ∈ {a, b, c, d, e, f };
∙
подстроки ”abc” ∈ ”blablabcblabla”;
∙ подпоследовательности:
[a, {b, c} , a, b] ∈ [a, c, d, {b, c}, {e, f , g} , a, b, a];
Типы паттернов: абстракции
4
∙ Подмножества: {a, b, f } ∈ {a, b, c, d, e, f };
∙ подстроки ”abc” ∈ ”blablabcblabla”;
∙
подпоследовательности:
[a, {b, c} , a, b] ∈ [a, c, d, {b, c}, {e, f , g} , a, b, a];
2017-11-07
Поиск паттернов
Что такое паттерны
Абстракции
Типы паттернов: абстракции
1. Последовательности от строк отличаются тем,
что строка должна совпасть без разрывов, а
последовательность может быть ≪разорвана≫.
10. ∙
Подмножества: {a, b, f } ∈ {a, b, c, d, e, f };
∙
подстроки ”abc” ∈ ”blablabcblabla”;
∙ подпоследовательности:
[a, {b, c} , a, b] ∈ [a, c, d, {b, c}, {e, f , g} , a, b, a];
∙
подграфы (веб, ДНК, набор HTTP-сессий);
Типы паттернов: абстракции
4
∙ Подмножества: {a, b, f } ∈ {a, b, c, d, e, f };
∙ подстроки ”abc” ∈ ”blablabcblabla”;
∙
подпоследовательности:
[a, {b, c} , a, b] ∈ [a, c, d, {b, c}, {e, f , g} , a, b, a];
∙ подграфы (веб, ДНК, набор HTTP-сессий);
2017-11-07
Поиск паттернов
Что такое паттерны
Абстракции
Типы паттернов: абстракции
1. Два основных варианта:
2. ... большой граф (например, представление
ДНК) и в нём ищем подграфы, которые часто
встречаются внутри него,
3. ... большой набор графов (например,
HTTP-сессии как графы переходов), ищем такие
графы, что они являются подграфами для
многих графов из этого набора.
11. ∙
Подмножества: {a, b, f } ∈ {a, b, c, d, e, f };
∙
подстроки ”abc” ∈ ”blablabcblabla”;
∙ подпоследовательности:
[a, {b, c} , a, b] ∈ [a, c, d, {b, c}, {e, f , g} , a, b, a];
∙
подграфы (веб, ДНК, набор HTTP-сессий);
∙ элементы изображений, временных рядов,
структур данных, регулярные выражения, графы
переходов, сети Петри и прочее.
Типы паттернов: абстракции
4
∙ Подмножества: {a, b, f } ∈ {a, b, c, d, e, f };
∙ подстроки ”abc” ∈ ”blablabcblabla”;
∙
подпоследовательности:
[a, {b, c} , a, b] ∈ [a, c, d, {b, c}, {e, f , g} , a, b, a];
∙ подграфы (веб, ДНК, набор HTTP-сессий);
∙ элементы изображений, временных рядов,
структур данных, регулярные выражения, графы
переходов, сети Петри и прочее.
2017-11-07
Поиск паттернов
Что такое паттерны
Абстракции
Типы паттернов: абстракции
1. Лучше всего это работает для автоматически
сгенерированных данных, где даже ≪шум≫ носит
≪структурный≫ характер. Например,
≪похожие≫ элементы изображений найти так
очень трудно, легче — абсолютно идентичные.
2. Рассмотрим пример с
паттернами-подмножествами.
12. id elements
1 b, c, d, e
2 a, b, d, e
3 d, e, g, h
4 a, e, g, h
Пример: ECLAT
5
id elements
1 b, c, d, e
2 a, b, d, e
3 d, e, g, h
4 a, e, g, h
2017-11-07
Поиск паттернов
Примеры
Пример вертикального поиска паттернов
Пример: ECLAT
1. Рассмотрим пример. Дана таблица
Номер Чека → Список товаров в этом чеке.
2. Попробуем найти все паттерны, встретившиеся
больше одного раза, то есть минимум 2.
3. Название алгоритма историческое (equivalence
class & bottom-up). В 2017 году этому алгоритму
20 лет исполняется...
13. id elements
1 b, c, d, e
2 a, b, d, e
3 d, e, g, h
4 a, e, g, h
element row_ids
a {2, 4}
b {1, 2}
c {1}
d {1, 2, 3}
e {1, 2, 3, 4}
g {3, 4}
h {3, 4}
Пример: ECLAT
5
id elements
1 b, c, d, e
2 a, b, d, e
3 d, e, g, h
4 a, e, g, h
element row_ids
a {2, 4}
b {1, 2}
c {1}
d {1, 2, 3}
e {1, 2, 3, 4}
g {3, 4}
h {3, 4}
2017-11-07
Поиск паттернов
Примеры
Пример вертикального поиска паттернов
Пример: ECLAT
1. Построим обратную таблицу —
Товар → В каких чеках он появлялся.
14. id elements
1 b, c, d, e
2 a, b, d, e
3 d, e, g, h
4 a, e, g, h
elements row_ids
{a} {2, 4}
{b} {1, 2}
{d} {1, 2, 3}
{e} {1, 2, 3, 4}
{g} {3, 4}
{h} {3, 4}
Пример: ECLAT
5
id elements
1 b, c, d, e
2 a, b, d, e
3 d, e, g, h
4 a, e, g, h
elements row_ids
{a} {2, 4}
{b} {1, 2}
{d} {1, 2, 3}
{e} {1, 2, 3, 4}
{g} {3, 4}
{h} {3, 4}
2017-11-07
Поиск паттернов
Примеры
Пример вертикального поиска паттернов
Пример: ECLAT
1. Это уже часть ответа. Нужно только удалить {c},
потому что этот элемент (товар) был только в
одном чеке, а у нас поддержка — 2.
15. id elements
1 b, c, d, e
2 a, b, d, e
3 d, e, g, h
4 a, e, g, h
elements row_ids
{a,e} {2, 4}
{b,d} {1, 2}
{b,e} {1, 2}
{d,e} {1, 2, 3}
{e,g} {3, 4}
{e,h} {3, 4}
{g,h} {3, 4}
Пример: ECLAT
5
id elements
1 b, c, d, e
2 a, b, d, e
3 d, e, g, h
4 a, e, g, h
elements row_ids
{a,e} {2, 4}
{b,d} {1, 2}
{b,e} {1, 2}
{d,e} {1, 2, 3}
{e,g} {3, 4}
{e,h} {3, 4}
{g,h} {3, 4}
2017-11-07
Поиск паттернов
Примеры
Пример вертикального поиска паттернов
Пример: ECLAT
1. Self-join предыдущей таблицы (комбинации)
позволяет найти паттерны длины 2, то есть,
например, два товара, которые покупают вместе.
Например, у {a} были id 2, 4, у {e} — 1, 2, 3, 4
пересечение этих двух множеств даёт {2, 4}.
16. id elements
1 b, c, d, e
2 a, b, d, e
3 d, e, g, h
4 a, e, g, h
elements row_ids
{b,d,e} {1, 2}
{e,g,h} {3, 4}
Пример: ECLAT
5
id elements
1 b, c, d, e
2 a, b, d, e
3 d, e, g, h
4 a, e, g, h
elements row_ids
{b,d,e} {1, 2}
{e,g,h} {3, 4}
2017-11-07
Поиск паттернов
Примеры
Пример вертикального поиска паттернов
Пример: ECLAT
1. Делаем ещё раз то же самое, склеивая первый и
последний символы паттернов, и находим
паттерны длины 3.
2. Паттернов длины 4, встретившихся более чем в
одном чеке, у нас нет.
17. elements count elements count elements count
{a} 2 {a,e} 2 {b,d,e} 2
{b} 2 {b,d} 2 {e,g,h} 2
{d} 3 {b,e} 2
{e} 4 {d,e} 3
{g} 2 {e,g} 2
{h} 2 {e,h} 2
{g,h} 2
Пример: ECLAT
5
elements count elements count elements count
{a} 2 {a,e} 2 {b,d,e} 2
{b} 2 {b,d} 2 {e,g,h} 2
{d} 3 {b,e} 2
{e} 4 {d,e} 3
{g} 2 {e,g} 2
{h} 2 {e,h} 2
{g,h} 2
2017-11-07
Поиск паттернов
Примеры
Пример вертикального поиска паттернов
Пример: ECLAT
1. Формально задачу мы решили, но это несколько
избыточный результат. Чуть позже обсудим, что
не так.
19. {bd}{ae} {be} {de} {eg} {eh} {gh}
{ }
{a} {b} {d} {e} {g} {h}
{egh}{bde}
COUNT=2 COUNT=2
COUNT=2 COUNT=2 COUNT=2 COUNT=2
COUNT=2
COUNT=2
COUNT=2
COUNT=2
COUNT=2 COUNT=2COUNT=3
COUNT=3
COUNT=4
Дерево найденных паттернов
6
{bd}{ae} {be} {de} {eg} {eh} {gh}
{ }
{a} {b} {d} {e} {g} {h}
{egh}{bde}
COUNT=2 COUNT=2
COUNT=2 COUNT=2 COUNT=2 COUNT=2
COUNT=2
COUNT=2
COUNT=2
COUNT=2
COUNT=2 COUNT=2COUNT=3
COUNT=3
COUNT=4
2017-11-07
Поиск паттернов
Примеры
Пример вертикального поиска паттернов
Дерево найденных паттернов
1. Количество паттернов для разных уровней
поддержки наглядно. При поддержке 3 мы
обошли бы только 5 узлов, 3 паттерна попали бы
в ответ.
2. По сути, мы перечисляли все возможные
паттерны, пока не остались только заведомо
редкие.
20. ∙ Ищем подмножества.
∙
В исходных данных встречались элементы
a, b, c, d.
∙ Какие возможны паттерны?
Перечислить все паттерны
7
∙
Ищем подмножества.
∙ В исходных данных встречались элементы
a, b, c, d.
∙ Какие возможны паттерны?
2017-11-07
Поиск паттернов
Пространство паттернов
Конечные множества паттернов
Перечислить все паттерны
1. Рассмотрим даже ещё более простую задачу —
поиск паттернов-подмножеств из четырёх
базовых элементов.
21. ∙ В случае с подмножествами их конечное число:
∙ ∅;
∙ {a}, {b}, {c}, {d};
∙ {ab}, {ac}, {ad}, {bc}, {bd}, {cd};
∙ {abc}, {abd}, {acd}, {bcd};
∙ {abcd}.
Перечислить все паттерны
7
∙ В случае с подмножествами их конечное число:
∙
∅;
∙
{a}, {b}, {c}, {d};
∙
{ab}, {ac}, {ad}, {bc}, {bd}, {cd};
∙
{abc}, {abd}, {acd}, {bcd};
∙
{abcd}.
2017-11-07
Поиск паттернов
Пространство паттернов
Конечные множества паттернов
Перечислить все паттерны
1. Для того, чтобы все их перечислить, мы
воспользовались трюком — отсортировали
элементы по алфавиту.
22. {ab} {ac} {ad} {bc} {bd} {cd}
{abc} {adb} {acd} {bcd}
{ }
{a} {b} {c} {d}
adcd{ }
Перечислить все паттерны
7
{ab} {ac} {ad} {bc} {bd} {cd}
{abc} {adb} {acd} {bcd}
{ }
{a} {b} {c} {d}
adcd{ }
2017-11-07
Поиск паттернов
Пространство паттернов
Конечные множества паттернов
Перечислить все паттерны
1. Благодаря сортировке, мы можем построить
дерево паттернов, в котором каждый паттерн
встречается ровно один раз, и мы можем даже
сопоставить каждому паттерну номер.
2. В результате, хоть у длинных паттернов есть
много подпаттернов, нам будет нужен только
один из них — первый.
3. Сортировка по алфавиту не всегда возможна, но
всегда можно определить правило, по которому
один элемент должен идти перед другим.
23. ∙ Ищем простые подпоследовательности.
∙
В исходных данных встречались элементы
a, b, c, d.
∙ Какие возможны паттерны?
Перечислить все паттерны-2
8
∙
Ищем простые подпоследовательности.
∙ В исходных данных встречались элементы
a, b, c, d.
∙ Какие возможны паттерны?
2017-11-07
Поиск паттернов
Пространство паттернов
Счётные множества паттернов
Перечислить все паттерны-2
1. Много ли поменяется, если мы будем искать не
подмножества, а подпоследовательности?
2. (Со строками — то же самое.)
24. ∙ Теперь паттернов счётное множество:
∙ [];
∙ [a], [b], [c], [d];
∙ [a, a], [a, b], [a, c], [a, d], [b, a], ... , [c, a], ...[d, d];
∙ [a, a, a], [a, a, b], [a, a, c], [a, a, d], ...,[d, d, d];
∙
...
Перечислить все паттерны-2
8
∙ Теперь паттернов счётное множество:
∙ [];
∙ [a], [b], [c], [d];
∙ [a, a], [a, b], [a, c], [a, d], [b, a], ... , [c, a], ...[d, d];
∙ [a, a, a], [a, a, b], [a, a, c], [a, a, d], ...,[d, d, d];
∙ ...
2017-11-07
Поиск паттернов
Пространство паттернов
Счётные множества паттернов
Перечислить все паттерны-2
1. То есть паттернов бесконечно много, но мы
можем их перечислять.
2. Так, например. мы знаем, сколько их в каждой
строке.
3. Упорядочивание нам снова помогло, но уже не
так сильно, как в прошлый раз.
25. [aa] [ab] [ac] [ad] [ba] [bb] [bc] ... ...
...... ...[aaa] [aab] [aac] [aad] [aba] [abc] [abd]
[ ]
[a] [b] [c] [d]
Перечислить все паттерны-2
8
[aa] [ab] [ac] [ad] [ba] [bb] [bc] ... ...
...... ...[aaa] [aab] [aac] [aad] [aba] [abc] [abd]
[ ]
[a] [b] [c] [d]
2017-11-07
Поиск паттернов
Пространство паттернов
Счётные множества паттернов
Перечислить все паттерны-2
1. То есть первый этап (почти) любого алгоритма
поиска паттернов — упорядочить паттерны и
придумать подобное дерево.
2. Бывают и б´oльшие пространства, иногда с ними
что-то можно придумать, а иногда уровни дерева
начинают разрастаться ≪слишком
экспоненциально≫.
3. Данных у нас конечное количество, + могут быть
дополнительные ограничения ⇒на практике
пространство паттернов всегда конечно.
26. a b c d
a b
a
cb
a
db
a
dc
b
dc
a c a d b c b d c d
ba
dc
Перечислить все паттерны-2
8
a b c d
a b
a
cb
a
db
a
dc
b
dc
a c a d b c b d c d
ba
dc
2017-11-07
Поиск паттернов
Пространство паттернов
Счётные множества паттернов
Перечислить все паттерны-2
1. Множества можно рассматривать как
полносвязные графы без повторяющихся узлов.
27. ba
dc
ba
dc
ba
dc
a d b d c d
ba
d
c
ba d
c
ba
d
c
a b
d
a b
d
a b
d
...... ... ...... ... ...
...... ... ...... ... ...
a b
a b
c
a b
c
a b
c
a b c d
a c b c
...... ... ...... ... ...
Перечислить все паттерны-2
8
ba
dc
ba
dc
ba
dc
a d b d c d
ba
d
c
ba d
c
ba
d
c
a b
d
a b
d
a b
d
...... ... ...... ... ...
...... ... ...... ... ...
a b
a b
c
a b
c
a b
c
a b c d
a c b c
...... ... ...... ... ...
2017-11-07
Поиск паттернов
Пространство паттернов
Счётные множества паттернов
Перечислить все паттерны-2
1. Это можно расширить для ненаправленных
графов на конечном множестве вершин.
2. Пространство очень быстро разрастается.
3. И да, это именно пространства в том смысле,
что можно определить расстояние между
паттернами, для которого будет выполняться
правило треугольника.
28. ∙ Как строить дерево паттернов?
∙ Как обходить это дерево?
∙ Использовать стандартные алгоритмы обхода
дерева...
∙
... но нам не всегда нужно обойти всё дерево
(модифицируем стандартные алгоритмы).
∙ Избавляться от лишних обходов данных!
∙ Применять ограничения как можно раньше.
Основная идея
9
∙
Как строить дерево паттернов?
∙ Как обходить это дерево?
∙ Использовать стандартные алгоритмы обхода
дерева...
∙ ... но нам не всегда нужно обойти всё дерево
(модифицируем стандартные алгоритмы).
∙
Избавляться от лишних обходов данных!
∙ Применять ограничения как можно раньше.
2017-11-07
Поиск паттернов
Путешествия в пространстве паттернов
Основная идея алгоритмов
Основная идея
1. Почти все алгоритмы поиска паттернов, так или
иначе, занимаются обходом дерева паттернов.
Они отличаются только тем, в каком порядке они
перебирают паттерны, какую информацию
хранят в узлах, и когда и как считывают данные.
29. ∙ Как строить дерево паттернов?
∙ Как обходить это дерево?
∙ Использовать стандартные алгоритмы обхода
дерева...
∙
... но нам не всегда нужно обойти всё дерево
(модифицируем стандартные алгоритмы).
∙ Избавляться от лишних обходов данных!
∙ Применять ограничения как можно раньше.
Основная идея
9
∙
Как строить дерево паттернов?
∙ Как обходить это дерево?
∙ Использовать стандартные алгоритмы обхода
дерева...
∙ ... но нам не всегда нужно обойти всё дерево
(модифицируем стандартные алгоритмы).
∙
Избавляться от лишних обходов данных!
∙ Применять ограничения как можно раньше.
2017-11-07
Поиск паттернов
Путешествия в пространстве паттернов
Основная идея алгоритмов
Основная идея
1. В ECLAT — это дерево подмножеств.
30. ∙ Как строить дерево паттернов?
∙ Как обходить это дерево?
∙ Использовать стандартные алгоритмы обхода
дерева...
∙
... но нам не всегда нужно обойти всё дерево
(модифицируем стандартные алгоритмы).
∙ Избавляться от лишних обходов данных!
∙ Применять ограничения как можно раньше.
Основная идея
9
∙
Как строить дерево паттернов?
∙ Как обходить это дерево?
∙ Использовать стандартные алгоритмы обхода
дерева...
∙ ... но нам не всегда нужно обойти всё дерево
(модифицируем стандартные алгоритмы).
∙
Избавляться от лишних обходов данных!
∙ Применять ограничения как можно раньше.
2017-11-07
Поиск паттернов
Путешествия в пространстве паттернов
Основная идея алгоритмов
Основная идея
1. В ECLAT — каждый уровень дерева описан
отдельной таблицей. JOIN этой таблицы с собой
даёт следующий уровень.
31. ∙ Как строить дерево паттернов?
∙ Как обходить это дерево?
∙ Использовать стандартные алгоритмы обхода
дерева...
∙
... но нам не всегда нужно обойти всё дерево
(модифицируем стандартные алгоритмы).
∙ Избавляться от лишних обходов данных!
∙ Применять ограничения как можно раньше.
Основная идея
9
∙
Как строить дерево паттернов?
∙ Как обходить это дерево?
∙ Использовать стандартные алгоритмы обхода
дерева...
∙ ... но нам не всегда нужно обойти всё дерево
(модифицируем стандартные алгоритмы).
∙
Избавляться от лишних обходов данных!
∙ Применять ограничения как можно раньше.
2017-11-07
Поиск паттернов
Путешествия в пространстве паттернов
Основная идея алгоритмов
Основная идея
1. В ECLAT — разновидность обхода в ширину.
32. ∙ Как строить дерево паттернов?
∙ Как обходить это дерево?
∙ Использовать стандартные алгоритмы обхода
дерева...
∙
... но нам не всегда нужно обойти всё дерево
(модифицируем стандартные алгоритмы).
∙ Избавляться от лишних обходов данных!
∙ Применять ограничения как можно раньше.
Основная идея
9
∙
Как строить дерево паттернов?
∙ Как обходить это дерево?
∙ Использовать стандартные алгоритмы обхода
дерева...
∙ ... но нам не всегда нужно обойти всё дерево
(модифицируем стандартные алгоритмы).
∙
Избавляться от лишних обходов данных!
∙ Применять ограничения как можно раньше.
2017-11-07
Поиск паттернов
Путешествия в пространстве паттернов
Основная идея алгоритмов
Основная идея
1. В ECLAT мы прочитали таблицу с исходными
данными один раз.
2. В узлах (при помощи вспомогательной таблицы)
хранятся так называемые проекции данных
(списки идентификаторов строк/чеков).
3. Размер вспомогательной таблицы уменьшается
от уровня к уровню.
4. Рассмотрим основные проблемы, с которыми
приходится сталкиваться при разработке
алгоритма или его реализации.
43. {ab} {ac} {ad} {bc} {bd} { ? }
{ ? } { ? } { ? } { ? }
{ }
{a} {b} {c} {d}
Продолжая перечислять паттерны
11
{ab} {ac} {ad} {bc} {bd} { ? }
{ ? } { ? } { ? } { ? }
{ }
{a} {b} {c} {d}
2017-11-07
Поиск паттернов
Путешествия в пространстве паттернов
Сложности
Продолжая перечислять паттерны
1. А если мы не с множествами будем работать, а с
последовательностями или строками?
44. {ab} {ac} {ad} {bc} {bd} {cd}
{ ? } { ? } { ? } { ? }
{ }
{a} {b} {c} {d}
Продолжая перечислять паттерны
11
{ab} {ac} {ad} {bc} {bd} {cd}
{ ? } { ? } { ? } { ? }
{ }
{a} {b} {c} {d}
2017-11-07
Поиск паттернов
Путешествия в пространстве паттернов
Сложности
Продолжая перечислять паттерны
1. Естественно, на практике это можно и нужно
оптимизировать.
45. {ab} {ac} {ad} {bc} {bd} {cd}
{abc} { ? } { ? } { ? }
{ }
{a} {b} {c} {d}
Продолжая перечислять паттерны
11
{ab} {ac} {ad} {bc} {bd} {cd}
{abc} { ? } { ? } { ? }
{ }
{a} {b} {c} {d}
2017-11-07
Поиск паттернов
Путешествия в пространстве паттернов
Сложности
Продолжая перечислять паттерны
1. Во-первых, можно посещать только те узлы
дерева, которые соответствуют паттернам, хотя
бы потенциально присутствующим в данных.
46. {ab} {ac} {ad} {bc} {bd} {cd}
{abc} {adb} { ? } { ? }
{ }
{a} {b} {c} {d}
Продолжая перечислять паттерны
11
{ab} {ac} {ad} {bc} {bd} {cd}
{abc} {adb} { ? } { ? }
{ }
{a} {b} {c} {d}
2017-11-07
Поиск паттернов
Путешествия в пространстве паттернов
Сложности
Продолжая перечислять паттерны
1. А желательно, чтобы они не просто
≪потенциально присутствовали≫, но и
потенциально были интересными для нас (часто
встречающимися, например).
47. {ab} {ac} {ad} {bc} {bd} {cd}
{abc} {adb} {acd} { ? }
{ }
{a} {b} {c} {d}
Продолжая перечислять паттерны
11
{ab} {ac} {ad} {bc} {bd} {cd}
{abc} {adb} {acd} { ? }
{ }
{a} {b} {c} {d}
2017-11-07
Поиск паттернов
Путешествия в пространстве паттернов
Сложности
Продолжая перечислять паттерны
1. Во-вторых, можно вообще не генерировать
паттерны (кандидатов в паттерны), а
использовать хитрое представление исходных
и/или промежуточных данных.
48. {ab} {ac} {ad} {bc} {bd} {cd}
{abc} {adb} {acd} {bcd}
{ }
{a} {b} {c} {d}
Продолжая перечислять паттерны
11
{ab} {ac} {ad} {bc} {bd} {cd}
{abc} {adb} {acd} {bcd}
{ }
{a} {b} {c} {d}
2017-11-07
Поиск паттернов
Путешествия в пространстве паттернов
Сложности
Продолжая перечислять паттерны
1. Но в любом случае, чисто формально, мы
обходим всё пространство паттернов, даже если
≪чисто виртуально≫.
49. { }
{{ ##
b : 1
a : 2
{{
c : 1
b : 1
e : 1
d : 1
d : 1
g : 1
e : 1 e : 1 h : 1
FP-tree
12
{ }
{{ ##
b : 1
a : 2
{{
c : 1
b : 1
e : 1
d : 1
d : 1
g : 1
e : 1 e : 1 h : 1
2017-11-07
Поиск паттернов
Путешествия в пространстве паттернов
Сложности
FP-tree
1. Одно из возможных решений этой проблемы —
преобразование исходной таблицы в особую
структуру данных, которая позволяет избежать
генерирования паттернов.
2. На базе этой структуры построены два
популярных алгоритма — FP-growth и PrefixSpan.
3. В узлах дерева паттернов тогда хранится такая
структура, и из неё мы можем выделить
(≪вырастить≫) подпаттерны и соответствующую
проекцию данных для этих подпаттернов.
50. Проблема с длинными паттернами
13
2017-11-07
Поиск паттернов
Путешествия в пространстве паттернов
Сложности
Проблема с длинными паттернами
1. Что будет, если все данные у нас одинаковые?
Есть только один длинный паттерн.
2. В ответе тогда будет слишком много избыточных
данных.
51. elements count elements count elements count
{a} 2 {a,e} 2 {b,d,e} 2
{b} 2 {b,d} 2 {e,g,h} 2
{d} 3 {b,e} 2
{e} 4 {d,e} 3
{g} 2 {e,g} 2
{h} 2 {e,h} 2
{g,h} 2
Проблема с длинными паттернами
13
elements count elements count elements count
{a} 2 {a,e} 2 {b,d,e} 2
{b} 2 {b,d} 2 {e,g,h} 2
{d} 3 {b,e} 2
{e} 4 {d,e} 3
{g} 2 {e,g} 2
{h} 2 {e,h} 2
{g,h} 2
2017-11-07
Поиск паттернов
Путешествия в пространстве паттернов
Сложности
Проблема с длинными паттернами
1. Мы уже сталкивались с похожей ситуацией в
нашем простом примере.
52. elements count elements count elements count
{a} 2 {a,e} 2 {b,d,e} 2
{b} 2 {b,d} 2 {e,g,h} 2
{d} 3 {b,e} 2
{e} 4 {d,e} 3
{g} 2 {e,g} 2
{h} 2 {e,h} 2
{g,h} 2
Проблема с длинными паттернами
13
elements count elements count elements count
{a} 2 {a,e} 2 {b,d,e} 2
{b} 2 {b,d} 2 {e,g,h} 2
{d} 3 {b,e} 2
{e} 4 {d,e} 3
{g} 2 {e,g} 2
{h} 2 {e,h} 2
{g,h} 2
2017-11-07
Поиск паттернов
Путешествия в пространстве паттернов
Сложности
Проблема с длинными паттернами
1. Зная, что есть паттерн {b, d, e} с поддержкой 2,
мы сразу получаем, что есть и {b, e} и {b, e} и
{d, e} с такой же поддержкой или больше.
53. elements count elements count elements count
{a} 2 {a,e} 2 {b,d,e} 2
{b} 2 {b,d} 2 {e,g,h} 2
{d} 3 {b,e} 2
{e} 4 {d,e} 3
{g} 2 {e,g} 2
{h} 2 {e,h} 2
{g,h} 2
Проблема с длинными паттернами
13
elements count elements count elements count
{a} 2 {a,e} 2 {b,d,e} 2
{b} 2 {b,d} 2 {e,g,h} 2
{d} 3 {b,e} 2
{e} 4 {d,e} 3
{g} 2 {e,g} 2
{h} 2 {e,h} 2
{g,h} 2
2017-11-07
Поиск паттернов
Путешествия в пространстве паттернов
Сложности
Проблема с длинными паттернами
1. То есть, если бы мы в ответе удалили
подсвеченные паттерны, мы бы не потеряли
информацию.
2. Если бы мы удалили выделенные жирным, мы
бы потеряли информацию о том, сколько раз
паттерн встретился в данных, но не информацию
о том, удовлетворяет ли он нашим критериям
поиска (ДА или НЕТ).
54. { ? } { ? } { ? } { ? } { ? } { ? }
{ ? } { ? } { ? } { ? }
{ }
{a} {b} {c} {d}
Обход дерева в ECLAT
14
{ ? } { ? } { ? } { ? } { ? } { ? }
{ ? } { ? } { ? } { ? }
{ }
{a} {b} {c} {d}
2017-11-07
Поиск паттернов
Путешествия в пространстве паттернов
Сложности
Обход дерева в ECLAT
1. Да, нам не нужно сканировать исходные данные
много раз.
55. {ab} {ac} {ad} {bc} {bd} {cd}
{ ? } { ? } { ? } { ? }
{ }
{a} {b} {c} {d}
Обход дерева в ECLAT
14
{ab} {ac} {ad} {bc} {bd} {cd}
{ ? } { ? } { ? } { ? }
{ }
{a} {b} {c} {d}
2017-11-07
Поиск паттернов
Путешествия в пространстве паттернов
Сложности
Обход дерева в ECLAT
1. Но значительную часть этих данных мы храним в
памяти.
56. {ab} {ac} {ad} {bc} {bd} {cd}
{abc} {adb} {acd} {bcd}
{ }
{a} {b} {c} {d}
Обход дерева в ECLAT
14
{ab} {ac} {ad} {bc} {bd} {cd}
{abc} {adb} {acd} {bcd}
{ }
{a} {b} {c} {d}
2017-11-07
Поиск паттернов
Путешествия в пространстве паттернов
Сложности
Обход дерева в ECLAT
1. Можно ли уменьшить потребление памяти?
57. {ae} {eg}{eh} {gh}
{ }
{a} {b} {d} {e} {g} {h}
1 3 1 2
3 41 3 3 4
1 2
1 2 1 2
{egh}
1 2
{bde}
3 4
1 24
1 2
1 2 3 4
{bd}{be} {de}
1 4
Обход дерева в ECLAT
14
{ae} {eg}{eh} {gh}
{ }
{a} {b} {d} {e} {g} {h}
1 3 1 2
3 41 3 3 4
1 2
1 2 1 2
{egh}
1 2
{bde}
3 4
1 24
1 2
1 2 3 4
{bd}{be} {de}
1 4
2017-11-07
Поиск паттернов
Путешествия в пространстве паттернов
Сложности
Обход дерева в ECLAT
1. Можно хранить не сами множества
идентификаторов, а их разницу с универсальным
множеством (или со множеством на предыдущем
уровне).
2. ...и проще работа: нужно считать объединение
множеств, а не пересечение — это можно делать
(𝜀, 𝛿)-аппроксимировано (но осторожно).
3. Чем больше данных, тем заметнее результат.
58. Обход дерева определён через рекурсию
15
2017-11-07
Поиск паттернов
Стек алгоритмов обхода дерева
Уходим от рекурсии
Обход дерева определён через рекурсию
59. ∙ Обход дерева обычно делают рекурсивно.
∙ Уйдя от рекурсии, можно управлять стеком
вручную.
∙ В том числе превратить его в очередь задач.
∙
Но нам потребуются дополнительные средства
модификации стека — чтобы избежать
упомянутых проблем.
Стек работы алгоритма
16
∙
Обход дерева обычно делают рекурсивно.
∙ Уйдя от рекурсии, можно управлять стеком
вручную.
∙
В том числе превратить его в очередь задач.
∙ Но нам потребуются дополнительные средства
модификации стека — чтобы избежать
упомянутых проблем.
2017-11-07
Поиск паттернов
Стек алгоритмов обхода дерева
Уходим от рекурсии
Стек работы алгоритма
64. {ab} {ac} {ad} {bc} {bd} {cd}
{ ? } { ? } { ? } { ? }
{ }
{a} {b} {c} {d}
Работа со стеком
17
{ab} {ac} {ad} {bc} {bd} {cd}
{ ? } { ? } { ? } { ? }
{ }
{a} {b} {c} {d}
2017-11-07
Поиск паттернов
Стек алгоритмов обхода дерева
Уходим от рекурсии
Работа со стеком
1. Когда остаётся только последний ряд, при
извлечении задач из стека новые уже не
добавляются.
65. {ab} {ac} {ad} {bc} {bd} {cd}
{abc} {adb} { ? }
{ }
{a} {b} {c} {d}
{ ? }
Работа со стеком
17
{ab} {ac} {ad} {bc} {bd} {cd}
{abc} {adb} { ? }
{ }
{a} {b} {c} {d}
{ ? }
2017-11-07
Поиск паттернов
Стек алгоритмов обхода дерева
Уходим от рекурсии
Работа со стеком
1. Но, в зависимости от типа алгоритма, могут
производиться довольно тяжёлые операции...
66. {ab} {ac} {ad} {bc} {bd} {cd}
{abc} {adb} {acd} { ? }
{ }
{a} {b} {c} {d}
Работа со стеком
17
{ab} {ac} {ad} {bc} {bd} {cd}
{abc} {adb} {acd} { ? }
{ }
{a} {b} {c} {d}
2017-11-07
Поиск паттернов
Стек алгоритмов обхода дерева
Уходим от рекурсии
Работа со стеком
1. ...включая сканирование исходных данных.
67. {ab} {ac} {ad} {bc} {bd} {cd}
{abc} {adb} {acd} {bcd}
{ }
{a} {b} {c} {d}
Работа со стеком
17
{ab} {ac} {ad} {bc} {bd} {cd}
{abc} {adb} {acd} {bcd}
{ }
{a} {b} {c} {d}
2017-11-07
Поиск паттернов
Стек алгоритмов обхода дерева
Уходим от рекурсии
Работа со стеком
1. В том числе поэтому, часто нужно
модифицировать стек в процессе работы
алгоритма — так, чтобы уменьшить количество
узлов, которые нужно обойти.
68. Модификация стека
18
2017-11-07
Поиск паттернов
Стек алгоритмов обхода дерева
Ломаем стек
Модификация стека
1. Благодаря упорядоченности паттернов, мы
можем быть уверены, что {b, c} не появится
правее в дереве.
69. Модификация стека
18
2017-11-07
Поиск паттернов
Стек алгоритмов обхода дерева
Ломаем стек
Модификация стека
1. |Если при обходе в глубину обнаружится, что
поддержка первого упоминания {b, c} такая же
как у самого этого паттерна во втором ряду, то
мы можем отменить все задачи, связанные с
{b, c}.
2. При этом существенно уменьшается количество
паттернов, которые нужно будет обойти.
72. Модификация стека
18
2017-11-07
Поиск паттернов
Стек алгоритмов обхода дерева
Ломаем стек
Модификация стека
1. В результате, если в данных есть только один
длинный паттерн, нам нужно будет сделать
единственный проход в глубину.
73. Модификация стека
18
2017-11-07
Поиск паттернов
Стек алгоритмов обхода дерева
Ломаем стек
Модификация стека
1. Поэтому существует эвристика — упорядочивать
элементы не по алфавиту или ≪абы как≫, а по
оценке их частоты.
74. ∙ Кроме естественного требования частоты, могут
быть и другие ограничения, например:
∙ суммарная стоимость товаров x,
∙
максимальная длина строки (при
конкатенации) x,
∙ некоторая произвольная функция
F (паттерн, данные) x.
Применение ограничений
19
∙ Кроме естественного требования частоты, могут
быть и другие ограничения, например:
∙ суммарная стоимость товаров x,
∙ максимальная длина строки (при
конкатенации) x,
∙
некоторая произвольная функция
F (паттерн, данные) x.
2017-11-07
Поиск паттернов
Стек алгоритмов обхода дерева
Ломаем стек
Применение ограничений
1. Можем ли мы сказать что-то про F ({a, b, c})
если мы знаем F ({a, b})?
75. {ab} {ac} {ad} {bc} {bd} {cd}
{abc} {adb} {acd} {bcd}
{ }
{a} {b} {c} {d}
adcd{ }
COST=3 COST=2 COST=3 COST=2
COST=5 COST=6 COST=5 COST=5 COST=4 COST=5
COST=8 COST=7 COST=8 COST=7
COST=7
COST6
Применение ограничений
19
{ab} {ac} {ad} {bc} {bd} {cd}
{abc} {adb} {acd} {bcd}
{ }
{a} {b} {c} {d}
adcd{ }
COST=3 COST=2 COST=3 COST=2
COST=5 COST=6 COST=5 COST=5 COST=4 COST=5
COST=8 COST=7 COST=8 COST=7
COST=7
COST6
2017-11-07
Поиск паттернов
Стек алгоритмов обхода дерева
Ломаем стек
Применение ограничений
1. В самом простом случае, практически нет
отличий от работы с поддержкой. Добавление
элемента в паттерн увеличивает суммарную
≪стоимость≫, так что достигнув предельного
значения, вниз по дереву идти не нужно.
76. {ab} {ac} {ad} {bc} {bd} {cd}
{abc} {adb} {acd} {bcd}
{ }
{a} {b} {c} {d}
adcd{ }
COST=3 COST=2 COST=3 COST=2
COST=5 COST=6 COST=5 COST=5 COST=4 COST=5
COST=8 COST=7 COST=8 COST=7
COST=7
COST6
Применение ограничений
19
{ab} {ac} {ad} {bc} {bd} {cd}
{abc} {adb} {acd} {bcd}
{ }
{a} {b} {c} {d}
adcd{ }
COST=3 COST=2 COST=3 COST=2
COST=5 COST=6 COST=5 COST=5 COST=4 COST=5
COST=8 COST=7 COST=8 COST=7
COST=7
COST6
2017-11-07
Поиск паттернов
Стек алгоритмов обхода дерева
Ломаем стек
Применение ограничений
1. В данном случае, мы смогли обойти только
половину узлов. На практике бывает, конечно, и
лучше.
2. Тип таких ограничений подсказывает нам какой
алгоритм использовать, какую информацию
держать в каждом узле дерева.
77. ∙ Строки → последовательность токенов:
Mozilla /5.0 ( Windows NT 6 . 1 ; WOW64) AppleWebKit /537.36 (KHTML, l i k e
Gecko )
Mozilla /5.0 , ( Windows , NT , 6 . 1 ; , WOW64) , AppleWebKit
/537.36 , (KHTML, , l i k e , Gecko )
∙
Последовательности с малым числом базовых
элементов → множества.
∙ И восстанавливаем последовательности после
ещё одного прохода.
∙
Последовательности → графы переходов.
∙ (борьба с циклами).
Эвристика: упрощение модели
20
∙ Строки → последовательность токенов:
Mozilla /5.0 ( Windows NT 6 . 1 ; WOW64) AppleWebKit /537.36 (KHTML, l i k e
Gecko )
Mozilla /5.0 , ( Windows , NT , 6 . 1 ; , WOW64) , AppleWebKit
/537.36 , (KHTML, , l i k e , Gecko )
∙ Последовательности с малым числом базовых
элементов → множества.
∙ И восстанавливаем последовательности после
ещё одного прохода.
∙ Последовательности → графы переходов.
∙
(борьба с циклами).
2017-11-07
Поиск паттернов
На уровне модели данных и паттернов
Данные
Эвристика: упрощение модели
78. ∙ По популярности:
∙
Не нужно ничего считать, чтобы узнать, что в
русском языке ≪й≫ будет идти после ≪о≫.
∙
По составленному вручную каталогу:
∙ Часто элементы относятся к нескольким
категориям (например, товары или символы)
∙
Нам нужно сделать так, чтобы из этих
категорий получилась строгая иерархия.
Выбор метода упорядочивания паттернов
21
∙
По популярности:
∙ Не нужно ничего считать, чтобы узнать, что в
русском языке ≪й≫ будет идти после ≪о≫.
∙ По составленному вручную каталогу:
∙
Часто элементы относятся к нескольким
категориям (например, товары или символы)
∙ Нам нужно сделать так, чтобы из этих
категорий получилась строгая иерархия.
2017-11-07
Поиск паттернов
На уровне модели данных и паттернов
Паттерны
Выбор метода упорядочивания паттернов
79. ∙ Если известно, что паттерны в данных очень
длинные (или очень многомерные), то всё дерево
паттернов будет слишком трудно обойти.
Эвристический обход дерева
22
∙
Если известно, что паттерны в данных очень
длинные (или очень многомерные), то всё дерево
паттернов будет слишком трудно обойти.
2017-11-07
Поиск паттернов
На уровне работы алгоритмов
Эвристический обход дерева
80. 1 Вместо этого можно попробовать найти
некоторые длинные паттерны при помощи
сэмплинга.
2 Оказавшись где-то в середине и в глубине дерева,
поднимаемся наверх, обнаруживая более
короткие паттерны.
3 Короткие паттерны перемешиваем, получая
кандидатов в длинные паттерны, проверяем их.
4 Повторяем.
Эвристический обход дерева
22
1 Вместо этого можно попробовать найти
некоторые длинные паттерны при помощи
сэмплинга.
2 Оказавшись где-то в середине и в глубине дерева,
поднимаемся наверх, обнаруживая более
короткие паттерны.
3 Короткие паттерны перемешиваем, получая
кандидатов в длинные паттерны, проверяем их.
4 Повторяем.
2017-11-07
Поиск паттернов
На уровне работы алгоритмов
Эвристический обход дерева
81. ∙ Spark
∙
Weka (Java, GUI)
∙ arules (R)
∙ pyarules (Python)
∙ ProM
∙
python-snakes
∙ re2
∙
hyperscan
Что есть в open-source
23
∙
Spark
∙ Weka (Java, GUI)
∙ arules (R)
∙ pyarules (Python)
∙ ProM
∙ python-snakes
∙
re2
∙ hyperscan
2017-11-07
Поиск паттернов
Что есть в open-source