Тематическое моделирование и обнаружение аномалий

Введение
Мы живем в век данных. Используя алгоритмы самообучения из области машинного обучения, мы можем превратить эти данные в знания. Вместо того, чтобы требовать от людей вручную вывести правила из анализа больших объемов данных, машинное обучение предлагает более эффективную альтернативу для сбора знаний из данных. Благодаря машинному обучению мы пользуемся надежными фильтрами спама в электронной почте, удобным программным обеспечением для распознавания текста и голоса, надежными поисковыми системами в Интернете и т. Д. Что наиболее важно, мы создаем ценность для бизнеса из данных.

О проекте
Целью машинного обучения в приложении Slack является прогнозирование и анализ возможной текучести кадров с использованием различных алгоритмов машинного обучения для данных Slack и базы данных компании. В этом блоге будет рассказано о процессе анализа данных Slack.

Использовались два типа алгоритмов:

  1. Тематическое моделирование
  2. Обнаружение аномалий в ранее созданных темах

При использовании процесса машинного обучения рекомендуется выполнять следующие действия:

Итак, давайте рассмотрим, как это делается, шаг за шагом.

Шаги 1 и 2

Получение и очистка данных

Библиотека Slacker используется для получения данных из Slack API. Мы перебрали все каналы и извлекли User ID, сообщения и даты сообщений. Это состояние данных называется необработанным, и каждое сообщение очищается с помощью регулярного выражения, поэтому остаются только слова.

Шаг 3.1

Тематическое моделирование

Сначала мы загружаем необработанные данные и токенизируем их. В процессе токенизации нам нужно удалить общие слова, такие как 'the', 'is', 'are' (также включены некоторые общие слова нашего родного языка) и корень каждого слова (основа слова является частью слова - ожидал, ждет и ожидание будет преобразовано в ожидание). Так мы делаем «жетоны», то есть слова.

Далее мы строим словарь из наших токенов. В нашем словаре каждое слово представлено числом. На основе словаря строим корпус. Корпус представляет собой структуру мешка слов, в которой каждое слово сопоставляется с его частотой - список (word_id, word_frequency)

Теперь нам нужно построить модель машинного обучения и сопоставить данные. Мы использовали модель скрытого распределения Дирихле (LDA) для создания 200 тем из резервных каналов (параллельная реализация). Выполнение алгоритма занимает около 1 часа.

На рисунке 4. показано создание тем из документа. Мы можем представить все темы как точки в n-мерном пространстве, где количество измерений равно количеству слов в нашем словаре. Затем, когда приходит новый текст или сообщение, нам нужно поместить сообщение в это n-мерное пространство, то есть рассчитать вероятность того, что это сообщение принадлежит определенной теме.

Модель LDA будет генерировать 200 тем из всех сообщений. После этого мы можем передать модели любое сообщение, и она вернет вероятность того, что это сообщение принадлежит одной или нескольким конкретным темам.

Шаг 3.2

Обнаружение аномалии

В этом контексте обнаружение аномалии представляет собой изменение поведения пользователя в отношении вещей и тем, о которых он говорит или о которых говорил.

Во-первых, нам нужно создать базовые модели для всех пользователей. Опять же, мы возьмем необработанные данные о резерве и передадим их через модель LDA, чтобы определить вероятность принадлежности пользователя к определенной теме. Для обнаружения аномалий мы используем метод ансамбля, называемый Isolation Forest. На изображении ниже показано, как алгоритм Isolation Forest обнаруживает аномалии.

В нашем случае Isolation Forest обнаружит (для пользователя) аномалию, если он / она начнет новую тему или перестанет говорить об определенной теме (ах).

Например, представьте, что у вас есть сотрудник, который любит говорить о книгах, и он / она говорит об этом в течение 5-6 месяцев непрерывно. Если / когда он / она остановится, это будет аномалия.

Если пользователи начнут говорить о новых темах, это также будет аномалией при первом обнаружении, но поскольку мы обновляем наши модели каждый месяц новыми данными из Slack, аномалия уменьшится, если пользователь продолжит обсуждение темы.

Шаг 4

Визуализация

Хотя иллюстрация шагов машинного обучения (рис. 1) рекомендует анализ перед визуализацией, я обнаружил, что «наоборот» помогает мне быстрее получить более четкую картину.

Результаты алгоритма обнаружения аномалий сохраняются в базе данных и представляются в Power BI. Например, у нас есть один пользователь на изображении ниже.

Шаг 5

Анализ

На рисунке 6 мы видим, что в апреле есть некоторые аномалии, но эти аномалии следуют за рядом входных данных, поэтому мы можем сделать вывод, что это не проблема.

Можно сказать, что у нас есть достойные результаты, хотя мы не уделили слишком много внимания подготовке данных. Например, мы не включали реакцию пользователей на сообщения.

Кроме того, самой большой проблемой для приложений такого типа является проблема двух (или даже более) языков. Очевидно. Из-за двух языков наша модель создаст две одинаковые темы на разных языках. В качестве решения мы могли бы использовать Google Translate API или создать собственный с помощью глубокого обучения. Первое решение может привести к тому, что оно займет много времени, а второе может привести к нехватке данных.

Заключение

Наконец, наша модель потока данных выглядит как на изображении ниже.

Как правило, важно обрабатывать данные, преобразовывать их в полезные функции для алгоритма машинного обучения. Будьте готовы потратить большую часть своего времени на подготовку данных (около 80% времени). Невозможно охватить все ситуации, в которых применимо ML. Конкретная проблема будет определять все - как будет использоваться результат, какие значения должна прогнозировать модель машинного обучения и как ее следует откалибровать, какие данные собирать и обрабатывать, какие алгоритмы тестировать и многие другие вопросы.

Алгоритмы машинного обучения находят в данных закономерности, которые люди не могут (или, по крайней мере, не в разумные сроки). Было показано, что эти алгоритмы могут аппроксимировать любую непрерывную функцию. Таким образом, если мы могли описать любую проблему с помощью функции, это означает, что мы можем использовать алгоритм машинного обучения для решения проблемы. Единственный оставшийся вопрос тогда будет заключаться в том, правильно ли мы задали вопросы, чтобы получить требуемый ответ.