En

JazzTeam Software Development Company

Agile Java Development

Маркетинговая платформа анализа данных сайта stackexchange.com

Обоснование созданной платформы: в настоящее время системы анализа данных получили широкое распространение:

  1. Корпорации всё большее внимание уделяют анализу своей деятельности с целью оптимизации бизнеса, снижения расходов и, как следствие, повышения прибыли.
  2. Снижение стоимости хранения данных приводит к тому, что данные не удаляются, а сохраняются в архивы. Эта тенденция позволяет осуществлять анализ всё больших и больших объёмов сохранённых данных.
  3. Снижается стоимость вычислительных ресурсов, в том числе предоставляемых через облачные сервисы. При этом нет необходимости в покупке, поддержке и обновлении своих вычислительных систем. Данная тенденция облегчает выход на рынок систем анализа и обработки данных.

Требования к системе:

  1. Возможность масштабирования для сколь угодно больших объёмов данных без необходимости переработки алгоритмов.
  2. При работе системы не должно приостанавливаться функционирование приложения, данные которого анализируем.
  3. Качественая визуализация полученных результатов.
  4. Возможность системы хранить результаты анализа, что позволяет организовать быстрый поиск по результатам.
  5. Возможность развёртывания системы в облачой среде Amazon Web Services.

Краткое описание проекта: cайт stackexchange.com — это растущая сеть сообществ по интересам, обменивающихся между собой информацией по различным направлениям. Цель ресурса — сбор качественных вопросов и ответов на основе опыта каждого сообщества. Сайт вопросов-ответов stackexchange.com по своей сути является динамическим источником знаний. Поскольку сообщество наполняет сайт информацией ежедневно, сайт можно считать слепком актуальных знаний на сегодняшний день.

Интерес к структурированию информации и получению общей картины может возникать во многих случах:

  1. Я, как производитель комплектующих для велосипедов, делаю маркетинговое исследование: какие вопросы наиболее волнуют людей и какие недостатки они обсуждают в комплектующих. Я хочу это использовать для улучшения продукции, либо как упор для рекламной компании.
  2. Я хочу написать книгу по заданной тематике, например Иудейство. Помимо анализа литературных источников меня интересует, какие вопросы наиболее обсуждаемы, чтобы на них ответить в своей книге.
  3. Я, журналист тематического ресурса, хочу знать актуальные обсуждаемые вопросы и писать полезные обзорные статьи, которые бы привлекали большое внимание и увеличивали популярность моего ресурса.

Технологии и платформы:

Big data analyses: Apache Hadoop, Apache Mahout (machine learning library)
Cloud services: Amazon Elastic Map Reduce, Amazon S3, Amazon EC2 (for databases and web applications)
Databases: Neo4j graph database, MongoDB cluster
Java and Web technologies: core Java, Map-Reduce API, Struts 2, AngularJS, D3.js visualization library, HTML, CSS, Twitter bootstrap
Unit-testing: JUnit, MRUnit, Approval tests for Map-Reduce

Архитектура платформы:

Расчёт данных:

Источником данных является дамп stackexchange.com. Для обработки данных используется кластер вычислительных машин, в завимимости от объёма обрабатываемых данных количество машин может быть изменено. Система была задеплоена в облако Amazon, использовался сервис Amazon Elastic Map Reduce, предоставляющий Hadoop-кластеры по требованию.

Поверх вычислительных машин развёрнута распределённая файловая система HDFS. Данная система позволяет хранить файлы большого размера одновременно на нескольких машинах, а также выполнять репликацию данных. Поверх HDFS развёрнут фреймворк Apache Hadoop, который позволяет запускать распределённые вычисления в кластере, пользуясь локальностью данных. Поверх кластера вычислительных машин и фреймворка Apache Hadoop расположено приложение для анализа данных, которое содержит реализованные алгоритмы подготовки, обработки и анализа данных. Приложение использует библиотеку алгоритмов машинного обучения Apache Mahout.

Для всех сайтов stachexchange.com данные представлены в едином XML-формате: вопросы, ответы, комментарии, данные пользователей, рейтинги и многое другое.

Алгоритм обработки и анализа данных stackexchange.com:

  1. Подготовка данных для анализа.
  2. Преобразование текста в векторную форму.
  3. Кластеризация вопросов.
  4. Интерпретация результатов.

Подготовка данных:

Алгоритм предобработки текста выглядит следующим образом:

  1. Выделение из текста токенов (слов), разделённых пробелом.
  2. Приведение текста к нижнему регистру.
  3. Удаление частоупотребимых слов, не несущих смысловой нагрузки, таких как "what", "where", "how","when", "why", "which", "were", "find", "myself", "these", "know","anybody"...
  4. Удаление слов, не входящих в рамки по длине.
  5. Приведение слов в начальную форму, отбрасывание окончаний, падежей, суффиксов и так далее. Для приведения слов в начальную форму удобно использовать алгоритм Стеммера Портера.

Кластеризация:

Кластеризацией, или неконтролируемой классификацией текстовых документов, называется процесс распределения множества текстовых документов по группам на основании схожести их содержания. Группы также должны определяться автоматически. Традиционно в качестве модели документа используется линейное векторное пространство. Каждый документ представлялся как вектор, то есть массив всех и наиболее часто встречающихся слов. Затем для расчета используется, например, евклидово расстояние. Векторное представление представляет собой массив всех или наиболее часто используемых слов документа или n-граммов, то есть последовательностей нескольких слов. Для векторизации был выбран алгоритм TF-IDF, так как он учитывает частоту слов относительно всего набора данных и позволяет уменьшить вес частоупотребимых слов, и, наоборот, увеличить вес уникальных слов для каждого вопроса.

Распределённая версия алгоритма кластеризации К-средних выглядит следующим образом:

  1. Выбирается k случайных точек как центры кластеров.
  2. Данные распределяются равномерно по машинам вычислительного кластера.
  3. Каждая машина итеративно обходит все объекты и вычисляет расстояние до ближайшего центра кластера. На выходе записываются пары объект-кластер.
  4. Объекты группируются по новым назначенным кластерам, перераспределяются по вычислительным машинам.
  5. Каждая машина итеративно обходит пары объект-кластер и пересчитывает центры кластеров.
  6. Вычисляется смещение нового центра кластера относительно предыдущего.
  7. Алгоритм повторяется, пока смещение кластеров не станет меньше заданной величины, либо пока не выполнится заданное количество итераций.

Хранение данных:

Результаты анализа хранятся в нескольких базах данных: граф-ориентированной Neo4j и документно-ориентированной MongoDB. Это позволит эффективно хранить структуру и взаимосвязи объектов в виде графа, в то же время хранить содержание объектов — текстов вопросов в виде документов.

Хранение данных в граф-ориентированной БД Neo4j

Хранение данных в граф-ориентированной БД Neo4j

 

Серверы баз данных были развёрнуты в облаке Amazon, использовался сервис Amazon EC2.

Визуализация и перемещение данных:

Отображение результатов в виде схем, графиков и диаграмм выполняет web-приложение. Для перемещения данных в HDFS предусмотрен сервер миграции. После обработки данных результаты сохраняются в HDFS. Для их добавления в базы данных предусмотрена специальная утилита импорта, которая работает поверх Map-Reduce.

На протяжении работы системы поступают обновления данных. При каждом обновлении нет нужды всякий раз переносить все данные снова в HDFS и запускать снова дорогостоящие вычисления. Для решения этой проблемы предусмотрен Redis - база данных, работающая в памяти с высоким быстродействием. Сервер миграции копирует данные информационной системы и сохраняет хеш-ключ каждой записи. При повторной загрузке данных в HDFS сервер миграции проверяет, не была ли текущая запись загружена ранее, выполняя запрос в базу данных, работающую в памяти.

Для отображения результатов было реализовано web-приложение. Серверная часть приложения реализована на языке Java и выполняет запросы к граф-ориентированной и документно-ориентированной БД. Клиентская часть реализована с применением технологий JavaScript (AngularJS, JQuery) и HTML, CSS, Twitter bootstrap.

Один из скринов приложения визуализации. Группы вопросов обозначены кружками, в центре круга ключевое слово для всех вопросов в группе и количество вопросов.

Один из скринов приложения визуализации. Группы вопросов обозначены кружками, в центре круга ключевое слово для всех вопросов в группе и количество вопросов.

Объем данных, обработанных системой:

Объект Объём архива 7z Объём распакованных данных
Дамп всех данных сайта stackexchange.com ~15,7 ГБ ~448 ГБ
Данные сайта stackoverflow.com ~12,1 ГБ ~345 ГБ
Данные сайта serverfault.com ~303 МБ ~8,6 ГБ

Результат проекта: разработанная платформа позволяет выполнить анализ данных сайта stackexchagne.com и увидеть общую картину содержимого сайта. Система выполняет сбор и загрузку исходных данных, подготовку их к обработке, кластеризацию, а также хранение и интерпретацию результатов анализа. В результате разработки системы были решены задачи cбора и загрузки исходных данных, хранение данных на множестве машин, а также защиты от сбоя в случае выхода из строя одного их жёстких дисков, подготовки данных к обработке с применением фильтрации векторизации, обработки данных на кластере из множества машин, хранения и интерпретации результатов. Большое преимущество даёт использование облачных сервисов Amazon так как они избавляют от необходимости настраивать всю инфраструктуру вручную.

Достижения компании на проекте:

  1. Была освоена и внедрена библиотека машинного обучения Apache Mahout.
  2. Успешно внедрена граф-ориентированная база данных Neo4j.
  3. Разработана серия Map-Reduce задач для предобработки данных.
  4. Подобраны оптимальные коэффициенты для алгоритмов машинного обучения.