Практическое сравнение алгоритмов неконтролируемого тематического моделирования

Обзор

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

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

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

Во-первых, давайте подробнее рассмотрим каждый алгоритм:

Скрытое распределение Дирихле (LDA)

Алгоритм LDA моделирует корпус по основному набору тем, используя трехуровневую иерархическую байесовскую модель [1]. Каждая тема имеет распределение вероятностей на основе содержащихся в ней слов. Например, если мы определили с помощью LDA три темы — здоровье, бизнес и электронная коммерция — и применяем LDA для идентификации статьи о текущей бизнес-тенденции, алгоритм может назначить вероятность 0,1 для здоровье, 0,5 для электронной коммерции и 0,9 для бизнеса. Это означает, что статья, скорее всего, о бизнесе, но также может содержать некоторые элементы темы электронная коммерция.

Неотрицательная матричная факторизация (NNMF)

NNMF работает, разбивая большую матрицу данных на две меньшие матрицы, одну для тем, а другую для весов. Ключевой особенностью NNMF является то, что он допускает неотрицательные значения только в двух меньших матрицах, а это означает, что результирующие темы и веса всегда будут неотрицательными и могут быть интерпретированы как вероятности [2]. Это может быть очень полезно при группировании документов, поскольку гарантирует, что каждый документ имеет положительный вклад по каждой из определенных тем.

Уменьшение размерности с помощью усеченного SVD (также известного как LSA)

Усеченная сингулярная декомпозиция (SVD) — это метод, используемый для уменьшения размерности признаков при сохранении наиболее важной информации. Этот метод особенно полезен для анализа текста, когда количество уникальных слов в документе может быть очень большим, но уменьшение количества слов сохранит наиболее важные отношения между ними и сократит время вычислений.

Сравнительный анализ

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

Набор данных

Набор данных Medium Articles, использованный в этом анализе, был получен из Kaggle и содержит около 190 000 строк. Набор данных охватывает различные темы статей, опубликованных в период с 2012 по 2022 год на Medium.

Переменные, включенные в набор данных:

  • title: название статьи.
  • текст: текстовое содержание статьи.
  • url: URL-адрес, связанный со статьей.
  • авторы: авторы статьи.
  • timestamp: дата и время публикации статьи.
  • теги: теги, связанные с каждой статьей.

Для получения более подробной информации о наборе данных см. 190 000+ статей на Medium.

Перед сравнением был проведен EDA для описательного анализа. Вы можете найти подробную EDA в Jupyter Notebook on my GitHub.

Предварительная обработка текста

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

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

  • Нормализация текста.
  • Удалите специальные символы и URL-адреса, используя шаблон регулярного выражения.
  • Токенизировать текст в список слов.
  • Удалить стоп-слова.
  • Лемматизируйте список слов в его корни.

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

Метрика оценки

В неконтролируемом тематическом моделировании нет четкой «правильной» маркировки тем, поэтому сложно оценить производительность моделей с использованием традиционных метрик классификации.

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

Чтобы сравнить показатели согласованности различных алгоритмов, мы будем использовать конвейер согласованности тем Gensim library.

· Примечание. Этот конвейер поддерживает только модель LDA Gensim. Для оценки неподдерживаемых моделей необходимо передать список первых n слов, связанных с темами модели.

Конвейер тематического моделирования

Теперь мы можем построить конвейер и обернуть его функцией;

  • Преобразуйте текстовые данные, используя нашу пользовательскую функцию.
  • Постройте модели, используя каждый из указанных алгоритмов: LDA, NNMF и LSA.
  • Извлеките первые n ассоциированных слов из каждой модели.
  • Постройте верхние n слов, чтобы визуализировать отношения между ними.
  • Рассчитайте баллы согласованности для каждой модели.
  • Сохраните каждую оценку согласованности модели.

Практическая реализация этих шагов:

def topic_modeling_pipeline(df=text):
    '''
    Description: topic modeling pipeline for 3 algorithms.

    INPUT:
        - df(dataframe): A dataframe containing text data.

    OUTPUT:
        - df_results(dataframe): A dataframe containing the results 
          of each model and its coherence score.

    '''
    # set vectorizer to custom function
    vectorizer = CountVectorizer(tokenizer=tokenize)
    # to reduce computational time 10 topics are enough for comparison
    num_topics = 10 
    num_top_words = 15 # number of words to be visualized

    # the three models to be compared
    models = [('LDA', LatentDirichletAllocation(n_components=num_topics)),
              ('NMF', NMF(n_components=num_topics)),
              ('LSA', TruncatedSVD(n_components=num_topics))]

    results = [] # empty list to store scores

    # pipeline for each model 
    for name, model in models:
        pipeline = Pipeline([
            ('vectorizer', vectorizer),
            ('model', model)
        ])

        # only pass X, there is no Y 
        pipeline.fit(df['text'])

        topics = [] # empty list of topics for each model

        feature_names = vectorizer.get_feature_names_out() # tokenized text
        # loop through every topic and get top 15 words
        for topic_idx, topic in enumerate(model.components_):
            topic_tokens = [feature_names[i] for i in 
            topic.argsort()[:-num_top_words - 1:-1]]
            topics.append(topic_tokens)

        # calculate coherence score 
        coherence = get_coherence_score(model, topics)

        # append scores to results list
        results.append((name, coherence))

        # visualizing top words for each topic
        visualize_top_words(topics, 
        f'Figures of words associated with each topic for {name} Model')
        print()

    # stroring the results in a dataframe
    df_results = pd.DataFrame(results, columns=['Model', 'Coherence Score'])

    return df_results

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

Результаты оценки

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

Чтобы улучшить производительность модели NNMF, мы будем искать идеальное количество тем и оценивать, как это влияет на показатель согласованности.

Количество тем — интерпретация результатов

Модель NNMF была протестирована для разного количества тем, от 2 до 20. Оценки согласованности для каждого количества тем показаны на рисунке 3. На основании оценок согласованности видно, что наиболее согласованное количество тем равно 4, при этом показатель согласованности 0,59. Тем не менее, другие числа тем, такие как 10 и 18, также имеют относительно высокие показатели согласованности и значительно более широкий выбор тем.

Учитывая, что в наборе данных содержится около 10 000 статей по темам, которые необходимо обобщить, 4 — это очень мало для тем. 10 тем были бы более идеальным выбором и при этом получали бы высокие баллы за связность.

Настройка гиперпараметров

Чтобы выбрать окончательную модель, мы будем использовать поиск по сетке, чтобы определить оптимальные значения параметров, уделяя особое внимание количеству тем (установлено на 10), и мы оценим различные комбинации параметров, чтобы определить набор, обеспечивающий наилучшую производительность модели. .

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

Best hyperparameters: {'alpha_H': 0.01, 'alpha_W': 0.01}
Best score: 0.581

Заключение

В результате оценки трех алгоритмов тематического моделирования — LDA, NNMF и LCA — было обнаружено, что NNMF показал наилучшие результаты и оценки согласованности для 10 различных тем. Несмотря на известную производительность NNMF на наборах данных малого и среднего размера, мы обнаружили, что на этом корпусе он работает исключительно хорошо.

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

Рекомендации

[1] Блей, Дэвид М., Эндрю Ю. Нг и Майкл И. Джордан. «Скрытое распределение Дирихле». Журнал исследований в области машинного обучения 3, вып. Январь (2003): 993–1022.

[2] Сюй, Вэй, Синь Лю и Ихонг Гонг. «Кластеризация документов на основе неотрицательной матричной факторизации». В Материалы 26-й ежегодной международной конференции ACM SIGIR по исследованиям и разработкам в области информационного поиска, стр. 267–273. 2003.

· Документация Scikit-Learn доступна: здесь

· Оценка тематических моделей: скрытое распределение Дирихле (LDA)

Спасибо, что нашли время, чтобы прочитать это. Если у вас есть какие-либо комментарии или предложения, пожалуйста, не стесняйтесь обращаться ко мне, оставив комментарий к этому сообщению или отправив мне сообщение в Twitter или LinkedIn.

Все соответствующие коды доступны в моем репозитории GitHub.