подводные камни и непростые решения на примере

реклама
Параллельные алгоритмы для обработки BigData —
подводные камни и непростые решения на примере
кластеризации каталога из 10 млн. товарных позиций
Александр Сербул
Руководитель направления
Карл…
Карл, я нашел
страшный подвох в
MapReduce
Не может быть,
пап!
Карл…
Карл, я специалист по
BigData….
Это оченьБольшинство
круто,
алгоритмов
пап!
придется изобретать
заново! ЗАНОВО!!!
Алгоритмическая «западня»
• Большинство алгоритмов для
MapReduce нужно изобретать заново
• Новый технологический стек
4 «воюющих» лагеря БД
• SQL на MapReduce: Hive, Pig, Spark SQL
• SQL на MPP (massive parallel processing):
Impala, Presto, Amazon RedShift, Vertica
• NoSQL: Cassandra, Hbase, Amazon
DynamoDB
• Классика: MySQL, MS SQL, Oracle, …
«Готовые» решения для кластеризации
• Spark MLlib
(scala/java/python) –
много данных
• scikit-learn.org (python) –
мало данных
•R
Подходы к кластеризации - просто
• Иерархическая
• K-means
• C-means
• Spectral
• Density-based (DBSCAN)
• Вероятностные
• Для «больших данных»
Что мы кластеризуем
• Описание Товара: 2-10 слов
• Bag of words
• Stemming, морфология?
• Kernel hack?
• TF/IDF
• Word2Vec?!
K-means
• Просто, понятно
• Долго!!!
n = 10 000 000 (товаров)
k = 1 000 000 (кластеров)
d = <1 000 000 (видов слов)
i = 100 (итераций)
Время работы ~ 10^21
Возраст Земли ~ 1,4*10^17 сек
Apache Mahout
• «Туго» с алгоритмами
• Нет для Spark
• Нужно дописывать свои
Spark MLLib
• Ура, на кластере!
• Увы, очень медленно
• Падения «по памяти»
• Зависания
• Свой вариант k-means
(«Clustering by Bootstrap
Averaging»)
Цитрамон – хорошо помогает от головной боли
Minhash
Min-wise independent permutations locality sensitive hashing scheme
1) Снижаем размерность
2) Совместима с LSH (следующий слайд)
Pr[ hmin(A) = hmin(B) ] = J(A,B)
Размер сигнатуры: 50-500
simhash
Text shingling
1) Shingle – «черепица»
2) Устойчивость к вариантам, опечаткам
«Штаны красные махровые в полоску»
{«штан», «таны», «аны », «ны к», «ы кра», «крас», …}
«Красные полосатые штаны»
Векторизация описания Товара
Текст: «Штаны красные махровые в полоску»
Вектор «bag of words»: [0,0,0,1,0,…0,1,0] – ~ 10000 1000000 элементов (kernel hack)
Minhash-сигнатура после shingling:
[1243,823,-324,12312,…] – 100-500 элементов,
совместима с LSH
Locality-Sensitive Hashing (LSH)
• Вероятностный метод снижения
размерности
• Использовали для minhashedвекторов
• Banding:
b – корзины, r – элементов в корзине.
P{“Векторы совпадут хотя-бы в одной корзине”}:
«Mining of Massive Datasets»: Leskovec, Rajaraman, Ullman (Stanford University)
Кластеризация каталога
• Apache Spark
• 2-3 часа, 8 spot-серверов
• 10 млн. Товаров => 1 млн. кластеров
• Адекватные по смыслу кластера
• Персональные рекомендации - стали в
разы «лучше»
• DynamoDB – хранение кластроидов
«Простота — это то, что труднее всего на свете; это крайний
предел опытности и последнее усилие гения»
Леонардо да Винчи
Спасибо за внимание!
Вопросы?
Александр Сербул
@AlexSerbul
serbul@1c-bitrix.ru
Скачать