TopRater.com Машинное понимание миллионов отзывов / Павел...
-
Upload
ontico -
Category
Engineering
-
view
828 -
download
7
Transcript of TopRater.com Машинное понимание миллионов отзывов / Павел...
Павел Велихов, 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
Общие вопросы: [email protected]
Для команд: [email protected]