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

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

Тематическое моделирование - это процесс определения тем в документе. С увеличением количества оцифрованного текста, такого как электронные письма, твиты, книги, журналы, статьи и многое другое, тематическое моделирование остается одним из наиболее важных методов идентификации и автоматизации классификации таких документов по категориям или темам, где это необходимо. Существует множество стандартных методов подхода к тематическому моделированию, среди которых самые популярные: Скрытое распределение Дирихле (LDA) и Неотрицательная матричная факторизация (NMF).

И LDA, и NMF являются стандартными реализациями в библиотеке python scikit и широко используются в сообществе специалистов по науке о данных. Эти методы представляют собой алгоритмы обучения без учителя, которые генерируют множество взаимосвязанных тем и сильно зависят от предположений, которые он делает о наборе данных. Однако у этих методов есть ограничения, когда дело доходит до обобщения основных деталей и сложных предположений, касающихся процесса генерации данных. В некоторых случаях из-за большой размерности данных, вводимых людьми, эти модели приводят к неверным предположениям.

В этой статье мы исследуем пакет CorEx, который позволяет в некоторой степени контролировать темы, создаваемые моделью.

Объяснение корреляции (CorEx)

Correlation Explanation (CorEx) - это гибкая структура, разработанная Грегом Вер Стигом для тематического моделирования для определения тем, которые максимизируют информацию, доступную в корпусе текста. Модель CorEx позволяет включать знания предметной области с помощью специфичных для пользователя якорных слов, которые направляют модель к интересующим темам. Это позволяет модели представлять темы, которые не возникают естественным образом, и дает возможность разделять ключевые слова, позволяя идентифицировать отдельные темы.

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

Как использовать CorEx?

Реализация CorEx на Python доступна на Github.

Вы можете установить CorEx на свой питон с помощью команды pip.

pip install corextopic

Ниже приведены примеры тематического моделирования с использованием стандартного неконтролируемого метода, такого как LDA и NMF.

Тематическое моделирование с использованием LDA

from sklearn.decomposition LatentDirichletAllocation as LDA

no_of_topics = 4
tfidf = TF-IDF matrix of your documents
# Run LDA
lda = LDA(n_topics=no_of_topics).fit(tfidf)
# Display top n words for each topic identified
def display_topics(model, features, words_count):
    for topic_no, topic in enumerate(model.components_):
        print("Topic %d:" % (topic_no))
        print(" ".join([features[i] for i in topic.argsort()[:-words_count - 1:-1]])

words_count = 10
# Display top 10 words for each topic
display_topics(lda, tfidf_feature_names, words_count)

Тематическое моделирование с использованием NMF

from sklearn.decomposition import NMF

no_of_topics = 4
tfidf = TF-IDF matrix of your documents
# Run NMF
nmf = NMF(n_components=no_of_topics).fit(tfidf)
# Display top n words for each topic identified
def display_topics(model, features, words_count):
    for topic_no, topic in enumerate(model.components_):
        print("Topic %d:" % (topic_no))
        print(" ".join([features[i] for i in topic.argsort()[:-words_count - 1:-1]])

words_count = 10
# Display top 10 words for each topic 
display_topics(nmf, tfidf_feature_names, words_count)

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

Тематическое моделирование с использованием объяснения корреляции преодолевает это ограничение с помощью ключевых слов привязки, как показано в примере ниже:

from corextopic import corextopic as ct

no_of_topics = 4
anchor_strength = 3
tfidf = TF-IDF matrix of your documents
# Anchor Keywords
keywords =   [
              ["congress", "clinton", "trump"],
              ["bible", "christian", "muslim", "hindu"],
              ["circuit"],
              ["pitching","goal"]
             ]
# Run Anchored CorEx
topic_model = ct.Corex(n_hidden=no_of_topics)
topic_model.fit(tfidf, anchors = keywords, anchor_strength = anchor_strength);
# Display top n words for each topic identified
def display_topics(model, words_count):
     for i, topic_words in enumerate(model.get_topics(n_words = words_count)):
         topic_words = [words[0] for words in topic_words if words[1] > 0]
         print("Topic #{}: {}".format(i+1, ", ".join(topic_words)))
words_count = 10
# Display top 10 words for each topic 
display_topics(topic_model,words_count)

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

Образец записной книжки для CorEx от Райана Галлахера доступен по этой ссылке.

Что мы делаем в версии 1?

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

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