SlideShare a Scribd company logo
1 of 34
Download to read offline
Павел Велихов, Chief Science Officer @ Toprater.com
Миллиард отзывов и
комментариев и Big Data
Полезные советы, опыт и
грабли по продвинутому
NLP на больших объемах
данных
Toprater.com - площадка, где собираются мнения со всего интернета
относительно любых объектов e-commerce.
Первый шаг - собрать существующие мнения и их
проанализировать. Нас интересуют сотни и тысячи критериев, о
которых писалось в отзывах и которые помогают выбрать лучшее
Как пользоваться такой системой?
❖ Хочу поехать на лыжах покататься, но чтобы был
бассейн для детей и аниматоры, которым их сдать. А
ночью танцы!
❖ Хочу фильм с самым классным 3D, где мощно бьются
на мечах и много крови!
Western sentimental orchestral melodies permeating every last gouge and lunge, and
especially throughout the sentimental scenes at the end.
Надо просто понимать отзывы :)
❖ Отзывы могут быть:
❖ Фейковые
❖ Саркастические/Юморные
❖ Написаны на языке Engrish
❖ и так далее
❖ После этого - загоняем данные в поисковик, и все!
❖ “It is day 87 and the horses have
accepted me as one of their own. I have
grown to understand and respect their
gentle ways. Now I question
everything I thought I once knew and
fear I am no longer capable of following
through with my primary objective. I
know that those who sent me will not
relent. They will send others in my
place... But we will be ready”
Amazon: Accoutrements Horse Head Mask
Не все отзывы оказываются полезными :)
Как понять смысл отзыва
❖ Научное название: Aspect-based sentiment analysis +
information extraction
❖ Задача сложная (вообще-то нерешаемая), но оказывается
достаточно высокой точности добиться можно.
❖ Для решения в ход идет все из арсенала NLP (Natural
Language Processing):
❖ грамматический разбор, онтологии, словари, ручные
системы, векторные представления слов и фраз,
“традиционное” и глубокое обучение.
Постановка задачи
Если вы ищете спокойную гостиницу
для отдыха с детьми, вам не сюда.
Отличный отель, уютные просторные комнаты,
но в ресторане шумно и курят.
Аспекты Сентименты
Постановка задачи
Текст
отзыва
Выделение
Аспектов
Оценка
по каждому
выделенному
аспекту
Набор
оценок
по аспектам
Данные для машинного обучения
❖ Если уже выделен критерий, легко собрать данные по оценке:
❖ Например, берем Amazon Mechanical Turk
❖ Кидаем туда задания, платим $0.01 за каждый ответ
❖ Несколько раз дублируем задание, чтобы не было левых ответов
❖ Можно даже потом сравниться с бенчмарками (но есть
проблемы, написал пост на linkedin: “Something is really wrong
with sentiment analysis and nobody seems to notice”).
❖ Для задачи выделения критерия - все сложнее, легче делать своими
людьми
Попробуем простое решение:
❖ По старинке (например, как в курсе у Ng):
❖ Берем простую модель bag-of-words:
❖ Строим классификатор в аспекты
❖ Вычисляем тональность каждого аспекта
Модель: {“был”, ”а”, ”но”, “номер”, “удобным”,
“ресторан”, “прокуренным”, “приятный”}
Попробуем простое решение:
❖ По старинке (например, как в курсе у Ng):
❖ Берем простую модель bag-of-words:
❖ Строим классификатор в аспекты
❖ Вычисляем тональность каждого аспекта
Модель: {“был”, ”а”, ”но”, “номер”, “удобным”,
“ресторан”, “прокуренным”, “приятный”}
Текст: “Номер был удобным, но
прокуренным, а ресторан приятный”
Более продвинутый NLP
❖ Части речи: существительное, глагол, прилагательное, наречие и т.п.
❖ Омонимия (разные значения одного слова):
❖ пример: Картина
❖ - картина на стене (“на стене висит картина”)
❖ - фильм (“снял хорошую картину”)
❖ - ситуация (“картина событий последних дней Помпей”)
❖ В английском тексте ~ 40% слов омонимичны (!)
❖ Грамматический разбор. Тут обычно 2 варианта:
❖ Constituency Tree
❖ Dependency Tree
Пример dependency tree
Very nice hotel with clean rooms,
but we didn't like the restaurant
Части речи
Зависимости
Точность разбора
❖ Стэнфорд дает около 92-93% точности
❖ .92^20 = 18%
❖ То есть обязательно накосячит в достаточно длинном
предложении
❖ Еще одна причина не налегать 100% на результаты
парсера
Небольшая экскурсия в Deep Learning
❖ Основные ключевые идеи Deep Learning для NLP:
❖ word embeddings. word2vec - только начало
❖ Recurrent NNs
❖ LSTM
❖ Recursive NNs
Deep Learning: Embeddings
wt-2 wt-1 wt wt+1 wt+2
wt
Размерность = 50…300
Слово, чье скалярное произведение с
wt максимально
Интересные под-пространства word2vec
PCA проекция на 2-х мерное пространство
Есть и проблемы:
Упс, мы сами не можем разделить классы,
ну и ни один алгоритм не сможет
Deep Learning: Embeddings
❖ Семантическое пространство слов
❖ Но:
❖ Омонимия?
❖ Разные подпростанства, насколько они хороши? Не
очень, но их можно подчинить, задав априорные
знания
❖ Например синтаксические подпростанства можно с
дополнением частей речи делать
❖ Смешанные модели (слова + символы)
Интеграция prior knowledge в word2vec
❖ Пихать в word2vec еще и разного рода ограничения:
❖ принадлежность к одному классу = минимальное
расстояние
❖ если класс маленький - более сильное
ограничение
❖ если большой - не так страшно
Deep Learning: примитивное использование
❖ word2vec - просто признак для машинного обучения
в модели bag-of-words. Не очень, даже
кластеризация - лучше
❖ С текстом мы имеем дело с последовательностью
слов, имеет смысл word2vec грамотнее.
❖ В глубоком обучении очень простая модель:
рекурентная нейронная сеть.
Recurrent Neural Network
Fruit flies like napalm in the morning
Классификатор
или
Регрессор
LTSM
❖ С рекуррентными сетями есть проблемы
❖ По сути, они почти ничего не запоминают
❖ LTSM: Long Term Short Memory
❖ Отдельные нейроны (gates) в сети отвечают за память:
❖ Запись, чтение, keep
❖ При эксплуатации - понятно, что это значит
❖ При тренировке - помогают правильно отправить ошибку
назад в прошлое
LTSM мини-пример
input
P
Write Keep
также называют
input gate
также называют
forget gate
P
Sum
P
Read
также называют
output gate
t0 t1 t2
https://class.coursera.org/neuralnets-2012-001/lecture/95
Recursive NN:
dep
dep
dep
dep
Что мы имеем с DL для NLP?
❖ Обычная история с DL - тренируем на огромных
объемах на GPUs, потом эксплуатируем на CPU
❖ В NLP (особенно LSTM и Recursive NNs) - сложно
переложить на GPU + алгоритм тренировки backprop во
времени или по структуре, да еще и embeddings.
Например, пока Theano грандиозного выигрыша не дает
❖ Плюс: если хотите использовать bleeding edge - надо
писать все самим. Иначе 1-2 годовалой давности
алгоритмы
Перейдем к теме Big Data!
❖ Изначально отзывы занимают какие-то GB
❖ Но “готовый” корпус занимает беспрецедентные объемы
данных, например:
❖ 20 тыс предложений = 400Mb данных
❖ В production - поменьше (не всегда), но просто раздать
людям поиграться - уже накладно
❖ Как организовать хранение и обработку данных, чтобы было
возможно ставить много экспериментов и быстро внедрять в
production?
Big Data: первый блин
❖ 200 машин на Google Cloud
❖ Cassandra на выделенном сервере
❖ GNU Parallel
❖ Новые пакеты Stanford NLP увеличили
производительность в 50-100x
❖ Зато в это время мы прикрутили свой deep learning и
другие недешевые алгоритмы
❖ Все равно дешевле свой кластер на Hetzner
Текущая архитектура Big Data
❖ Кластер на “дорогих” машинах
❖ Хранение - Cassandra
❖ Быстрая запись и чтение, как последовательное, так и по
ключу, масштабируется
❖ Колоночное хранение с компрессией - очень удачно
подходит для такого класса задач
❖ Параллельная обработка
❖ Apache Spark - сейчас только для структурированных
данных, были проблемы с Cassandra
❖ GNU Parallel + HDFS, в будущем - миграция на Spark
Неожиданный классный инструмент
❖ У нас куча разных обработчиков на разных языках
(C,Java,Jython,Python,Julia), интегрировать легче всего через раздачу
id в Cassandra и параллельной обработкой
❖ get_ids | parallel -j 8 -S $SERVERS --progress my_script {}
❖ Очень удобно, если надо быстро (буквально минуты) что-то запустить
❖ Может стать долгосрочным временным решением! :)
❖ Планируем переход на Apache Spark в будущем, но пока глючил
драйвер Cassandra, решили подождать
Кроме отзывов, еще куча структурированных данных
❖ Apache Spark + GreenplumDB
❖ GreenplumDB - параллельная SQL СУБД класса Vertica, Redshift, т.п.
❖ Совсем недавно вышла в open-source
❖ 2 типа хранилища:
❖ Распределенное кортежное (tuple-based)
❖ Распределенное колоночное с компрессией
❖ По скорости намного медленнее, чем Cassandra для массивно-
параллельной записи (MVCC, что делать), но отлично выполняет
сложные SQL на больших объемах. + не надо бэкапить!
Спасибо за внимание!
Вопросы и Ответы
https://ru.linkedin.com/in/velikhov
Общие вопросы: feedback@toprater.com
Для команд: startup@toprater.com

More Related Content

Similar to TopRater.com Машинное понимание миллионов отзывов / Павел Велихов (TopRater)

Data Science Weekend 2017. 1С-Битрикс. Чатбот для подсказки ответов на вопросы
Data Science Weekend 2017. 1С-Битрикс. Чатбот для подсказки ответов на вопросыData Science Weekend 2017. 1С-Битрикс. Чатбот для подсказки ответов на вопросы
Data Science Weekend 2017. 1С-Битрикс. Чатбот для подсказки ответов на вопросыNewprolab
 
Крадущийся сервер, затаившийся диод
Крадущийся сервер, затаившийся диодКрадущийся сервер, затаившийся диод
Крадущийся сервер, затаившийся диодAndrew Aksyonoff
 
Крадущийся сервер, затаившийся диод (Андрей Аксенов)
Крадущийся сервер, затаившийся диод (Андрей Аксенов)Крадущийся сервер, затаившийся диод (Андрей Аксенов)
Крадущийся сервер, затаившийся диод (Андрей Аксенов)Ontico
 
SQL+NoSQL: On the Way to Converged Data Management Platforms
SQL+NoSQL: On the Way to Converged Data Management PlatformsSQL+NoSQL: On the Way to Converged Data Management Platforms
SQL+NoSQL: On the Way to Converged Data Management PlatformsAndrei Nikolaenko
 
Perl, и с чем его едят. Доклад нашего Главного Инженера (ГИ) Александра Чистя...
Perl, и с чем его едят. Доклад нашего Главного Инженера (ГИ) Александра Чистя...Perl, и с чем его едят. Доклад нашего Главного Инженера (ГИ) Александра Чистя...
Perl, и с чем его едят. Доклад нашего Главного Инженера (ГИ) Александра Чистя...Serguei Gitinsky
 
Мой modern Perl (весенняя встреча Piter United)
Мой modern Perl (весенняя встреча Piter United)Мой modern Perl (весенняя встреча Piter United)
Мой modern Perl (весенняя встреча Piter United)Alex Chistyakov
 
Methods for building dialog agents and the technologies we used
Methods for building dialog agents and the technologies we used Methods for building dialog agents and the technologies we used
Methods for building dialog agents and the technologies we used Grid Dynamics
 
[ИТ-лекторий ФКН ВШЭ]: Диалоговые системы. Татьяна Ландо
[ИТ-лекторий ФКН ВШЭ]: Диалоговые системы. Татьяна Ландо[ИТ-лекторий ФКН ВШЭ]: Диалоговые системы. Татьяна Ландо
[ИТ-лекторий ФКН ВШЭ]: Диалоговые системы. Татьяна ЛандоNLPseminar
 
Repeatability on DevOps-40 meetup Apr 2014
Repeatability on DevOps-40 meetup Apr 2014Repeatability on DevOps-40 meetup Apr 2014
Repeatability on DevOps-40 meetup Apr 2014Alex Chistyakov
 
Выявление неполадок в Java приложениях
Выявление неполадок в Java приложенияхВыявление неполадок в Java приложениях
Выявление неполадок в Java приложенияхPavel Grushetzky
 
SentiScan: система автоматической разметки тональности в social media
SentiScan: система автоматической разметки тональности в social mediaSentiScan: система автоматической разметки тональности в social media
SentiScan: система автоматической разметки тональности в social mediaDmitry Kan
 
Chef, Puppet, Salt, Ansible on SECON 2014
Chef, Puppet, Salt, Ansible on SECON 2014Chef, Puppet, Salt, Ansible on SECON 2014
Chef, Puppet, Salt, Ansible on SECON 2014Alex Chistyakov
 
GetDev.NET: Снова Эрланг
GetDev.NET: Снова ЭрлангGetDev.NET: Снова Эрланг
GetDev.NET: Снова ЭрлангMaxim Krentovskiy
 
Wargaming: Оценка задач для котиков
Wargaming: Оценка задач для котиковWargaming: Оценка задач для котиков
Wargaming: Оценка задач для котиковSlava Lukyanenka
 
ML on the Edge - Highload++ Siberia 2019
ML on the Edge - Highload++ Siberia 2019ML on the Edge - Highload++ Siberia 2019
ML on the Edge - Highload++ Siberia 2019Andrey Tatarinov
 
Alexandr Serbul "The Rust language for a high-load network service - a quick ...
Alexandr Serbul "The Rust language for a high-load network service - a quick ...Alexandr Serbul "The Rust language for a high-load network service - a quick ...
Alexandr Serbul "The Rust language for a high-load network service - a quick ...Fwdays
 
Low-level C/C++ Optimization by Anrew Axenov (Sphinx)
Low-level C/C++ Optimization by Anrew Axenov (Sphinx)Low-level C/C++ Optimization by Anrew Axenov (Sphinx)
Low-level C/C++ Optimization by Anrew Axenov (Sphinx)Vadim Kosov
 
Низкоуровневая Оптимизация (Андрей Аксенов)
Низкоуровневая Оптимизация (Андрей Аксенов)Низкоуровневая Оптимизация (Андрей Аксенов)
Низкоуровневая Оптимизация (Андрей Аксенов)Ontico
 
Frontendlab: Cравнить Несравнимое - Юлия Пучнина
Frontendlab: Cравнить Несравнимое  - Юлия ПучнинаFrontendlab: Cравнить Несравнимое  - Юлия Пучнина
Frontendlab: Cравнить Несравнимое - Юлия ПучнинаGeeksLab Odessa
 

Similar to TopRater.com Машинное понимание миллионов отзывов / Павел Велихов (TopRater) (20)

Data Science Weekend 2017. 1С-Битрикс. Чатбот для подсказки ответов на вопросы
Data Science Weekend 2017. 1С-Битрикс. Чатбот для подсказки ответов на вопросыData Science Weekend 2017. 1С-Битрикс. Чатбот для подсказки ответов на вопросы
Data Science Weekend 2017. 1С-Битрикс. Чатбот для подсказки ответов на вопросы
 
Крадущийся сервер, затаившийся диод
Крадущийся сервер, затаившийся диодКрадущийся сервер, затаившийся диод
Крадущийся сервер, затаившийся диод
 
Крадущийся сервер, затаившийся диод (Андрей Аксенов)
Крадущийся сервер, затаившийся диод (Андрей Аксенов)Крадущийся сервер, затаившийся диод (Андрей Аксенов)
Крадущийся сервер, затаившийся диод (Андрей Аксенов)
 
SQL+NoSQL: On the Way to Converged Data Management Platforms
SQL+NoSQL: On the Way to Converged Data Management PlatformsSQL+NoSQL: On the Way to Converged Data Management Platforms
SQL+NoSQL: On the Way to Converged Data Management Platforms
 
Perl, и с чем его едят. Доклад нашего Главного Инженера (ГИ) Александра Чистя...
Perl, и с чем его едят. Доклад нашего Главного Инженера (ГИ) Александра Чистя...Perl, и с чем его едят. Доклад нашего Главного Инженера (ГИ) Александра Чистя...
Perl, и с чем его едят. Доклад нашего Главного Инженера (ГИ) Александра Чистя...
 
Мой modern Perl (весенняя встреча Piter United)
Мой modern Perl (весенняя встреча Piter United)Мой modern Perl (весенняя встреча Piter United)
Мой modern Perl (весенняя встреча Piter United)
 
Methods for building dialog agents and the technologies we used
Methods for building dialog agents and the technologies we used Methods for building dialog agents and the technologies we used
Methods for building dialog agents and the technologies we used
 
[ИТ-лекторий ФКН ВШЭ]: Диалоговые системы. Татьяна Ландо
[ИТ-лекторий ФКН ВШЭ]: Диалоговые системы. Татьяна Ландо[ИТ-лекторий ФКН ВШЭ]: Диалоговые системы. Татьяна Ландо
[ИТ-лекторий ФКН ВШЭ]: Диалоговые системы. Татьяна Ландо
 
Repeatability on DevOps-40 meetup Apr 2014
Repeatability on DevOps-40 meetup Apr 2014Repeatability on DevOps-40 meetup Apr 2014
Repeatability on DevOps-40 meetup Apr 2014
 
Выявление неполадок в Java приложениях
Выявление неполадок в Java приложенияхВыявление неполадок в Java приложениях
Выявление неполадок в Java приложениях
 
SentiScan: система автоматической разметки тональности в social media
SentiScan: система автоматической разметки тональности в social mediaSentiScan: система автоматической разметки тональности в social media
SentiScan: система автоматической разметки тональности в social media
 
Chef, Puppet, Salt, Ansible on SECON 2014
Chef, Puppet, Salt, Ansible on SECON 2014Chef, Puppet, Salt, Ansible on SECON 2014
Chef, Puppet, Salt, Ansible on SECON 2014
 
GetDev.NET: Снова Эрланг
GetDev.NET: Снова ЭрлангGetDev.NET: Снова Эрланг
GetDev.NET: Снова Эрланг
 
Wargaming: Оценка задач для котиков
Wargaming: Оценка задач для котиковWargaming: Оценка задач для котиков
Wargaming: Оценка задач для котиков
 
ML on the Edge - Highload++ Siberia 2019
ML on the Edge - Highload++ Siberia 2019ML on the Edge - Highload++ Siberia 2019
ML on the Edge - Highload++ Siberia 2019
 
Alexandr Serbul "The Rust language for a high-load network service - a quick ...
Alexandr Serbul "The Rust language for a high-load network service - a quick ...Alexandr Serbul "The Rust language for a high-load network service - a quick ...
Alexandr Serbul "The Rust language for a high-load network service - a quick ...
 
Low-level C/C++ Optimization by Anrew Axenov (Sphinx)
Low-level C/C++ Optimization by Anrew Axenov (Sphinx)Low-level C/C++ Optimization by Anrew Axenov (Sphinx)
Low-level C/C++ Optimization by Anrew Axenov (Sphinx)
 
Низкоуровневая Оптимизация (Андрей Аксенов)
Низкоуровневая Оптимизация (Андрей Аксенов)Низкоуровневая Оптимизация (Андрей Аксенов)
Низкоуровневая Оптимизация (Андрей Аксенов)
 
Cpp
CppCpp
Cpp
 
Frontendlab: Cравнить Несравнимое - Юлия Пучнина
Frontendlab: Cравнить Несравнимое  - Юлия ПучнинаFrontendlab: Cравнить Несравнимое  - Юлия Пучнина
Frontendlab: Cравнить Несравнимое - Юлия Пучнина
 

More from Ontico

One-cloud — система управления дата-центром в Одноклассниках / Олег Анастасье...
One-cloud — система управления дата-центром в Одноклассниках / Олег Анастасье...One-cloud — система управления дата-центром в Одноклассниках / Олег Анастасье...
One-cloud — система управления дата-центром в Одноклассниках / Олег Анастасье...Ontico
 
Масштабируя DNS / Артем Гавриченков (Qrator Labs)
Масштабируя DNS / Артем Гавриченков (Qrator Labs)Масштабируя DNS / Артем Гавриченков (Qrator Labs)
Масштабируя DNS / Артем Гавриченков (Qrator Labs)Ontico
 
Создание BigData-платформы для ФГУП Почта России / Андрей Бащенко (Luxoft)
Создание BigData-платформы для ФГУП Почта России / Андрей Бащенко (Luxoft)Создание BigData-платформы для ФГУП Почта России / Андрей Бащенко (Luxoft)
Создание BigData-платформы для ФГУП Почта России / Андрей Бащенко (Luxoft)Ontico
 
Готовим тестовое окружение, или сколько тестовых инстансов вам нужно / Алекса...
Готовим тестовое окружение, или сколько тестовых инстансов вам нужно / Алекса...Готовим тестовое окружение, или сколько тестовых инстансов вам нужно / Алекса...
Готовим тестовое окружение, или сколько тестовых инстансов вам нужно / Алекса...Ontico
 
Новые технологии репликации данных в PostgreSQL / Александр Алексеев (Postgre...
Новые технологии репликации данных в PostgreSQL / Александр Алексеев (Postgre...Новые технологии репликации данных в PostgreSQL / Александр Алексеев (Postgre...
Новые технологии репликации данных в PostgreSQL / Александр Алексеев (Postgre...Ontico
 
PostgreSQL Configuration for Humans / Alvaro Hernandez (OnGres)
PostgreSQL Configuration for Humans / Alvaro Hernandez (OnGres)PostgreSQL Configuration for Humans / Alvaro Hernandez (OnGres)
PostgreSQL Configuration for Humans / Alvaro Hernandez (OnGres)Ontico
 
Inexpensive Datamasking for MySQL with ProxySQL — Data Anonymization for Deve...
Inexpensive Datamasking for MySQL with ProxySQL — Data Anonymization for Deve...Inexpensive Datamasking for MySQL with ProxySQL — Data Anonymization for Deve...
Inexpensive Datamasking for MySQL with ProxySQL — Data Anonymization for Deve...Ontico
 
Опыт разработки модуля межсетевого экранирования для MySQL / Олег Брославский...
Опыт разработки модуля межсетевого экранирования для MySQL / Олег Брославский...Опыт разработки модуля межсетевого экранирования для MySQL / Олег Брославский...
Опыт разработки модуля межсетевого экранирования для MySQL / Олег Брославский...Ontico
 
ProxySQL Use Case Scenarios / Alkin Tezuysal (Percona)
ProxySQL Use Case Scenarios / Alkin Tezuysal (Percona)ProxySQL Use Case Scenarios / Alkin Tezuysal (Percona)
ProxySQL Use Case Scenarios / Alkin Tezuysal (Percona)Ontico
 
MySQL Replication — Advanced Features / Петр Зайцев (Percona)
MySQL Replication — Advanced Features / Петр Зайцев (Percona)MySQL Replication — Advanced Features / Петр Зайцев (Percona)
MySQL Replication — Advanced Features / Петр Зайцев (Percona)Ontico
 
Внутренний open-source. Как разрабатывать мобильное приложение большим количе...
Внутренний open-source. Как разрабатывать мобильное приложение большим количе...Внутренний open-source. Как разрабатывать мобильное приложение большим количе...
Внутренний open-source. Как разрабатывать мобильное приложение большим количе...Ontico
 
Подробно о том, как Causal Consistency реализовано в MongoDB / Михаил Тюленев...
Подробно о том, как Causal Consistency реализовано в MongoDB / Михаил Тюленев...Подробно о том, как Causal Consistency реализовано в MongoDB / Михаил Тюленев...
Подробно о том, как Causal Consistency реализовано в MongoDB / Михаил Тюленев...Ontico
 
Балансировка на скорости проводов. Без ASIC, без ограничений. Решения NFWare ...
Балансировка на скорости проводов. Без ASIC, без ограничений. Решения NFWare ...Балансировка на скорости проводов. Без ASIC, без ограничений. Решения NFWare ...
Балансировка на скорости проводов. Без ASIC, без ограничений. Решения NFWare ...Ontico
 
Перехват трафика — мифы и реальность / Евгений Усков (Qrator Labs)
Перехват трафика — мифы и реальность / Евгений Усков (Qrator Labs)Перехват трафика — мифы и реальность / Евгений Усков (Qrator Labs)
Перехват трафика — мифы и реальность / Евгений Усков (Qrator Labs)Ontico
 
И тогда наверняка вдруг запляшут облака! / Алексей Сушков (ПЕТЕР-СЕРВИС)
И тогда наверняка вдруг запляшут облака! / Алексей Сушков (ПЕТЕР-СЕРВИС)И тогда наверняка вдруг запляшут облака! / Алексей Сушков (ПЕТЕР-СЕРВИС)
И тогда наверняка вдруг запляшут облака! / Алексей Сушков (ПЕТЕР-СЕРВИС)Ontico
 
Как мы заставили Druid работать в Одноклассниках / Юрий Невиницин (OK.RU)
Как мы заставили Druid работать в Одноклассниках / Юрий Невиницин (OK.RU)Как мы заставили Druid работать в Одноклассниках / Юрий Невиницин (OK.RU)
Как мы заставили Druid работать в Одноклассниках / Юрий Невиницин (OK.RU)Ontico
 
Разгоняем ASP.NET Core / Илья Вербицкий (WebStoating s.r.o.)
Разгоняем ASP.NET Core / Илья Вербицкий (WebStoating s.r.o.)Разгоняем ASP.NET Core / Илья Вербицкий (WebStoating s.r.o.)
Разгоняем ASP.NET Core / Илья Вербицкий (WebStoating s.r.o.)Ontico
 
100500 способов кэширования в Oracle Database или как достичь максимальной ск...
100500 способов кэширования в Oracle Database или как достичь максимальной ск...100500 способов кэширования в Oracle Database или как достичь максимальной ск...
100500 способов кэширования в Oracle Database или как достичь максимальной ск...Ontico
 
Apache Ignite Persistence: зачем Persistence для In-Memory, и как он работает...
Apache Ignite Persistence: зачем Persistence для In-Memory, и как он работает...Apache Ignite Persistence: зачем Persistence для In-Memory, и как он работает...
Apache Ignite Persistence: зачем Persistence для In-Memory, и как он работает...Ontico
 
Механизмы мониторинга баз данных: взгляд изнутри / Дмитрий Еманов (Firebird P...
Механизмы мониторинга баз данных: взгляд изнутри / Дмитрий Еманов (Firebird P...Механизмы мониторинга баз данных: взгляд изнутри / Дмитрий Еманов (Firebird P...
Механизмы мониторинга баз данных: взгляд изнутри / Дмитрий Еманов (Firebird P...Ontico
 

More from Ontico (20)

One-cloud — система управления дата-центром в Одноклассниках / Олег Анастасье...
One-cloud — система управления дата-центром в Одноклассниках / Олег Анастасье...One-cloud — система управления дата-центром в Одноклассниках / Олег Анастасье...
One-cloud — система управления дата-центром в Одноклассниках / Олег Анастасье...
 
Масштабируя DNS / Артем Гавриченков (Qrator Labs)
Масштабируя DNS / Артем Гавриченков (Qrator Labs)Масштабируя DNS / Артем Гавриченков (Qrator Labs)
Масштабируя DNS / Артем Гавриченков (Qrator Labs)
 
Создание BigData-платформы для ФГУП Почта России / Андрей Бащенко (Luxoft)
Создание BigData-платформы для ФГУП Почта России / Андрей Бащенко (Luxoft)Создание BigData-платформы для ФГУП Почта России / Андрей Бащенко (Luxoft)
Создание BigData-платформы для ФГУП Почта России / Андрей Бащенко (Luxoft)
 
Готовим тестовое окружение, или сколько тестовых инстансов вам нужно / Алекса...
Готовим тестовое окружение, или сколько тестовых инстансов вам нужно / Алекса...Готовим тестовое окружение, или сколько тестовых инстансов вам нужно / Алекса...
Готовим тестовое окружение, или сколько тестовых инстансов вам нужно / Алекса...
 
Новые технологии репликации данных в PostgreSQL / Александр Алексеев (Postgre...
Новые технологии репликации данных в PostgreSQL / Александр Алексеев (Postgre...Новые технологии репликации данных в PostgreSQL / Александр Алексеев (Postgre...
Новые технологии репликации данных в PostgreSQL / Александр Алексеев (Postgre...
 
PostgreSQL Configuration for Humans / Alvaro Hernandez (OnGres)
PostgreSQL Configuration for Humans / Alvaro Hernandez (OnGres)PostgreSQL Configuration for Humans / Alvaro Hernandez (OnGres)
PostgreSQL Configuration for Humans / Alvaro Hernandez (OnGres)
 
Inexpensive Datamasking for MySQL with ProxySQL — Data Anonymization for Deve...
Inexpensive Datamasking for MySQL with ProxySQL — Data Anonymization for Deve...Inexpensive Datamasking for MySQL with ProxySQL — Data Anonymization for Deve...
Inexpensive Datamasking for MySQL with ProxySQL — Data Anonymization for Deve...
 
Опыт разработки модуля межсетевого экранирования для MySQL / Олег Брославский...
Опыт разработки модуля межсетевого экранирования для MySQL / Олег Брославский...Опыт разработки модуля межсетевого экранирования для MySQL / Олег Брославский...
Опыт разработки модуля межсетевого экранирования для MySQL / Олег Брославский...
 
ProxySQL Use Case Scenarios / Alkin Tezuysal (Percona)
ProxySQL Use Case Scenarios / Alkin Tezuysal (Percona)ProxySQL Use Case Scenarios / Alkin Tezuysal (Percona)
ProxySQL Use Case Scenarios / Alkin Tezuysal (Percona)
 
MySQL Replication — Advanced Features / Петр Зайцев (Percona)
MySQL Replication — Advanced Features / Петр Зайцев (Percona)MySQL Replication — Advanced Features / Петр Зайцев (Percona)
MySQL Replication — Advanced Features / Петр Зайцев (Percona)
 
Внутренний open-source. Как разрабатывать мобильное приложение большим количе...
Внутренний open-source. Как разрабатывать мобильное приложение большим количе...Внутренний open-source. Как разрабатывать мобильное приложение большим количе...
Внутренний open-source. Как разрабатывать мобильное приложение большим количе...
 
Подробно о том, как Causal Consistency реализовано в MongoDB / Михаил Тюленев...
Подробно о том, как Causal Consistency реализовано в MongoDB / Михаил Тюленев...Подробно о том, как Causal Consistency реализовано в MongoDB / Михаил Тюленев...
Подробно о том, как Causal Consistency реализовано в MongoDB / Михаил Тюленев...
 
Балансировка на скорости проводов. Без ASIC, без ограничений. Решения NFWare ...
Балансировка на скорости проводов. Без ASIC, без ограничений. Решения NFWare ...Балансировка на скорости проводов. Без ASIC, без ограничений. Решения NFWare ...
Балансировка на скорости проводов. Без ASIC, без ограничений. Решения NFWare ...
 
Перехват трафика — мифы и реальность / Евгений Усков (Qrator Labs)
Перехват трафика — мифы и реальность / Евгений Усков (Qrator Labs)Перехват трафика — мифы и реальность / Евгений Усков (Qrator Labs)
Перехват трафика — мифы и реальность / Евгений Усков (Qrator Labs)
 
И тогда наверняка вдруг запляшут облака! / Алексей Сушков (ПЕТЕР-СЕРВИС)
И тогда наверняка вдруг запляшут облака! / Алексей Сушков (ПЕТЕР-СЕРВИС)И тогда наверняка вдруг запляшут облака! / Алексей Сушков (ПЕТЕР-СЕРВИС)
И тогда наверняка вдруг запляшут облака! / Алексей Сушков (ПЕТЕР-СЕРВИС)
 
Как мы заставили Druid работать в Одноклассниках / Юрий Невиницин (OK.RU)
Как мы заставили Druid работать в Одноклассниках / Юрий Невиницин (OK.RU)Как мы заставили Druid работать в Одноклассниках / Юрий Невиницин (OK.RU)
Как мы заставили Druid работать в Одноклассниках / Юрий Невиницин (OK.RU)
 
Разгоняем ASP.NET Core / Илья Вербицкий (WebStoating s.r.o.)
Разгоняем ASP.NET Core / Илья Вербицкий (WebStoating s.r.o.)Разгоняем ASP.NET Core / Илья Вербицкий (WebStoating s.r.o.)
Разгоняем ASP.NET Core / Илья Вербицкий (WebStoating s.r.o.)
 
100500 способов кэширования в Oracle Database или как достичь максимальной ск...
100500 способов кэширования в Oracle Database или как достичь максимальной ск...100500 способов кэширования в Oracle Database или как достичь максимальной ск...
100500 способов кэширования в Oracle Database или как достичь максимальной ск...
 
Apache Ignite Persistence: зачем Persistence для In-Memory, и как он работает...
Apache Ignite Persistence: зачем Persistence для In-Memory, и как он работает...Apache Ignite Persistence: зачем Persistence для In-Memory, и как он работает...
Apache Ignite Persistence: зачем Persistence для In-Memory, и как он работает...
 
Механизмы мониторинга баз данных: взгляд изнутри / Дмитрий Еманов (Firebird P...
Механизмы мониторинга баз данных: взгляд изнутри / Дмитрий Еманов (Firebird P...Механизмы мониторинга баз данных: взгляд изнутри / Дмитрий Еманов (Firebird P...
Механизмы мониторинга баз данных: взгляд изнутри / Дмитрий Еманов (Firebird P...
 

TopRater.com Машинное понимание миллионов отзывов / Павел Велихов (TopRater)

  • 1. Павел Велихов, Chief Science Officer @ Toprater.com Миллиард отзывов и комментариев и Big Data Полезные советы, опыт и грабли по продвинутому NLP на больших объемах данных
  • 2. Toprater.com - площадка, где собираются мнения со всего интернета относительно любых объектов e-commerce. Первый шаг - собрать существующие мнения и их проанализировать. Нас интересуют сотни и тысячи критериев, о которых писалось в отзывах и которые помогают выбрать лучшее
  • 3. Как пользоваться такой системой? ❖ Хочу поехать на лыжах покататься, но чтобы был бассейн для детей и аниматоры, которым их сдать. А ночью танцы! ❖ Хочу фильм с самым классным 3D, где мощно бьются на мечах и много крови!
  • 4. Western sentimental orchestral melodies permeating every last gouge and lunge, and especially throughout the sentimental scenes at the end.
  • 5. Надо просто понимать отзывы :) ❖ Отзывы могут быть: ❖ Фейковые ❖ Саркастические/Юморные ❖ Написаны на языке Engrish ❖ и так далее ❖ После этого - загоняем данные в поисковик, и все!
  • 6. ❖ “It is day 87 and the horses have accepted me as one of their own. I have grown to understand and respect their gentle ways. Now I question everything I thought I once knew and fear I am no longer capable of following through with my primary objective. I know that those who sent me will not relent. They will send others in my place... But we will be ready” Amazon: Accoutrements Horse Head Mask Не все отзывы оказываются полезными :)
  • 7. Как понять смысл отзыва ❖ Научное название: Aspect-based sentiment analysis + information extraction ❖ Задача сложная (вообще-то нерешаемая), но оказывается достаточно высокой точности добиться можно. ❖ Для решения в ход идет все из арсенала NLP (Natural Language Processing): ❖ грамматический разбор, онтологии, словари, ручные системы, векторные представления слов и фраз, “традиционное” и глубокое обучение.
  • 8. Постановка задачи Если вы ищете спокойную гостиницу для отдыха с детьми, вам не сюда. Отличный отель, уютные просторные комнаты, но в ресторане шумно и курят. Аспекты Сентименты
  • 10. Данные для машинного обучения ❖ Если уже выделен критерий, легко собрать данные по оценке: ❖ Например, берем Amazon Mechanical Turk ❖ Кидаем туда задания, платим $0.01 за каждый ответ ❖ Несколько раз дублируем задание, чтобы не было левых ответов ❖ Можно даже потом сравниться с бенчмарками (но есть проблемы, написал пост на linkedin: “Something is really wrong with sentiment analysis and nobody seems to notice”). ❖ Для задачи выделения критерия - все сложнее, легче делать своими людьми
  • 11. Попробуем простое решение: ❖ По старинке (например, как в курсе у Ng): ❖ Берем простую модель bag-of-words: ❖ Строим классификатор в аспекты ❖ Вычисляем тональность каждого аспекта Модель: {“был”, ”а”, ”но”, “номер”, “удобным”, “ресторан”, “прокуренным”, “приятный”}
  • 12. Попробуем простое решение: ❖ По старинке (например, как в курсе у Ng): ❖ Берем простую модель bag-of-words: ❖ Строим классификатор в аспекты ❖ Вычисляем тональность каждого аспекта Модель: {“был”, ”а”, ”но”, “номер”, “удобным”, “ресторан”, “прокуренным”, “приятный”} Текст: “Номер был удобным, но прокуренным, а ресторан приятный”
  • 13. Более продвинутый NLP ❖ Части речи: существительное, глагол, прилагательное, наречие и т.п. ❖ Омонимия (разные значения одного слова): ❖ пример: Картина ❖ - картина на стене (“на стене висит картина”) ❖ - фильм (“снял хорошую картину”) ❖ - ситуация (“картина событий последних дней Помпей”) ❖ В английском тексте ~ 40% слов омонимичны (!) ❖ Грамматический разбор. Тут обычно 2 варианта: ❖ Constituency Tree ❖ Dependency Tree
  • 14. Пример dependency tree Very nice hotel with clean rooms, but we didn't like the restaurant Части речи Зависимости
  • 15. Точность разбора ❖ Стэнфорд дает около 92-93% точности ❖ .92^20 = 18% ❖ То есть обязательно накосячит в достаточно длинном предложении ❖ Еще одна причина не налегать 100% на результаты парсера
  • 16. Небольшая экскурсия в Deep Learning ❖ Основные ключевые идеи Deep Learning для NLP: ❖ word embeddings. word2vec - только начало ❖ Recurrent NNs ❖ LSTM ❖ Recursive NNs
  • 17. Deep Learning: Embeddings wt-2 wt-1 wt wt+1 wt+2 wt Размерность = 50…300 Слово, чье скалярное произведение с wt максимально
  • 18. Интересные под-пространства word2vec PCA проекция на 2-х мерное пространство
  • 19. Есть и проблемы: Упс, мы сами не можем разделить классы, ну и ни один алгоритм не сможет
  • 20. Deep Learning: Embeddings ❖ Семантическое пространство слов ❖ Но: ❖ Омонимия? ❖ Разные подпростанства, насколько они хороши? Не очень, но их можно подчинить, задав априорные знания ❖ Например синтаксические подпростанства можно с дополнением частей речи делать ❖ Смешанные модели (слова + символы)
  • 21. Интеграция prior knowledge в word2vec ❖ Пихать в word2vec еще и разного рода ограничения: ❖ принадлежность к одному классу = минимальное расстояние ❖ если класс маленький - более сильное ограничение ❖ если большой - не так страшно
  • 22. Deep Learning: примитивное использование ❖ word2vec - просто признак для машинного обучения в модели bag-of-words. Не очень, даже кластеризация - лучше ❖ С текстом мы имеем дело с последовательностью слов, имеет смысл word2vec грамотнее. ❖ В глубоком обучении очень простая модель: рекурентная нейронная сеть.
  • 23. Recurrent Neural Network Fruit flies like napalm in the morning Классификатор или Регрессор
  • 24. LTSM ❖ С рекуррентными сетями есть проблемы ❖ По сути, они почти ничего не запоминают ❖ LTSM: Long Term Short Memory ❖ Отдельные нейроны (gates) в сети отвечают за память: ❖ Запись, чтение, keep ❖ При эксплуатации - понятно, что это значит ❖ При тренировке - помогают правильно отправить ошибку назад в прошлое
  • 25. LTSM мини-пример input P Write Keep также называют input gate также называют forget gate P Sum P Read также называют output gate
  • 28. Что мы имеем с DL для NLP? ❖ Обычная история с DL - тренируем на огромных объемах на GPUs, потом эксплуатируем на CPU ❖ В NLP (особенно LSTM и Recursive NNs) - сложно переложить на GPU + алгоритм тренировки backprop во времени или по структуре, да еще и embeddings. Например, пока Theano грандиозного выигрыша не дает ❖ Плюс: если хотите использовать bleeding edge - надо писать все самим. Иначе 1-2 годовалой давности алгоритмы
  • 29. Перейдем к теме Big Data! ❖ Изначально отзывы занимают какие-то GB ❖ Но “готовый” корпус занимает беспрецедентные объемы данных, например: ❖ 20 тыс предложений = 400Mb данных ❖ В production - поменьше (не всегда), но просто раздать людям поиграться - уже накладно ❖ Как организовать хранение и обработку данных, чтобы было возможно ставить много экспериментов и быстро внедрять в production?
  • 30. Big Data: первый блин ❖ 200 машин на Google Cloud ❖ Cassandra на выделенном сервере ❖ GNU Parallel ❖ Новые пакеты Stanford NLP увеличили производительность в 50-100x ❖ Зато в это время мы прикрутили свой deep learning и другие недешевые алгоритмы ❖ Все равно дешевле свой кластер на Hetzner
  • 31. Текущая архитектура Big Data ❖ Кластер на “дорогих” машинах ❖ Хранение - Cassandra ❖ Быстрая запись и чтение, как последовательное, так и по ключу, масштабируется ❖ Колоночное хранение с компрессией - очень удачно подходит для такого класса задач ❖ Параллельная обработка ❖ Apache Spark - сейчас только для структурированных данных, были проблемы с Cassandra ❖ GNU Parallel + HDFS, в будущем - миграция на Spark
  • 32. Неожиданный классный инструмент ❖ У нас куча разных обработчиков на разных языках (C,Java,Jython,Python,Julia), интегрировать легче всего через раздачу id в Cassandra и параллельной обработкой ❖ get_ids | parallel -j 8 -S $SERVERS --progress my_script {} ❖ Очень удобно, если надо быстро (буквально минуты) что-то запустить ❖ Может стать долгосрочным временным решением! :) ❖ Планируем переход на Apache Spark в будущем, но пока глючил драйвер Cassandra, решили подождать
  • 33. Кроме отзывов, еще куча структурированных данных ❖ Apache Spark + GreenplumDB ❖ GreenplumDB - параллельная SQL СУБД класса Vertica, Redshift, т.п. ❖ Совсем недавно вышла в open-source ❖ 2 типа хранилища: ❖ Распределенное кортежное (tuple-based) ❖ Распределенное колоночное с компрессией ❖ По скорости намного медленнее, чем Cassandra для массивно- параллельной записи (MVCC, что делать), но отлично выполняет сложные SQL на больших объемах. + не надо бэкапить!
  • 34. Спасибо за внимание! Вопросы и Ответы https://ru.linkedin.com/in/velikhov Общие вопросы: feedback@toprater.com Для команд: startup@toprater.com