Краткий обзор различных техник, используемых для тематического моделирования в НЛП, вместе с абстрактными примерами кода
Было ли у вас когда-нибудь много текста из разных источников и вы хотели проанализировать широкую тему / темы, о которых говорят люди, и разделить их на определенные группы, ну, моделирование темы здесь для вас. Итак, что такое тематическое моделирование. Тематическое моделирование - это статистический процесс, с помощью которого вы можете идентифицировать, извлекать и анализировать темы из заданного набора документов.
В этой статье мы рассмотрим моделирование темы с помощью нескольких известных методов.
Есть небольшая разница, где можно запутаться. Это отличается от тематической классификации или это то же самое? Для начала, тематическая классификация подпадает под контролируемый алгоритм машинного обучения, а тематическое моделирование подпадает под контролируемый алгоритм машинного обучения. Ожидая, что вы уже знаете разницу, в случае, если вы этого не сделаете, чтобы поместить ее в однострочное моделирование темы, не требуется никакого предварительного обучения, в отличие от классификации тем.
Поскольку моделирование текста не требует обучения, анализировать данные легко. но нельзя гарантировать получение точных результатов.
Итак, как это работает:
Основное предположение при тематическом моделировании состоит в том, что
- Каждый документ состоит из статистической смеси тем (т. Е. Статистического распределения всех тем, которое может быть получено путем суммирования всех распределений по всем темам, затронутым в корпусе)
Методы тематического моделирования определяют, какие темы присутствуют в документах внутри корпуса и какова сила каждой из них.
Давайте перейдем к нескольким таким техникам, которые мы обсуждали выше, начиная с самого известного LSA.
Скрытое распределение Дирихле (LDA):
Скрытое распределение Дирихле - это генеративная статистическая модель, которая позволяет объяснять наблюдения ненаблюдаемыми группами, что объясняет, почему некоторые части данных похожи. Предполагается, что любой документ представляет собой комбинацию тем и фраз. Он разработан с использованием оптимизированной техники VEM (Variational Exception Maximization) для оценки всего корпуса текста. Это может быть преодолено мешком слов высшего ранга. Однако это утверждение говорит о недостатке семантики в предложениях. Мы действительно можем лучше понять, как связаны темы.
С учетом табличных обозначений. Ящики - это пластины, которые представляют «повторяющиеся объекты» или «повторители». Внешняя поверхность / пластина представляет документы, а внутренняя поверхность / пластина представляет собой повторяющиеся позиции слов в данном документе.
Из распределения Дирихле, фигурирующего в теме конкретного документа, мы берем случайную выборку, где α - параметр, представляющий распределение документа. Это распределение тем - θ, из которого мы выбираем конкретную тему Z на основе распределения этого предиката.
Затем из другого распределения Дирихле 𝛽, как и из распределения количества слов Dir (α), мы выбираем случайную выборку, представляющую распределение слов в теме Z. Это распределение слов - φ. отсюда мы выбираем наше слово w.
Метод создания каждого слова из текста состоит из следующего:
Под полиномиальным распределением здесь понимается полиномиальное распределение только с одним следом, которое также известно как категориальное распределение.
Фрагмент кода:
вы можете использовать пакет genism, в котором есть предопределенная модель LDA.
from gensim.test.utils import common_texts from gensim.corpora.dictionary import Dictionary # Create a corpus from a list of texts dictionary = Dictionary(common_texts) corpus = [common_dictionary.doc2bow(text) for text in common_texts] # Train the model on the corpus. lda = LdaModel(corpus, num_topics=10)
Скрытый семантический анализ (LSA):
LSA - это процесс, включающий обнаружение отношений между наборами текстов и связанными с ними терминами. Это означает, что термины с аналогичным значением также будут использоваться вместе (гипотеза распределения). Матрица Term-Document (строки представляют слова, а столбцы представляют каждый конкретный документ) строится из корпуса. Эта матрица была обновлена до матрицы tf-idf, где каждая ячейка определяет частоту слов в текущем документе / частоту слова во всех документах.
Интуитивно это говорит о том, что если частота слов в конкретном документе больше по сравнению со всеми другими документами вместе, это слово может однозначно повлиять на идентификацию конкретной темы.
В качестве обледенения мы используем разложение по сингулярным значениям (SVD), чтобы минимизировать размеры матрицы при сохранении сходства по столбцам.
Затем пары документов сравниваются, беря косинус угла между ними (или скалярное произведение между их нормализованными значениями). Когда значение близко к 1, документ очень похож; значения близки к 0, документ сильно отличается.
Фрагмент кода:
вы можете использовать пакет genism, который имеет предопределенную модель LSA, иначе также известную как LSI (я имею в виду индексацию)
from gensim.test.utils import common_dictionary, common_corpus from gensim.models import LsiModel model = LsiModel(common_corpus, id2word=common_dictionary) vectorized_corpus = model[common_corpus]
Вероятностный скрытый семантический анализ (PLSA):
PLSA - это усовершенствование LSA. Это статистический метод для анализа двухрежимных и одновременных данных. он пытается найти скрытые темы, чтобы заполнить матрицу термин-документ, заменяя SVD в LSA вероятностной моделью.
Учитывая вероятность совпадения слов и документов, PLS моделирует вероятность того, что такие слова и документы встречаются одновременно, как смесь условно независимых полиномиальных распределений:
Обозначение пластины, представляющее модель PLSA. (Асимметричная формулировка). d - вектор документа, z - тема слова, w - слово, взятое из тематического распределения слова, а c - слово, взятое из тематического распределения слова. Переменные d и W измеримы, но предметом скрытой переменной является c / z. Эти три значения являются параметрами в нашей модели. P (D) определяется напрямую из нашей базы данных. Параметры P (Z | D) и P (W | Z) можно обучить с помощью алгоритма ожидание-максимизация (EM). EM - это метод поиска наиболее вероятных оценок параметров для модели, которая зависит от скрытых переменных. EM имеет два этапа: (i) этап ожидания (E), на котором вычисляются апостериорные вероятности для скрытых переменных, (ii) этап максимизации (M), на котором параметры обновляются.
😂 Нет проблем, я не особо углубляюсь в математику, а теперь ознакомьтесь с вики-ссылкой на математическую часть 😂
Фрагмент кода:
вы можете напрямую использовать модель plsa из пакета PyPI plsa
from plsa import Corpus, Pipeline, Visualize from plsa.pipeline import DEFAULT_PIPELINE from plsa.algorithms import PLSA corpus = Corpus.from_csv(csv_file, pipeline) n_topics = 5 plsa = PLSA(corpus, n_topics, True) result = plsa.fit()
Неотрицательная матричная факторизация (NMF):
NMF относится к категории машинного обучения без учителя. NMF - это семейство алгоритмов линейной алгебры для определения скрытой структуры результатов. NMF работает путем разбиения массивов более высоких измерений на представление более низких измерений. разлагается на две матрицы, W и H, при условии, что все три матрицы состоят из неотрицательных элементов. Здесь V относится к матрице термина-документа, обычно нормализованной по TF-IDF. который вы видели выше. W представляет найденные темы, а H представляет собой коэффициент для этих тем. Другими словами, V представляет статьи по словам (исходные документы), H представляет статьи по темам, а W представляет темы по словам.
Фрагмент кода:
См. Ссылку для примера кода https://scikit-learn.org/stable/auto_examples/applications/plot_topics_extraction_with_nmf_lda.html
import numpy as np X = np.array([[1, 1], [2, 1], [3, 1.2], [4, 1], [5, 0.8], [6, 1]]) from sklearn.decomposition import NMF model = NMF(n_components=2, init='random', random_state=0) W = model.fit_transform(X) H = model.components_
lda2vec:
Эту модель можно рассматривать как расширение модели word2vec с включением алгоритма LDA, который мы обсуждали выше [Интуиция подсказывает, что вы уже знаете, что такое word2vec. (P.S в случае, если вы не понимаете, о чем я говорю, обратитесь к word2vecLink) Я не буду подробно обсуждать часть word2vec]. Word2vec фиксирует четкие пословные отношения, однако результирующие векторы по существу не интерпретируемы и не представляют собой записи. С другой стороны, LDA легко интерпретируется человеком, но не моделирует локальные отношения слов, такие как word2vec. Lda2vec построен как модель, которая создает темы как для слов, так и для документов, делает их интерпретируемыми, создает темы и делает их контролируемыми темами для клиентов, времени и документов.
LDA2Vec - это модифицированная версия алгоритма skip-gram word2vec. Модель научилась предсказывать фоновые термины на основе ключевого слова в исходном процессе пропуска граммы. В lda2vec для получения вектора фона вставляются вектор ключевого слова и вектор документа. Затем этот вектор контекста используется для прогнозирования контекстных выражений.
Подобно модели линейного дискриминантного анализа, вектор документа [см. Doc2vec от Гиди Шпербер] раскладывается на вектор веса документа и матрицу тем. Вектор веса документа указывает, сколько различных тем было обсуждено, тогда как матрица тем распределяет темы по категориям. Таким образом, вектор контекста создается путем объединения различных контекстов, в которых встречается документ.
Вкратце примечание
Word2vec пытается смоделировать словесные отношения.
LDA моделирует отношения документа к слову.
LDA создает темы для каждого документа.
lda2vec создает темы не только для документов, но и для регионов.
lda2vec также создает темы поверх клиентов
В lda2vec темы можно «контролировать» и заставлять предсказывать другую цель.
Подтверждение и ссылка https://github.com/cemoody/lda2vec для кода GitHub и объяснения. Вам может понравиться это, как и мне.
обратитесь к официальной документации lda2vec https://lda2vec.readthedocs.io/en/latest/?badge=latest
model = LDA2Vec(n_words, max_length, n_hidden, counts) model.add_component(n_docs, n_topics, name='document id') model.fit(clean, components=[doc_ids]) topics = model.prepare_topics('document_id', vocab) prepared = pyLDAvis.prepare(topics) pyLDAvis.display(prepared)
Метрики:
Теперь, когда мы закончили изучать различные техники тематического моделирования. нам также нужна некоторая база для правильного измерения их эффективности. Хотя у нас есть несколько методов для измерения эффективности тематического моделирования, таких как методы оценки, внутренние метрики оценки, человеческие суждения, внешние метрики оценки. Я хотел бы сосредоточиться на двух методах, а именно на недоумении и согласованности темы на абстрактном уровне, не копаясь в этом так глубоко.
Недоумение:
Недоумение - это один из способов определения значения слова. Он отражает то, насколько эта модель удивлена новыми данными, которых она не видела раньше, и рассчитывается как вероятность удерживаемого набора тестов.
Метрика недоумения используется для измерения того, как новые, невидимые данные влияют на вероятность модели, построенной ранее. Чтобы привести пример, насколько хорошо модель соответствует имеющимся данным?
Однако недавние исследования показали, что человеческое суждение не всегда тесно коррелирует с предсказанной вероятностью. Одним из примеров является то, как оптимизация не всегда приводит к темам, интерпретируемым человеком.
С тематической согласованностью у нас есть потенциал моделирования человеческого решения, которое преодолело ограничения недоумения и, следовательно, появилась теория тематической согласованности.
Связность темы:
Структура согласованности тем включает в себя множество соображений, вытекающих из согласованности предметов, а также общей согласованности статьи. он проверяет степень идентичности терминов в отрывке отрывка в контексте. Метрики позволяют нам отличать семантически интерпретируемые темы от объектов статистического вывода. Его можно охарактеризовать как обычное использование или норму парных оценок сходства слов. Успешная модель сможет производить связный материал. Перейдите к словам ниже для более подробного описания этих предметов.
Благодарности и ссылки:
Https://pypi.org/project/plsa/ ”https://arxiv.org/abs/1301.6705