Location via proxy:   [ UP ]  
[Report a bug]   [Manage cookies]                
SlideShare a Scribd company logo
Облачный сервис персональных рекомендаций
для >20 000 магазинов — алгоритмы и технологии
Александр Сербул
руководитель направления
О чем поговорим…
 Рекомендательные сервисы – суть
 Снаружи: популярные алгоритмы и техники реализации
 А когда много данных…
 Изнутри: как устроен наш облачный сервис «1С-Битрикс BigData»
 Куда двигаться дальше
Персональные рекомендации – зачем?
 Предсказать мысли, желания клиента
 Если клиент готов – соблазнить его, привязать к себе
 Не спамить клиента мусором, не раздражать
 Соблазнять клиента – регулярно (рассылки, push)
1) Релевантность, 2) Разумность, 3) Вовремя, 4) Не пережать
Нас уже прослушивают:
Windows 10, Android, …
"Облачный сервис персональных рекомендаций для 20 000 магазинов — алгоритмы и технологии"  Сербул Александр, 1С-Битрикс
Как соблазнять?
 Не персональные «крючки»:
- Топ продаж (best sellers)
- С этим Товаром покупают
(аксессуары)
- С этим Товаром смотрят
- Другие смотрят сейчас
- Скидка на очень популярный товар
Небольшой набор товаров. Хвост. Спам
– для некоторых.
«Mining of Massive Datasets», 9.1.2: Leskovec,
Rajaraman, Ullman (Stanford University)
Amazon.com
 Персональные, не персональные
Amazon.com
 Не персональные?!
Как соблазнять?
 Персональные «крючки»:
Рекомендуем именно вам в данный
момент:
- Купить, посмотреть
- Люди, похожие на вас («близкие по
духу»)
- «Хорошая» скидка, «хорошая» цена
- Полезный контент
- Релевантный поиск
С целью персональных
рекомендаций – понятно. Теперь
сухая конкретика и код.
Карл… Карл, я внедрил в
проекте
коллаборативную
фильтрацию
Это очень круто,
пап!
Карл… Карл, я специалист по
BigData….
Это очень круто,
пап!
Но я так и не понял,
как и почему она
работает.
СОВСЕМ!!!
Content-based рекомендации
 Купил пластиковые окна – теперь их
предлагают на всех сайтах и
смартфоне, в Windows 10 и во сне.
 Купил Toyota, ищу шины, предлагают
шины к Toyota вверху списка
 Vector space model, tf/idf
 word2vec
word2vec, SVD/PCA
 Сжимаем размерность
 «Склеиваем» синонимы
 Skip-gram
 Continuous bag of words (CBOW)
 «Похож» на матричную
факторизацию
Коллаборативная фильтрация
 Предложи Товары/Услуги,
которые есть у твоих друзей
(User-User)
 Предложи к твоим Товарам
другие, связанные с ними
Товары (Item-Item): «сухарики к
пиву»
Коллаборативная фильтрация - алгоритмы
 User-User: поиск похожих «в лоб» (kNN), k-d tree, LSH
 Item-Item: Amazon, работает гораздо быстрее
 Item-Item «плюшки» - с этим Товаром покупают
 Mahout Taste (матрица в памяти)
 Spark MLLib (ALS)
Товары в моем профиле
Их связи с другими Товарами
Взвешенное среднее для предсказания моих невыраженных
интересов
Коллаборативная фильтрация – сжатие Товаров
 «Единый» каталог
 Склеить дубликаты
 Передать «смысл» между Товарами
 Улучшить качество персональных рекомендаций
 Семантическое сжатие размерности, аналог матричной
факторизации
 Скорость
 Ранжирование результатов
Minhash
 Min-wise independent permutations locality sensitive
hashing scheme
 Снижаем размерность
 Совместима с LSH (следующий слайд)
Pr[ hmin(A) = hmin(B) ] = J(A,B)
 Размер сигнатуры: 50-500
simhash
Text shingling
 Shingle – «черепица»
 Устойчивость к вариантам, опечаткам
«Штаны красные махровые в полоску»
{«штан», «таны», «аны », «ны к», «ы кра», «крас», …}
«Красные полосатые штаны»
Векторизация описания Товара
 Текст: «Штаны красные махровые в полоску»
 Вектор «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{ “Векторы совпадут хотя-бы в одной корзине” }:
Кластеризация каталога
 Apache Spark
 2-3 часа, 8 spot-серверов
 10-20 млн. Товаров => 1 млн. кластеров
 Адекватные по смыслу кластера
 Персональные рекомендации - стали в разы «лучше»
 DynamoDB – хранение кластроидов
Измерение качества персональных
рекомендаций
 Recall, precision
 Предсказываем на «старой» модели
 Смотрим фактические значения профиля – на текущей
модели
 Считаем recall
Архитектура нашего облачного
сервиса
Сервис «1С-Битрикс: BigData» - общий вид
Сервис “1С-Битрикс: BigData”
Сервис “1С-Битрикс: BigData”
Кофе или … марихуана?
1.Много хороших программистов — C++
2.Много тестировщиков — C++
3.Много свободного времени на разработку — C++
4.Много сводобных ночей на отладку - C++
5.Предметная область формализована — C++
6.Требования не меняются - C++
7.Иначе: java ;-)
Apache Lucene
28 /
Apache Lucene: +/-
1.(-) Нет нормальной поддержки русского языка
2.(-) Нет русской морфологии
3.(-) Документация иногда оставляет желать лучшего
4.(-) Нет решения для 100% онлайн индексации
5.(+) Компактный индекс (гигабайты)
6.(+) Лаконичное API
7.(+) Транзакционность
8.(+) Thread-safety
Redis
1.Профиль Пользователя: десятки тэгов
2.Стемминг Портера
3.Высокочастотные слова, tf/idf
4.Алгоритмы вытеснения тэгов
5.Куда можно развивать… (word2vec,
glove, синонимы ...)
Архитектура content-based рекомендаций
Amazon
Kinesis
Javaindexingworkers(16)
~1700
событий/сек
Index (disk)
Index (disk)
Redis (profiles)
Раздающий
Servlet
Процессы
1.Многопоточный индексатор, java/lucene
2.Amazon Kinesis – как буффер
3.Индекс в папке на диске, вытеснение
4.Как реализован “онлайн” - выдать
секрет :-)
5.Раздающий Servlet
Цифры кратко
 Тысячи запросов в секунду к сервису
 >20 тысяч интернет-магазинов
 Ощутимый рост конверсии – до 50-80%, зависит от размера
магазина
 Активное использование «С этим Товаром покупают»!?
 1 сервер рекомендаций (70G ОЗУ) + небольшой кластер Spark
 Уникальных профилей пользователей: ~ 100 миллионов
Цифры
API. Персональная рекомендация
• https://analytics.bitrix.info/crecoms/v1_0/recoms.php?op=recommend&uid=#кука#&c
ount=3&aid=#хэш_лицензии#
• op=recommend
• uid – кука Пользователя
• aid – хэш от Лицензии
• сount – число рекомендаций
{
"id":"24aace52dc0284950bcff7b7f1b7a7f0de66aca9",
"items":["1651384","1652041","1651556"]
}
API. Похожие Товары на данный
• https://analytics.bitrix.info/crecoms/v1_0/recoms.php?op=simitems&aid=#хэш_лицен
зии#&eid=#id_товара#&count=3&type=combined&uid=#кука#
• op=simitems
• uid – кука Пользователя
• aid – хэш от Лицензии
• eid – ID Товара
• type - view|order|combined
• сount – размер выдачи
API. Топ Товаров на сайте
• https://analytics.bitrix.info/crecoms/v1_0/recoms.php?op=sim_domain_items&aid=#х
эш_лицензии#&domain=#домен#&count=50&type=combined&uid=#кука#
• op=sim_domain_items
• uid – кука Пользователя
• aid – хэш от Лицензии
• domain – домен сайта
• type - view|order|combined
• сount – размер выдачи
Куда развиваться
 Пол, возраст, ценовая категория клиента – машинное
обучение
 Разные виды товаров: возобновляемые,
невозобновляемые
 Цена товара
 Внутренние циклы (готов покупать), модели Маркова
 Классификация групп лояльности, кластерный анализ
 Релевантный поиск
Спасибо за внимание!
Вопросы?
Александр Сербул
serbul@1c-bitrix.ru
Alexandr Serbul
AlexSerbul

More Related Content

"Облачный сервис персональных рекомендаций для 20 000 магазинов — алгоритмы и технологии" Сербул Александр, 1С-Битрикс

  • 1. Облачный сервис персональных рекомендаций для >20 000 магазинов — алгоритмы и технологии Александр Сербул руководитель направления
  • 2. О чем поговорим…  Рекомендательные сервисы – суть  Снаружи: популярные алгоритмы и техники реализации  А когда много данных…  Изнутри: как устроен наш облачный сервис «1С-Битрикс BigData»  Куда двигаться дальше
  • 3. Персональные рекомендации – зачем?  Предсказать мысли, желания клиента  Если клиент готов – соблазнить его, привязать к себе  Не спамить клиента мусором, не раздражать  Соблазнять клиента – регулярно (рассылки, push) 1) Релевантность, 2) Разумность, 3) Вовремя, 4) Не пережать Нас уже прослушивают: Windows 10, Android, …
  • 5. Как соблазнять?  Не персональные «крючки»: - Топ продаж (best sellers) - С этим Товаром покупают (аксессуары) - С этим Товаром смотрят - Другие смотрят сейчас - Скидка на очень популярный товар Небольшой набор товаров. Хвост. Спам – для некоторых. «Mining of Massive Datasets», 9.1.2: Leskovec, Rajaraman, Ullman (Stanford University)
  • 8. Как соблазнять?  Персональные «крючки»: Рекомендуем именно вам в данный момент: - Купить, посмотреть - Люди, похожие на вас («близкие по духу») - «Хорошая» скидка, «хорошая» цена - Полезный контент - Релевантный поиск
  • 9. С целью персональных рекомендаций – понятно. Теперь сухая конкретика и код.
  • 10. Карл… Карл, я внедрил в проекте коллаборативную фильтрацию Это очень круто, пап!
  • 11. Карл… Карл, я специалист по BigData…. Это очень круто, пап! Но я так и не понял, как и почему она работает. СОВСЕМ!!!
  • 12. Content-based рекомендации  Купил пластиковые окна – теперь их предлагают на всех сайтах и смартфоне, в Windows 10 и во сне.  Купил Toyota, ищу шины, предлагают шины к Toyota вверху списка  Vector space model, tf/idf  word2vec
  • 13. word2vec, SVD/PCA  Сжимаем размерность  «Склеиваем» синонимы  Skip-gram  Continuous bag of words (CBOW)  «Похож» на матричную факторизацию
  • 14. Коллаборативная фильтрация  Предложи Товары/Услуги, которые есть у твоих друзей (User-User)  Предложи к твоим Товарам другие, связанные с ними Товары (Item-Item): «сухарики к пиву»
  • 15. Коллаборативная фильтрация - алгоритмы  User-User: поиск похожих «в лоб» (kNN), k-d tree, LSH  Item-Item: Amazon, работает гораздо быстрее  Item-Item «плюшки» - с этим Товаром покупают  Mahout Taste (матрица в памяти)  Spark MLLib (ALS) Товары в моем профиле Их связи с другими Товарами Взвешенное среднее для предсказания моих невыраженных интересов
  • 16. Коллаборативная фильтрация – сжатие Товаров  «Единый» каталог  Склеить дубликаты  Передать «смысл» между Товарами  Улучшить качество персональных рекомендаций  Семантическое сжатие размерности, аналог матричной факторизации  Скорость  Ранжирование результатов
  • 17. Minhash  Min-wise independent permutations locality sensitive hashing scheme  Снижаем размерность  Совместима с LSH (следующий слайд) Pr[ hmin(A) = hmin(B) ] = J(A,B)  Размер сигнатуры: 50-500 simhash
  • 18. Text shingling  Shingle – «черепица»  Устойчивость к вариантам, опечаткам «Штаны красные махровые в полоску» {«штан», «таны», «аны », «ны к», «ы кра», «крас», …} «Красные полосатые штаны»
  • 19. Векторизация описания Товара  Текст: «Штаны красные махровые в полоску»  Вектор «bag of words»: [0,0,0,1,0,…0,1,0] – ~ 10000 - 1000000 элементов (kernel hack)  Minhash-сигнатура после shingling:  [1243,823,-324,12312,…] – 100-500 элементов, совместима с LSH
  • 20. Locality-Sensitive Hashing (LSH)  Вероятностный метод снижения размерности  Использовали для minhashed-векторов  Banding: b – корзины, r – элементов в корзине. P{ “Векторы совпадут хотя-бы в одной корзине” }:
  • 21. Кластеризация каталога  Apache Spark  2-3 часа, 8 spot-серверов  10-20 млн. Товаров => 1 млн. кластеров  Адекватные по смыслу кластера  Персональные рекомендации - стали в разы «лучше»  DynamoDB – хранение кластроидов
  • 22. Измерение качества персональных рекомендаций  Recall, precision  Предсказываем на «старой» модели  Смотрим фактические значения профиля – на текущей модели  Считаем recall
  • 27. Кофе или … марихуана? 1.Много хороших программистов — C++ 2.Много тестировщиков — C++ 3.Много свободного времени на разработку — C++ 4.Много сводобных ночей на отладку - C++ 5.Предметная область формализована — C++ 6.Требования не меняются - C++ 7.Иначе: java ;-)
  • 29. Apache Lucene: +/- 1.(-) Нет нормальной поддержки русского языка 2.(-) Нет русской морфологии 3.(-) Документация иногда оставляет желать лучшего 4.(-) Нет решения для 100% онлайн индексации 5.(+) Компактный индекс (гигабайты) 6.(+) Лаконичное API 7.(+) Транзакционность 8.(+) Thread-safety
  • 30. Redis 1.Профиль Пользователя: десятки тэгов 2.Стемминг Портера 3.Высокочастотные слова, tf/idf 4.Алгоритмы вытеснения тэгов 5.Куда можно развивать… (word2vec, glove, синонимы ...)
  • 32. Процессы 1.Многопоточный индексатор, java/lucene 2.Amazon Kinesis – как буффер 3.Индекс в папке на диске, вытеснение 4.Как реализован “онлайн” - выдать секрет :-) 5.Раздающий Servlet
  • 33. Цифры кратко  Тысячи запросов в секунду к сервису  >20 тысяч интернет-магазинов  Ощутимый рост конверсии – до 50-80%, зависит от размера магазина  Активное использование «С этим Товаром покупают»!?  1 сервер рекомендаций (70G ОЗУ) + небольшой кластер Spark  Уникальных профилей пользователей: ~ 100 миллионов
  • 35. API. Персональная рекомендация • https://analytics.bitrix.info/crecoms/v1_0/recoms.php?op=recommend&uid=#кука#&c ount=3&aid=#хэш_лицензии# • op=recommend • uid – кука Пользователя • aid – хэш от Лицензии • сount – число рекомендаций { "id":"24aace52dc0284950bcff7b7f1b7a7f0de66aca9", "items":["1651384","1652041","1651556"] }
  • 36. API. Похожие Товары на данный • https://analytics.bitrix.info/crecoms/v1_0/recoms.php?op=simitems&aid=#хэш_лицен зии#&eid=#id_товара#&count=3&type=combined&uid=#кука# • op=simitems • uid – кука Пользователя • aid – хэш от Лицензии • eid – ID Товара • type - view|order|combined • сount – размер выдачи
  • 37. API. Топ Товаров на сайте • https://analytics.bitrix.info/crecoms/v1_0/recoms.php?op=sim_domain_items&aid=#х эш_лицензии#&domain=#домен#&count=50&type=combined&uid=#кука# • op=sim_domain_items • uid – кука Пользователя • aid – хэш от Лицензии • domain – домен сайта • type - view|order|combined • сount – размер выдачи
  • 38. Куда развиваться  Пол, возраст, ценовая категория клиента – машинное обучение  Разные виды товаров: возобновляемые, невозобновляемые  Цена товара  Внутренние циклы (готов покупать), модели Маркова  Классификация групп лояльности, кластерный анализ  Релевантный поиск
  • 39. Спасибо за внимание! Вопросы? Александр Сербул serbul@1c-bitrix.ru Alexandr Serbul AlexSerbul