Эта статья представляет собой исчерпывающий обзор тематического моделирования и связанных с ним методов. Это первая часть статьи, в которой будут рассмотрены только NMF, LSA и PLSA. LDA и lda2vec будут рассмотрены в следующей части здесь.

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

В этом посте мы рассмотрим моделирование тем с помощью 5 самых популярных на сегодняшний день методов: NMF, LSA, PLSA, LDA и более новый lda2vec, основанный на глубоком обучении.

Обзор

Все тематические модели основаны на одном и том же базовом предположении:

  • каждый документ состоит из тем, и
  • каждая тема состоит из набора слов.

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

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

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

Предположим, мы факторизуем матрицу X на две матрицы W и H такие, что

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

Теперь предположим, что X состоит из m строк,

И W состоит из k строк,

H состоит из m строк.

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

Смысл этого уравнения становится понятнее, когда мы визуализируем его:

В принципе, мы можем интерпретировать

быть взвешенной суммой некоторых компонентов (или базисов, если вы более знакомы с линейной алгеброй), где каждая строка в H является компонентом, а каждая строка в W содержит веса каждого компонента.

Обратите внимание, что в этом объяснении мы рассматриваем каждую строку входной матрицы X как одну точку данных. В других объяснениях каждый столбец может считаться точкой данных, и в этом случае каждый столбец в W становится компонентом, а каждый столбец в H становится набором весов.

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

Когда мы используем NMF?

NMF подходит для задач, в которых лежащие в основе факторы можно интерпретировать как неотрицательные. Представьте, что вы хотите разложить матрицу термин-документ, где каждый столбец представляет документ, а каждый элемент в документе представляет вес определенного слова (вес может быть необработанным количеством или взвешенным количеством tf-idf или каким-либо другим схема кодирования; эти детали здесь не важны).

Что произойдет, если мы разложим это на две матрицы? Представьте, если бы документы пришли из новостных статей. Слово «есть», скорее всего, появится в статьях, связанных с едой, и, следовательно, будет встречаться со словами «вкусно» и «еда». Следовательно, эти слова, вероятно, будут сгруппированы вместе в вектор компонента «еда», и каждая статья будет иметь определенный вес темы «еда».

Следовательно, разложение NMF матрицы термин-документ даст компоненты, которые можно рассматривать как «темы», и разложит каждый документ на взвешенную сумму тем. Это называется тематическим моделированием и является важным приложением NMF.

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

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

Как мы проводим NMF?

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

Давайте посмотрим на целевую функцию. Хотя есть несколько вариантов, обычно используемой мерой расстояния является норма Фробениуса (сумма квадратов погрешностей по элементам). Формализуя это, мы получаем следующую цель:

Далее мы познакомим вас с парой методов оптимизации.

1. Мультипликативное обновление:

Обычно используемый метод оптимизации - это метод мультипликативного обновления. В этом методе значения W и H обновляются итеративно в соответствии со следующим правилом:

где матрица, которая не обновляется, остается постоянной.

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

Масштабированный градиентный спуск можно записать следующим образом:

Если мы установим

to be

а также

to be

тогда мы получаем правило мультипликативного обновления.

2. Иерархическое чередование наименьших квадратов

Хотя в этой статье используется реже, иерархический метод наименьших квадратов (HALS) показан как более быстрый метод вычисления NMF.

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

Правило можно выразить следующим образом:

где W [:, i] - i-й столбец W, а hi - i-я строка H.

Другие часто используемые приемы

  1. Инициализация
    Любая схема итеративной оптимизации чувствительна к ее инициализации. Хотя случайная инициализация часто выполняется достаточно хорошо, существуют и другие методы инициализации.
    Один из таких методов использует SVD для вычисления приблизительной оценки матриц W и H. Если условие неотрицательности не существует, берется верхний k сингулярные значения и соответствующие им векторы построят лучшую оценку ранга k, измеренную нормой Фробениуса. Поскольку W и H должны быть неотрицательными, мы должны немного изменить используемые векторы. Подробное обсуждение выходит за рамки этого сообщения в блоге, поэтому, пожалуйста, обратитесь к этой статье для получения подробной информации.
  2. Регуляризация
    Мы обсудили нерегулярную цель выше, но мы можем захотеть наложить более строгие ограничения разреженности или предотвратить слишком большие веса. Чтобы решить эти проблемы, мы можем ввести потери регуляризации L1 и L2 на весах матриц.

LSA (скрытый семантический анализ)

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

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

Первым шагом является создание матрицы «документ-термин». Учитывая m документов и n слов в нашем словаре, мы можем построить матрицу m × n A , в котором каждая строка представляет документ, а каждый столбец - слово. В простейшей версии LSA каждая запись может быть простым подсчетом количества раз, когда j -ое слово появилось в i -м документе. На практике, однако, необработанные подсчеты работают не очень хорошо, поскольку они не учитывают значимость каждого слова в документе. Например, слово «ядерный», вероятно, больше информирует нас о теме (ах) данного документа, чем слово «испытание».

Следовательно, модели LSA обычно заменяют необработанные подсчеты в матрице терминов документа на оценку tf-idf. Tf-idf, или частота термина с обратной частотой в документе, назначает вес термину j в документе i следующим образом:

Интуитивно понятно, что термин имеет большой вес, когда он часто встречается в документе, но нечасто в корпусе. Слово «сборка» может часто встречаться в документе, но, поскольку оно, вероятно, довольно часто встречается в остальной части корпуса, оно не будет иметь высокой оценки tf-idf. Однако, если слово «джентрификация» часто встречается в документе, поскольку оно встречается реже в остальной части корпуса, он будет иметь более высокий балл tf-idf.

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

Это уменьшение размерности можно выполнить с помощью усеченного SVD. SVD, или разложение по сингулярным числам, - это метод линейной алгебры, который преобразует любую матрицу M в произведение трех отдельных матриц: M = U * S * V, где S - диагональная матрица сингулярных значений M. Критически важно, что усеченный SVD снижает размерность, выбирая только t наибольшие особые значения и сохраняя только первые столбцы t из U и V . В этом случае t - гиперпараметр, который мы можем выбрать и настроить, чтобы отразить количество тем, которые мы хотим найти.

Интуитивно думайте об этом как о сохранении t наиболее важных измерений в нашем преобразованном пространстве.

В этом случае U ∈ ℝ ^ (m ⨉ t) появляется как наша матрица темы документа, а V ∈ ℝ ^ (n ⨉ t) становится нашей темой-термином. матрица. Как в U, так и в V столбцы соответствуют одной из наших t тем. В U строки представляют векторы документа, выраженные в терминах тем; в V строки представляют векторы терминов, выраженные в терминах тем.

С этими векторами документов и векторами терминов теперь мы можем легко применять такие меры, как косинусное сходство, для оценки:

  • схожесть разных документов
  • сходство разных слов
  • сходство терминов (или «запросов») и документов (что становится полезным при поиске информации, когда мы хотим получить отрывки, наиболее релевантные нашему поисковому запросу).

Код

В sklearn простая реализация LSA может выглядеть примерно так:

from sklearn.feature_extraction.text import TfidfVectorizer
from sklearn.decomposition import TruncatedSVD
from sklearn.pipeline import Pipeline
documents = ["doc1.txt", "doc2.txt", "doc3.txt"] 
  
# raw documents to tf-idf matrix: 
vectorizer = TfidfVectorizer(stop_words='english', 
                             use_idf=True, 
                             smooth_idf=True)
# SVD to reduce dimensionality: 
svd_model = TruncatedSVD(n_components=100,         // num dimensions
                         algorithm='randomized',
                         n_iter=10)
# pipeline of tf-idf + SVD, fit to and applied to documents:
svd_transformer = Pipeline([('tfidf', vectorizer), 
                            ('svd', svd_model)])
svd_matrix = svd_transformer.fit_transform(documents)
# svd_matrix can later be used to compare documents, compare words, or compare queries with documents

LSA можно использовать быстро и эффективно, но у него есть несколько основных недостатков:

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

PLSA (вероятностный скрытый семантический анализ)

PLSA, или вероятностный скрытый семантический анализ, использует вероятностный метод вместо SVD для решения проблемы. Основная идея состоит в том, чтобы найти вероятностную модель со скрытыми темами, которая может генерировать данные, которые мы наблюдаем в нашей матрице документ-термин. В частности, нам нужна модель P (D, W), такая, что для любого документа d и слова w, P (d, w) соответствует этой записи в матрице документ-термин.

Напомним основное предположение тематических моделей: каждый документ состоит из смеси тем, а каждая тема состоит из набора слов. pLSA добавляет вероятностный поворот к этим предположениям:

  • учитывая документ d, тема z присутствует в этом документе с вероятностью P (z | d)
  • для данной темы z слово w берется из z с вероятностью P (w | z)

Формально совместная вероятность увидеть документ и слово вместе составляет:

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

В этом случае P (D), P (Z | D) и P (W | Z) являются параметрами нашей модели. P (D) можно определить прямо из нашего корпуса. P (Z | D) и P (W | Z) моделируются как полиномиальные распределения и могут быть обучены с помощью алгоритма ожидание-максимизация (EM). Не вдаваясь в полную математическую обработку алгоритма, EM - это метод нахождения наиболее вероятных оценок параметров для модели, которая зависит от ненаблюдаемых скрытых переменных (в нашем случае, тем).

Интересно, что P (D, W) можно эквивалентно параметризовать, используя другой набор из 3 параметров:

Мы можем понять эту эквивалентность, рассматривая модель как порождающий процесс. В нашей первой параметризации мы начали с документа с помощью P (d), а затем сгенерировали тему с помощью P (z | d), а затем сгенерировали слово с помощью P (w | z). В этой параметризации мы начинаем с темы с P (z), а затем независимо генерируем документ с P (d | z) и слово с P (w | z).

Причина, по которой эта новая параметризация так интересна, заключается в том, что мы видим прямую параллель между нашей моделью pLSA и нашей моделью LSA:

где вероятность нашей темы P (Z) соответствует диагональной матрице вероятностей нашей сингулярной темы, вероятность нашего документа с учетом темы P (D | Z) соответствует нашей матрице темы документа U , а вероятность нашего слова при заданной теме P (W | Z) соответствует нашей матрице терминов V.

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

  • Поскольку у нас нет параметров для моделирования P (D), мы не знаем, как назначать вероятности новым документам.
  • Количество параметров для pLSA линейно растет с количеством документов, которые у нас есть, поэтому он подвержен переобучению.

Мы не будем рассматривать какой-либо код для PLSA, потому что он редко используется сам по себе. В общем, когда люди ищут тематическую модель, выходящую за рамки базовой производительности, которую дает LSA, они обращаются к LDA. LDA, наиболее распространенный тип тематической модели, расширяет PLSA для решения этих проблем.

Продолжайте читать следующую часть статьи здесь.