Upload
ontico
View
151
Download
6
Embed Size (px)
Citation preview
Семантическое ядро рунета - высоконагруженная сontent-based рекомендательная система
реального времени на базе Amazon Kinesis/Lucene
Александр СербулРуководитель направления
Карл… Карл, я активно использую Elastic Search
Это очень круто, пап!
Карл… Карл, я специалист по BigData….
Это очень круто, пап!
Но я до сих пор не понимаю, как работает обратный индекс и вздрагиваю от термина «реляционная алгебра»
О чем поговорим
1. Типы и алгоритмы рекомендательных систем –
кратко
2. Как мы собираем данные о действиях клиентов
3. Архитектура нашей рекомендательной системы
4. Статистика использования
5. Советы как писать свои рекомендательные системы
4 / 37
Типы и алгоритмы рекомендательных систем
1. Релевантный контент – «угадываем мысли»
2. Релевантный поиск
3. Предлагаем то, что клиенту нужно как раз
сейчас
4. Увеличение лояльности, конверсии
5 / 37
6 / 37
Объем продаж товаров
1. Best-sellers
2. Топ-продаж…
3. С этим товаром покупают
4. Персональные рекомендации
7 / 37«Mining of Massive Datasets», 9.1.2: Leskovec, Rajaraman, Ullman (Stanford University)
Коллаборативная фильтрация
1. Предложи Товары/Услуги, которые есть
у твоих друзей (User-User)
2. Предложи к твоим Товарам другие
связанные с ними Товары (Item-Item):
«сухарики к пиву»
8 / 37
Возможности коллаборативной фильтрации
1. Персональная рекомендация (рекомендуем посмотреть
эти Товары)
2. С этим Товаром покупают/смотрят/… (глобальная)
3. Топ Товаров на сайте
Apache Spark MLlib (als), Apache Mahout (Taste) + неделька
Объем данных
Объем модели, требования к «железу»
9 / 37
Content-based рекомендации
1. Купил пластиковые окна – теперь их предлагают на
всех сайтах и смартфоне.
2. Купил Toyota, ищу шины, предлагают шины к Toyota
- Поисковый «движок»: Sphinx, Lucene (Solr)
- «Обвязка» для данных
- Хранение профиля Клиента
- Реализация: неделька. Риски – объем данных, языки.
10 / 37
Тюнинг рекомендательных систем
1. Рекомендовать постоянно «возобновляемые»
Товары (молоко, носки, …)
2. Рекомендовать фильм/телевизор – один раз до
покупки
3. Учет пола, возраста, размера, …
11 / 37
Как собирать данные от клиентов?
1.Как собирать?
2.Куда собирать?
3.Как обрабатывать?
4.Потоковые алгоритмы...
12 / 37
Технологии - Apache Kafka
http://kafka.apache.org/
1. “LinkedIn”
2. Не совсем очередь
3. Совсем не очередь!
4. Клиентское приложение
«держит» курсор потока
5. Scala!
13 / 37
Технологии - Apache Kafka глубже
1. Очереди 2.0?
2. Highload – очереди?
3. “Халтура?” :-)
14 / 37
Технологии - Apache Storm
http://storm.apache.org
1. Task parallel
2. Удобные, гибкие workflow
3. Clojure/JVM
15 / 37
Apache Hadoop
Платформа:
- вычисления (MapReduce)
- файловая система (HDFS)
- “SQL-запросы” по данным (Hive)
16 / 37
Apache Spark
17 / 37
Война систем хранения
• 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, …
18 / 37
Lambda-архитектура
• Людей заваливает
данными…
• С большой скоростью
19 / 37
Инвертированный (обратный) индекс
20 / 37Christopher D. Manning, Prabhakar Raghavan and Hinrich Schutze, "Introduction to Information Retrieval", Cambridge University Press. 2008.
IR, NLP
21 / 37Christopher D. Manning, Prabhakar Raghavan and Hinrich Schutze, "Introduction to Information Retrieval", Cambridge University Press. 2008.
Академическая теория, Computer Science,как же скучно, хочется спать…
Отдадим должное гениям! Создатели великолепных поисковых движков
23 / 37Андрей Аксенов, «Sphinx» Doug Cutting, «Lucene»
Карл… Карл, я всю жизнь пишу код. Всю жизнь!
Это очень круто, пап!
Карл… Карл, я специалист по BigData….
Это очень круто, пап!
Но я так ничего серьезного и не написал. НИ-ЧЕ-ГО...
Кофе или … марихуана?
1. Много хороших программистов — C++
2. Много тестировщиков — C++
3. Много свободного времени на разработку — C++
4. Много сводобных ночей на отладку - C++
5. Предметная область формализована — C++
6. Требования не меняются - C++
Иначе: java ;-)
26 / 37
Apache Lucene
27 / 37
Apache Lucene: +/-
1. (-) Нет нормальной поддержки русского языка
2. (-) Нет русской морфологии
3. (-) Документация иногда оставляет желать лучшего
4. (-) Нет решения для 100% онлайн индексации
5. (+) Компактный индекс (гигабайты)
6. (+) Лаконичное API
7. (+) Транзакционность
8. (+) Thread-safety
28 / 37
Redis
1.Профиль Пользователя: десятки тэгов
2.Стемминг Портера
3.Высокочастотные слова, tf/idf
4.Алгоритмы вытеснения тэгов
5.Куда можно развивать… (word2vec,
glove, синонимы ...)
29 / 37
Архитектура content-based рекомендаций
30 / 37
Amazon Kinesis
Java indexing workers (16)
~1700 событий/сек
Index (disk)
Index (disk)Redis (profiles)
Раздающий Servlet
Процессы
1.Многопоточный индексатор, java/lucene
2.Amazon Kinesis – как буффер
3.Индекс в папке на диске, вытеснение
4.Как реализован “онлайн” - выдать
секрет :-)
5.Раздающий Servlet
31 / 37
Цифры
1.“Потребители”: десятки тысяч интернет-магазинов
2.“Поставщики”: все сайты на Битрикс, больше 100к
3.Тэги Профиля: название страницы, h1
4.Индекс Товаров: название, разделы
5.Индекс: гигабайты, сотня файлов в папке
32 / 37
Цифры
33 / 37
На закуску!
Полезные ссылки
1. http://ruscorpora.ru/
2. Томита-парсер (Яндекс)
3.http://www.deeplearningbook.org/
4. Google SyntaxNet
5.Word2Vec, Glove
6. Semantical spaces mapping
35 / 37
Семантические пространства и deep learning
36 / 37
«Dual Encoder LSTM»
TensorFlowTheanoTorch7Deeplearning4j
Спасибо за внимание! Вопросы?
Александр Сербул @[email protected]