В конце концов, научные статьи LDA понять несложно…

Авторы Прасун Бисвас и Чандан Дурджа

Люди постоянно пытались добраться до основных движущих сил (основных мотивов) любой проблемы. Это одна из основных причин, по которой любые решения для аналитики превосходят другие области по своей красоте. Аналитические решения в большинстве форм пытаются захватить верхние «n» драйверов затронутой переменной или попытаться отнести переменные к определенным категориям. С точки зрения бизнеса, нетрудно понять, что не может быть лучшей песни для ушей руководства, если можно получить правильный список причин проблемы.

Поверьте, это не решение, которое сложно, а точное знание того, что решать (драйверы), что сложно.

С точки зрения НЛП, найти ключевые движущие силы / темы через текстовый контент, не зная многого, можно достичь с помощью концепции «тематического моделирования», которая обычно решается с помощью техники LDA (латентного распределения Дирихле). Знание деталей техники LDA не только помогает лучше понять неконтролируемую классификацию при моделировании текста, но и дает другую точку зрения на понимание неконтролируемого обучения.

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

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

Решение возникло в ударе и испытании.

Предположим, что существует 4 документа, и мы намерены назначить одну из трех тем (тема №1, тема №2, тема №3) этим документам. В данном контексте «преследование и испытание» будет означать выполнение следующих шагов:

1. Распределение тем по словам: просмотрите все документы (документ №1-документ №4) и «случайным образом» назначьте тему для каждого слова в каждом из документов. . В качестве примера предположим, что у нас есть всего 6 слов в документах. Назначение тем для каждого слова приводит к созданию распределения темы по словам.

2. Распределение документов по темам: «Случайным образом» назначьте темы набору документов. На рисунке ниже случайным образом документу №1 в основном назначается тема №2 с небольшими добавками темы №1 и темы №3. Опять же, обратите внимание, что это приводит к распределению тем по документам, как показано в правой части рисунка ниже.

3. Создание документа путем объединения дистрибутивов: Для создания документа с использованием этих дистрибутивов мы используем оба дистрибутива из №1 и №2 и случайным образом выбираем элементы из обоих дистрибутивов. Опять же, в этом примере предполагается, что каждый документ представляет собой документ из 10 слов. Как показано на рисунке ниже, для первого случайного выбора мы выбираем T2 (Тема 2), а в теме 2 мы случайным образом выбираем слово «Word 3». На основе этого мы создаем документ из 10 слов, соответствующий документу №1.

Несомненно, этот документ будет бессмысленной тарабарщиной.

4. Сопоставьте документ, созданный LDA, с фактическим документом: Затем созданный на шаге 3 документ сравнивается с фактическим документом. Здесь, если предполагаемое распределение темы и слов верны, сгенерированный документ будет полностью соответствовать фактическому документу.

5. Повторите шаги с 1 по 4 для всех возможных случайных комбинаций отображения «Темы в слова» и «Темы в документ». Сравните сгенерированные документы с фактическим документом №1, документ с лучшим сравнением (хотя уровень сходства будет небольшим) соответствует распределению «правильная тема» и «правильные слова». На приведенном ниже рисунке сгенерированный документ B наиболее точно соответствует фактическому документу.

Делая ставки здесь, у вас в голове сейчас 2 мысли:

а. Концептуально решение выглядит нормально.

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

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

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

a. Распределение Дирихле: Распределение Дирихле, говоря простыми словами, пытается гарантировать, что присвоение элемента категориям будет «менее двусмысленным». На рис. 1а и 2а заштрихованная область коричневого цвета в середине треугольника и шестиугольника изображает ограничение, наложенное распределением Дирихле. Когда элементы вписываются в распределение Дирихле, тогда элементы концентрируются больше на краях, чем в центре, что делает распределение специфичным и менее неоднозначным. Обратите внимание, что это можно откалибровать на основе параметров распределения. (Параметры Дирихле - см. Подробности в пункте #c ниже)

b. Уравнение из литературы: Математика, связанная с LDA, описывается с помощью следующего уравнения. Компоненты уравнения могут быть связаны с предыдущим обсуждением следующим образом

c. Ассоциативная диаграмма из литературы: Обычно можно найти приведенную ниже диаграмму в литературе, посвященной LDA. Ниже мы связали компоненты диаграммы с частями предыдущего обсуждения. Обратите внимание, что на рисунке ниже α и β показаны параметры Дирихле. Эти параметры Дирихле определяют область коричневой заштрихованной области на рис. 1 (а) и рис. 2 (а).

Питонический путь

Если вы нашли данную теорию ошеломляющей, то хорошей новостью является то, что кодирование LDA на Python является простым и интуитивно понятным. Следующий код Python помогает разработать модель, визуализировать темы и пометить темы в документах.

1. Получение данных

df = pd.read_csv (r’path \ dataset_name.csv ’)

2. Очистка и обработка данных

# Очистить текстовое поле и подготовить данные для моделирования

стоп-слово (df)

regex_email (df)

regex_newline (df)

regex_singlequote (df)

regex_underscore (df)

regex_hyphen (df)

regex_hashtag (df)

regex_link (df)

regex_wordsandletters (df)

func_lemma (df)

func_stem (df, ’Портер’)

# Создайте токены и определите словарь для моделирования темы на чистом тексте

tokens = df [‘text_field’]. apply (lambda x: x.split ())

Dictionary = corpora.Dictionary (pd.Series (токены))

doc_term_matrix = [dictionary.doc2bow (rev) для rev в токенах]

3. Оптимальный выбор # темы

# Вычислить показатель согласованности, чтобы выбрать оптимальное количество тем

def compute_coherence_values ​​(словарь, корпус, тексты, предел, начало, шаг):

coherence_values ​​= []

model_list = []

для num_topics в диапазоне (начало, предел, шаг):

model = LDA (corpus = doc_term_matrix, id2word = dictionary, num_topics = num_topics, random_state = 100, chunksize = 1000, pass = 15)

model_list.append (модель)

coherencemodel = CoherenceModel (модель = модель, тексты = токены, словарь = словарь, согласованность = ’c_v’)

coherence_values.append (coherencemodel.get_coherence ())

вернуть список_моделей, coherence_values

# Запуск может занять много времени.

model_list, coherence_values ​​= compute_coherence_values ​​(словарь = словарь, корпус = doc_term_matrix, тексты = токены, start = 2, limit = 40, step = 6)

# Показать график

limit = 40; start = 2; step = 6;

x = диапазон (начало, предел, шаг)

plt.plot (x, coherence_values)

plt.xlabel («Количество тем»)

plt.ylabel («Оценка когерентности»)

plt.legend ((«coherence_values»), loc = ’best’)

plt.show ()

Из приведенного выше графика, поскольку оценка согласованности выше в 7-й теме, оптимальное количество тем будет 7.

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

# Создание объекта для модели LDA с использованием библиотеки gensim

LDA = gensim.models.ldamodel.LdaModel

lda_model = LDA (corpus = doc_term_matrix, id2word = dictionary, num_topics = 7, random_state = 123, chunksize = 700, pass = 50)

lda_model.print_topics ()

# Визуализируйте темы

pyLDAvis.enable_notebook ()

vis = pyLDAvis.gensim.prepare (lda_model, doc_term_matrix, словарь)

вис

Перейдите от пункта 2 к пункту 4, чтобы точно настроить модель.

5. Назначение темы

all_topics = lda_model.get_document_topics (doc_term_matrix, minimum_probability = 0.0)

all_topics_csr = gensim.matutils.corpus2csc (all_topics)

all_topics_numpy = all_topics_csr.T.toarray ()

all_topics_df = pd.DataFrame (all_topics_numpy)

topic = all_topics_df.idxmax (axis = 1) # получить доминирующую тему

# Формат

all_topics_df_1 = all_topics_df.reset_index ()

topic_1 = topic.reset_index ()

final = pd.merge (all_topics_df_1, topic_1, on = ’index’)

Заключительные замечания. С LDA связано большое количество вариантов использования, некоторые из которых - это классификация вопросов обслуживания клиентов по темам, классификация отзывов клиентов на веб-сайтах электронной коммерции, таких как Amazon и т. д. конкурирующие методологии неконтролируемой классификации текста, такие как LSI, иерархический LDA и т. д. Однако практики продолжают полагаться на LDA в большинстве случаев использования в отрасли.

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

Использованная литература:

Https://www.jmlr.org/papers/volume3/blei03a/blei03a.pdf

Https://www.youtube.com/watch?v=3mHy4OSyRf0&t=1058s