Неформальное введение в вероятностное тематическое моделирование

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

Если мы имеем дело с числовыми переменными, такими как возраст или вес, исследование относительно легко: найти минимум, максимум, среднее и медиану переменной уже достаточно, чтобы понять, как эта переменная распределяется по нашей выборке. В случае категориальных переменных, таких как национальность или пол, мы можем ранжировать их по частоте - или сгруппировать числовые переменные по категориям, чтобы узнать, как эти категории являются «сформированными».

Однако когда мы имеем дело с неструктурированными (или не табличными) данными, такими как текст, все становится сложнее. Допустим, в нашей таблице есть столбец с именем электронная почта, где каждая строка представляет собой сообщение, отправленное нам клиентом. Как нам вычислить «среднее значение» этого столбца? Другими словами, как мы суммируем содержание наших сообщений электронной почты, не читая их все?

Тематическое моделирование пытается ответить на поставленный выше вопрос, определяя основные темы - или темы - которые появляются в нашем наборе документов, где «документ» может быть любым текстом. объект, например электронное письмо, текстовое сообщение, заметка колл-центра или отчет.

Что такое тема? Если мы хотим, чтобы компьютер находил темы, нам нужно выразить понятие «тема» строго и формально. Мы не можем просто сказать компьютеру: «Иди и найди похожие концепции». Вот почему нам нужна математическая модель темы.

Написание случайного электронного письма

Скрытое распределение Дирихле (LDA) сообщает нам, что каждое сообщение электронной почты можно рассматривать как последовательность бросков костей. Как?
Для простоты предположим, что мы можем использовать только 6 слов, чтобы написать очень короткое электронное письмо. Мы можем использовать одиночный кубик, где каждая грань соответствует слову.

Что произойдет, если я брошу кубик 3 раза? Мы можем получить некоторые странные последовательности, например:

копия ремонтной обложки

Но мы также можем получить что-то более понятное, например:

котел требует ремонта

Давайте тогда поставим грузы на поверхности бойлера, необходимости и ремонта. Таким образом, наша взвешенная матрица будет с большей вероятностью выдавать содержательные фразы, относящиеся к теме «ремонт котла».

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

Изучение тем

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

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

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

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

Это означает, что у нас может получиться два кубика, как на рисунке 2, плюс третий, выглядящий следующим образом:

Изучив веса, мы можем сделать вывод, что 3 темы в нашем наборе сообщений - это «ремонт котла», «копия счета» и «крышка котла». И нам не пришлось ничего читать!

Многотемные сообщения

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

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

В этой конфигурации каждое слово будет иметь одинаковый шанс быть взятым из темы 1 или темы 2. Однако мы также можем добавить вес монеты, чтобы наша предвзятая монета могла выбрать тему больше чаще, чем другое: 80% мы могли сгенерировать сообщение о «ремонте котла» и 20% о «покрытии котла». Этот вес можно вычислить с помощью тех же алгоритмов, которые мы упоминали на этапе построения игральных костей: фактически, все веса вычисляются одновременно.

Увеличение масштаба

В реальной жизни мы далеко не уедем, используя всего шесть слов. Чтобы написать сообщение на английском, нам понадобится кубик на 180 000 граней. Мало того: у нас могут быть десятки тем во всех наших документах, поэтому нам понадобится еще одна, скажем, 100-гранная матрица вместо простой монеты.

К счастью, это то, что мы можем сделать, запустив LDA на компьютере: построение специальных игральных костей, то есть оценка распределения вероятностей. В конце концов, стандартный кубик - это не что иное, как равномерное распределение вероятностей по 6 различным значениям. Тема на английском языке - это неравномерное распределение вероятностей более 180 000 различных значений (слов). Документ может иметь неравномерное распределение вероятностей по 50 различным темам. По крайней мере, это то, что предполагает скрытое распределение Дирихле.

Выводы - что дальше?

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

В следующем посте я хотел бы пройти пошаговую реализацию LDA в Python с использованием Scikit-Learn и pyLDAvis, с разделом о том, как создать отчет, в котором каждый документ помечен назначенными темами. .