Upload
rusbase
View
1.980
Download
5
Embed Size (px)
Citation preview
Эффективная кластеризация товарного каталогаиз 18 млн. товаров для рекомендательного
сервиса
Александр СербулРуководитель направления
Битрикс24 - упрощенно
Битрикс24 - цифры
• Сотни тысяч баз данных клиентов
• Десятки тысяч активных компаний: от единиц до
тысяч сотрудников в каждой
• Несколько датацентров в AWS. Один - в России.
Регистрация Хранение
Сервис персональных рекомендаций
~1000 запросов/сек
bitrix.info
Обработка, анализ
Batch процессинг
On-lineпроцессинг
Выдача ключевой информации
analytics.bitrix.info
Событие
• Кука Пользователя
• Хэш лицензии
• Домен
• ID товара
• Название Товара
• Категории Товара
• ID рекомендации
• ряд других
Просмотр товара
Добавление в корзину
Заказ Оплата Заказа
Сервис персональных рекомендаций
Amazon DynamoDB
nginx+Lua Amazon Kinesis
~1000 запросов/сек
Буфер
bitrix.info
worker’s cluster
worker (PHP)~100 запросов/секфильтрация
worker (PHP)
worker (PHP)
worker (PHP)
worker (PHP)
worker (PHP)
worker (PHP)
worker (PHP)
Лог событий
Пользователи
Домены
Сервис персональных рекомендаций
Amazon DynamoDB
Лог событий
Пользователи
Домены
Apache Spark
Сервер (spot)
Amazon S3
Файл данных
Файл данных
Сервер (spot)
Сервер (spot)
Сервер (spot)
…Кластер
рекомендаций
Apache Tomcat
Apache Mahout
«Мозги»
Выдача
anal
ytics
.bitr
ix.in
fo
Сервис персональных рекомендаций
Сервис персональных рекомендаций
• Десятки тысяч магазинов
• ~1000 событий в секунду
• Коллаборативная фильтрация
• Кластеризованный товарный каталог (миллионы
товаров)
• Java, Apache Spark, Apache Mahout, DymanoDB,
Kinesis
Технологический roadmap
• Мульти-модальность
• Content-based – рекомендации
• Кластеризация
• Machine learning, deep learning
• Увеличение конверсии
• Эффективность работы с клиентами
• Таргеттинг
Карл… Карл, я нашел страшный подвох в 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)
• Вероятностные
• Для «больших данных»
Что мы кластеризуем
• 18 млн. названий и кратких описаний
Товаров
• Описание Товара: 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-4 часа, 8-12 spot-серверов
• 18 млн. Товаров => 1 млн. кластеров
• Адекватные по смыслу кластера
• Персональные рекомендации - стали в
разы «лучше» (доказали математически)
• DynamoDB – хранение кластроидов
«Простота — это то, что труднее всего на свете; это крайний
предел опытности и последнее усилие гения»Леонардо да Винчи
Спасибо за внимание! Вопросы?
Александр Сербул @[email protected]