Выступление Александра Сербула (1С-Битрикс) на International Conference on Big Data and its Applications (ICBDA).
ICBDA — конференция для предпринимателей и разработчиков о том, как эффективно решать бизнес-задачи с помощью анализа больших данных.
http://icbda2015.org/
3. Битрикс24 - цифры
• Сотни тысяч баз данных клиентов
• Десятки тысяч активных компаний: от единиц до
тысяч сотрудников в каждой
• Несколько датацентров в AWS. Один - в России.
4. Регистрация Хранение
Сервис персональных рекомендаций
~1000 запросов/сек
bitrix.info
Обработка,
анализ
Batch
процессинг
On-line
процессинг
Выдача ключевой
информации
analytics.bitrix.info
5. Событие
• Кука Пользователя
• Хэш лицензии
• Домен
• ID товара
• Название Товара
• Категории Товара
• ID рекомендации
• ряд других
Просмотр
товара
Добавление
в корзину
Заказ Оплата
Заказа
Сервис персональных рекомендаций
13. 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, …
14. «Готовые» решения для кластеризации
• Spark MLlib
(scala/java/python) –
много данных
• scikit-learn.org (python) –
мало данных
• R
15. Подходы к кластеризации - просто
• Иерархическая
• K-means
• C-means
• Spectral
• Density-based (DBSCAN)
• Вероятностные
• Для «больших данных»
16. Что мы кластеризуем
• 18 млн. названий и кратких описаний
Товаров
• Описание Товара: 2-10 слов
• Bag of words
• Stemming, морфология?
• Kernel hack?
• TF/IDF
• Word2Vec?!
17. K-means
• Просто, понятно
• Долго!!!
n = 10 000 000 (товаров)
k = 1 000 000 (кластеров)
d = <1 000 000 (видов слов)
i = 100 (итераций)
Время работы ~ 10^21
Возраст Земли ~ 1,4*10^17 сек
19. Spark MLLib
• Ура, на кластере!
• Увы, очень медленно
• Падения «по памяти»
• Зависания
• Свой вариант k-means
(«Clustering by Bootstrap
Averaging»)
23. Text shingling
1) Shingle – «черепица»
2) Устойчивость к вариантам, опечаткам
«Штаны красные махровые в полоску»
{«штан», «таны», «аны », «ны к», «ы кра», «крас», …}
«Красные полосатые штаны»
24. Векторизация описания Товара
Текст: «Штаны красные махровые в полоску»
Вектор «bag of words»: [0,0,0,1,0,…0,1,0] – ~ 10000 -
1000000 элементов (kernel hack)
Minhash-сигнатура после shingling:
[1243,823,-324,12312,…] – 100-500 элементов,
совместима с LSH
25. Locality-Sensitive Hashing (LSH)
• Вероятностный метод снижения
размерности
• Использовали для minhashed-
векторов
• Banding:
b – корзины, r – элементов в корзине.
P{“Векторы совпадут хотя-бы в одной корзине”}:
«Mining of Massive Datasets»: Leskovec, Rajaraman, Ullman (Stanford University)
26. Кластеризация каталога
• Apache Spark
• 2-4 часа, 8-12 spot-серверов
• 18 млн. Товаров => 1 млн. кластеров
• Адекватные по смыслу кластера
• Персональные рекомендации - стали в
разы «лучше» (доказали математически)
• DynamoDB – хранение кластроидов
27. «Простота — это то, что труднее всего на свете; это крайний
предел опытности и последнее усилие гения»
Леонардо да Винчи