Эта статья представляет собой исчерпывающий обзор тематического моделирования и связанных с ним методов. Это первая часть статьи, в которой будут рассмотрены только 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.
Другие часто используемые приемы
- Инициализация
Любая схема итеративной оптимизации чувствительна к ее инициализации. Хотя случайная инициализация часто выполняется достаточно хорошо, существуют и другие методы инициализации.
Один из таких методов использует SVD для вычисления приблизительной оценки матриц W и H. Если условие неотрицательности не существует, берется верхний k сингулярные значения и соответствующие им векторы построят лучшую оценку ранга k, измеренную нормой Фробениуса. Поскольку W и H должны быть неотрицательными, мы должны немного изменить используемые векторы. Подробное обсуждение выходит за рамки этого сообщения в блоге, поэтому, пожалуйста, обратитесь к этой статье для получения подробной информации. - Регуляризация
Мы обсудили нерегулярную цель выше, но мы можем захотеть наложить более строгие ограничения разреженности или предотвратить слишком большие веса. Чтобы решить эти проблемы, мы можем ввести потери регуляризации 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 для решения этих проблем.