Павел Велихов, 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

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

  • 1.
    Павел Велихов, ChiefScience Officer @ Toprater.com Миллиард отзывов и комментариев и Big Data Полезные советы, опыт и грабли по продвинутому NLP на больших объемах данных
  • 2.
    Toprater.com - площадка,где собираются мнения со всего интернета относительно любых объектов e-commerce. Первый шаг - собрать существующие мнения и их проанализировать. Нас интересуют сотни и тысячи критериев, о которых писалось в отзывах и которые помогают выбрать лучшее
  • 3.
    Как пользоваться такойсистемой? ❖ Хочу поехать на лыжах покататься, но чтобы был бассейн для детей и аниматоры, которым их сдать. А ночью танцы! ❖ Хочу фильм с самым классным 3D, где мощно бьются на мечах и много крови!
  • 4.
    Western sentimental orchestralmelodies permeating every last gouge and lunge, and especially throughout the sentimental scenes at the end.
  • 5.
    Надо просто пониматьотзывы :) ❖ Отзывы могут быть: ❖ Фейковые ❖ Саркастические/Юморные ❖ Написаны на языке Engrish ❖ и так далее ❖ После этого - загоняем данные в поисковик, и все!
  • 6.
    ❖ “It isday 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.
    Постановка задачи Если выищете спокойную гостиницу для отдыха с детьми, вам не сюда. Отличный отель, уютные просторные комнаты, но в ресторане шумно и курят. Аспекты Сентименты
  • 9.
  • 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 Verynice 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-2wt-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 Fruitflies 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
  • 26.
  • 27.
  • 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.
    Текущая архитектура BigData ❖ Кластер на “дорогих” машинах ❖ Хранение - 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