Моделиране на теми и откриване на аномалии

Въведение
Живеем в ерата на данните. Използвайки самообучаващите се алгоритми от областта на машинното обучение, можем да превърнем тези данни в знания. Вместо да изисква хората ръчно да извличат правила от анализирането на големи количества данни, машинното обучение предлага по-ефективна алтернатива за улавяне на знания от данни. Благодарение на машинното обучение се радваме на надеждни филтри за нежелана поща, удобен софтуер за разпознаване на текст и глас, надеждни уеб търсачки и т.н. Най-важното е, че създаваме бизнес стойност от данни.

Относно проекта
Целта на машинното обучение в приложението 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 месеца непрекъснато. Ако/Когато той/тя спре, това ще бъде аномалия.

Ако потребителите започнат да говорят за нови теми, това също ще бъде аномалия при първото откриване, но тъй като ние актуализираме нашите модели всеки месец с нови данни от застой, аномалията ще намалее, ако потребителят продължи да обсъжда темата.

Стъпка 4

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

Въпреки че илюстрацията на стъпките на машинното обучение (Фигура 1) препоръчва анализ преди визуализация, открих, че правенето му „от другата страна“ ми помага да получа по-ясна картина по-бързо.

Резултатите от алгоритъма за откриване на аномалия се записват в база данни и се представят с Power BI. Например, имаме един потребител на изображението по-долу.

Стъпка 5

Анализ

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

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

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

Заключение

И накрая, нашият модел на поток от данни изглежда като този на изображението по-долу.

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

Алгоритмите за ML откриват модели в данните, които хората не могат (или поне не в разумен срок). Доказано е, че тези алгоритми могат да апроксимират всяка непрекъсната функция. По този начин, ако можем да опишем някакъв проблем с функция, това означава, че можем да използваме ML алгоритъма за решаване на проблема. Единственият оставащ въпрос тогава би бил дали сме задали правилните въпроси, за да получим отговора, който искахме.