Александр Сербул —1С-Битрикс — ICBDA 2015

Preview:

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 – хранение кластроидов

«Простота — это то, что труднее всего на свете; это крайний

предел опытности и последнее усилие гения»Леонардо да Винчи

Спасибо за внимание! Вопросы?

Александр Сербул @AlexSerbulserbul@1c-bitrix.ru

Recommended