fitlda

Подходящая модель скрытого выделения Дирихле (LDA)

Модель скрытого выделения Дирихле (LDA) является моделью темы, которая обнаруживает базовые темы в наборе документов и выводит вероятности слова в темах. Если модель была подходящим использованием мешка n модели граммов, то программное обеспечение обрабатывает N-граммы как отдельные слова.

Синтаксис

mdl = fitlda(bag,numTopics)
mdl = fitlda(counts,numTopics)
mdl = fitlda(___,Name,Value)

Описание

пример

mdl = fitlda(bag,numTopics) соответствует модели LDA темами numTopics к сумке слов или мешку n модели bag граммов.

пример

mdl = fitlda(counts,numTopics) соответствует модели LDA к документам, представленным матрицей подсчета частот.

mdl = fitlda(___,Name,Value) задает дополнительные опции с помощью одного или нескольких аргументов пары "имя-значение".

Примеры

свернуть все

Чтобы воспроизвести результаты в этом примере, установите rng на 'default'.

rng('default')

Загрузите данные в качестве примера. Файл sonnetsPreprocessed.txt содержит предварительно обработанные версии сонетов Шекспира. Файл содержит один сонет на строку со словами, разделенными пробелом. Извлеките текст от sonnetsPreprocessed.txt, разделите текст в документы в символах новой строки, и затем маркируйте документы.

filename = "sonnetsPreprocessed.txt";
str = extractFileText(filename);
textData = split(str,newline);
documents = tokenizedDocument(textData);

Создайте модель сумки слов использование bagOfWords.

bag = bagOfWords(documents)
bag = 
  bagOfWords with properties:

          Counts: [154x3092 double]
      Vocabulary: [1x3092 string]
        NumWords: 3092
    NumDocuments: 154

Соответствуйте модели LDA четырьмя темами.

numTopics = 4;
mdl = fitlda(bag,numTopics)
Initial topic assignments sampled in 0.093538 seconds.
=====================================================================================
| Iteration  |  Time per  |  Relative  |  Training  |     Topic     |     Topic     |
|            | iteration  | change in  | perplexity | concentration | concentration |
|            | (seconds)  |   log(L)   |            |               |   iterations  |
=====================================================================================
|          0 |       0.03 |            |  1.215e+03 |         1.000 |             0 |
|          1 |       0.02 | 1.0482e-02 |  1.128e+03 |         1.000 |             0 |
|          2 |       0.01 | 1.7190e-03 |  1.115e+03 |         1.000 |             0 |
|          3 |       0.01 | 4.3796e-04 |  1.118e+03 |         1.000 |             0 |
|          4 |       0.05 | 9.4193e-04 |  1.111e+03 |         1.000 |             0 |
|          5 |       0.03 | 3.7079e-04 |  1.108e+03 |         1.000 |             0 |
|          6 |       0.05 | 9.5777e-05 |  1.107e+03 |         1.000 |             0 |
=====================================================================================
mdl = 
  ldaModel with properties:

                     NumTopics: 4
             WordConcentration: 1
            TopicConcentration: 1
      CorpusTopicProbabilities: [0.2500 0.2500 0.2500 0.2500]
    DocumentTopicProbabilities: [154x4 double]
        TopicWordProbabilities: [3092x4 double]
                    Vocabulary: [1x3092 string]
                    TopicOrder: 'initial-fit-probability'
                       FitInfo: [1x1 struct]

Визуализируйте темы с помощью облаков слова.

figure
for topicIdx = 1:4
    subplot(2,2,topicIdx)
    wordcloud(mdl,topicIdx);
    title("Topic: " + topicIdx)
end

Соответствуйте модели LDA к набору документов, представленных матрицей для подсчета количества слов.

Чтобы воспроизвести результаты этого примера, установите rng на 'default'.

rng('default')

Загрузите данные в качестве примера. sonnetsCounts.mat содержит матрицу подсчетов слов и соответствующий словарь предварительно обработанных версий сонетов Шекспира. Значение counts(i,j) соответствует числу раз j th слово словаря, появляется в i th документ.

load sonnetsCounts.mat
size(counts)
ans = 1×2

         154        3092

Соответствуйте модели LDA 7 темами. Чтобы подавить многословный вывод, установите 'Verbose' на 0.

numTopics = 7;
mdl = fitlda(counts,numTopics,'Verbose',0);

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

topicMixtures = transform(mdl,counts(1:3,:));
figure
barh(topicMixtures,'stacked')
xlim([0 1])
title("Topic Mixtures")
xlabel("Topic Probability")
ylabel("Document")
legend("Topic "+ string(1:numTopics),'Location','northeastoutside')

Чтобы воспроизвести результаты в этом примере, установите rng на 'default'.

rng('default')

Загрузите данные в качестве примера. Файл sonnetsPreprocessed.txt содержит предварительно обработанные версии сонетов Шекспира. Файл содержит один сонет на строку со словами, разделенными пробелом. Извлеките текст от sonnetsPreprocessed.txt, разделите текст в документы в символах новой строки, и затем маркируйте документы.

filename = "sonnetsPreprocessed.txt";
str = extractFileText(filename);
textData = split(str,newline);
documents = tokenizedDocument(textData);

Создайте модель сумки слов использование bagOfWords.

bag = bagOfWords(documents)
bag = 
  bagOfWords with properties:

          Counts: [154x3092 double]
      Vocabulary: [1x3092 string]
        NumWords: 3092
    NumDocuments: 154

Соответствуйте модели LDA 20 темами.

numTopics = 20;
mdl = fitlda(bag,numTopics)
Initial topic assignments sampled in 0.085018 seconds.
=====================================================================================
| Iteration  |  Time per  |  Relative  |  Training  |     Topic     |     Topic     |
|            | iteration  | change in  | perplexity | concentration | concentration |
|            | (seconds)  |   log(L)   |            |               |   iterations  |
=====================================================================================
|          0 |       0.22 |            |  1.159e+03 |         5.000 |             0 |
|          1 |       0.09 | 5.4884e-02 |  8.028e+02 |         5.000 |             0 |
|          2 |       0.08 | 4.7400e-03 |  7.778e+02 |         5.000 |             0 |
|          3 |       0.06 | 3.4597e-03 |  7.602e+02 |         5.000 |             0 |
|          4 |       0.08 | 3.4662e-03 |  7.430e+02 |         5.000 |             0 |
|          5 |       0.08 | 2.9259e-03 |  7.288e+02 |         5.000 |             0 |
|          6 |       0.08 | 6.4180e-05 |  7.291e+02 |         5.000 |             0 |
=====================================================================================
mdl = 
  ldaModel with properties:

                     NumTopics: 20
             WordConcentration: 1
            TopicConcentration: 5
      CorpusTopicProbabilities: [1x20 double]
    DocumentTopicProbabilities: [154x20 double]
        TopicWordProbabilities: [3092x20 double]
                    Vocabulary: [1x3092 string]
                    TopicOrder: 'initial-fit-probability'
                       FitInfo: [1x1 struct]

Предскажите главные темы для массива новых документов.

newDocuments = tokenizedDocument([
    "what's in a name? a rose by any other name would smell as sweet."
    "if music be the food of love, play on."]);
topicIdx = predict(mdl,newDocuments)
topicIdx = 2×1

    19
     8

Визуализируйте предсказанные темы с помощью облаков слова.

figure
subplot(1,2,1)
wordcloud(mdl,topicIdx(1));
title("Topic " + topicIdx(1))
subplot(1,2,2)
wordcloud(mdl,topicIdx(2));
title("Topic " + topicIdx(2))

Входные параметры

свернуть все

Введите сумку слов или мешок n модели граммов, заданной как объект bagOfWords или объект bagOfNgrams. Если bag является объектом bagOfNgrams, то функция обрабатывает N-граммы как отдельные слова.

Количество тем, заданных как положительное целое число. Для примера, показывающего, как выбрать количество тем, смотрите, Выбирают Number of Topics for LDA Model.

Пример: 200

Подсчет частот слов, заданных как матрица неотрицательных целых чисел. Если вы задаете 'DocumentsIn', чтобы быть 'rows', то значение, counts(i,j) соответствует числу раз j th слово словаря, появляется в i th документ. В противном случае значение, counts(i,j) соответствует числу раз i th слово словаря, появляется в j th документ.

Аргументы в виде пар имя-значение

Укажите необязательные аргументы в виде пар ""имя, значение"", разделенных запятыми. Имя (Name) — это имя аргумента, а значение (Value) — соответствующее значение. Name должен появиться в кавычках. Вы можете задать несколько аргументов в виде пар имен и значений в любом порядке, например: Name1, Value1, ..., NameN, ValueN.

Пример: 'Solver','avb' задает, чтобы использовать аппроксимированного вариационного Бейеса в качестве решателя.

Опции решателя

свернуть все

Решатель для оптимизации, заданной как пара, разделенная запятой, состоящая из 'Solver' и одно из следующего:

Стохастический решатель

  • 'savb' – Используйте стохастический аппроксимированный вариационный Байесов [1] [2]. Этот решатель подходит лучше всего для больших наборов данных и может приспособить хорошую модель в меньшем количестве передач данных.

Пакетные решатели

  • cgs Используйте свернутый Гиббс, выбирающий [3]. Этот решатель может быть более точным за счет занимания больше времени, чтобы запуститься. Функция resume не делает моделей поддержки, снабженных CGS.

  • 'avb' – Используйте аппроксимированного вариационного Бейеса [4]. Этот решатель обычно запускается более быстро, чем свернутый Гиббс, выбирающий, и свернул вариационного Бейеса, но может быть менее точным.

  • 'cvb0' – Используйте свернутого вариационного Бейеса, нулевой [4] [5] порядка. Этот решатель может быть более точным, чем аппроксимированный вариационный Бейес за счет занимания больше времени, чтобы запуститься.

Для примера, показывающего, как сравнить решатели, смотрите, Сравнивают Решатели LDA.

Пример: 'Solver','savb'

Относительный допуск на логарифмической вероятности, заданной как пара, разделенная запятой, состоящая из 'LogLikelihoodTolerance' и положительной скалярной величины. Оптимизация останавливается, когда этот допуск достигнут.

Пример: 'LogLikelihoodTolerance',0.001

Опция для подходящей концентрации темы, заданной как пара, разделенная запятой, состоящая из 'FitTopicConcentration' и или true или false.

Функция соответствует предшествующему Дирихле α=α0(p1p2pK) на смесях темы, где α0 концентрация темы и p1,,pK корпусные вероятности темы, которые суммируют к 1.

Пример: 'FitTopicProbabilities',false

Типы данных: логический

Опция для подходящей концентрации темы, заданной как пара, разделенная запятой, состоящая из 'FitTopicConcentration' и или true или false.

Для пакета решатели 'cgs', 'avb' и 'cvb0', значением по умолчанию для FitTopicConcentration является true. Для стохастического решателя 'savb' значением по умолчанию является false.

Функция соответствует предшествующему Дирихле α=α0(p1p2pK) на смесях темы, где α0 концентрация темы и p1,,pK корпусные вероятности темы, которые суммируют к 1.

Пример: 'FitTopicConcentration',false

Типы данных: логический

Первоначальная оценка концентрации темы, заданной как пара, разделенная запятой, состоящая из 'InitialTopicConcentration' и неотрицательного скаляра. Функция устанавливает концентрацию на тему к TopicConcentration/NumTopics. Для получения дополнительной информации смотрите Скрытое Выделение Дирихле.

Пример: 'InitialTopicConcentration',25

Порядок темы, заданный как одно из следующего:

  • 'initial-fit-probability' – Сортировка тем корпусными вероятностями темы входного набора документа (свойство CorpusTopicProbabilities).

  • 'unordered' – Не сортируйте темы.

Концентрация Word, заданная как пара, разделенная запятой, состоящая из 'WordConcentration' и неотрицательного скаляра. Программное обеспечение устанавливает Дирихле, предшествующий по темам (вероятности слова на тему) быть симметричным параметром распределения Дирихле со значением WordConcentration/numWords, где numWords является размером словаря входных документов. Для получения дополнительной информации смотрите Скрытое Выделение Дирихле.

Ориентация документов в матрице для подсчета количества слов, заданной как пара, разделенная запятой, состоящая из 'DocumentsIn' и одно из следующего:

  • 'Строки' Вход является матрицей подсчетов слов со строками, соответствующими документам.

  • 'columns' – Вход является транспонированной матрицей подсчетов слов со столбцами, соответствующими документам.

Эта опция только применяется, если вы задаете входные документы как матрицу подсчетов слов.

Примечание

Если вы ориентируете свою матрицу для подсчета количества слов так, чтобы документы соответствовали столбцам и задали 'DocumentsIn','columns', то вы можете испытать значительное сокращение во время выполнения оптимизации.

Пакетные опции решателя

свернуть все

Максимальное количество итераций, заданных как пара, разделенная запятой, состоящая из 'IterationLimit' и положительного целого числа.

Эта опция поддерживает пакетные решатели только ('cgs', 'avb' или 'cvb0').

Пример: 'IterationLimit',200

Стохастические опции решателя

свернуть все

Максимальное количество проходов через данные, заданных как пара, разделенная запятой, состоящая из 'DataPassLimit' и положительного целого числа.

Если вы задаете 'DataPassLimit', но не 'MiniBatchLimit', то значение по умолчанию 'MiniBatchLimit' проигнорировано. Если вы задаете и 'DataPassLimit' и 'MiniBatchLimit', то fitlda использует аргумент, который приводит к обработке наименьшего количества наблюдений.

Эта опция поддерживает только стохастическое ('savb') решатель.

Пример: 'DataPassLimit',2

Максимальное количество мини-пакетных передач, заданных как пара, разделенная запятой, состоящая из 'MiniBatchLimit' и положительного целого числа.

Если вы задаете 'MiniBatchLimit', но не 'DataPassLimit', то fitlda игнорирует значение по умолчанию 'DataPassLimit'. Если вы задаете и 'MiniBatchLimit' и 'DataPassLimit', то fitlda использует аргумент, который приводит к обработке наименьшего количества наблюдений. Значением по умолчанию является ceil(numDocuments/MiniBatchSize), где numDocuments является количеством входных документов.

Эта опция поддерживает только стохастическое ('savb') решатель.

Пример: 'MiniBatchLimit',200

Мини-пакетный размер, заданный как пара, разделенная запятой, состоящая из 'MiniBatchLimit' и положительного целого числа. Функциональные процессы документы MiniBatchSize в каждой итерации.

Эта опция поддерживает только стохастическое ('savb') решатель.

Пример: 'MiniBatchSize',512

Затухание темпа обучения, заданное как пара, разделенная запятой 'LearnRateDecay' и положительная скалярная величина, меньше чем или равная 1.

Для мини-пакетного t функция устанавливает темп обучения на η(t)=1/(1+t)κ, где κ затухание темпа обучения.

Если LearnRateDecay близко к 1, то темп обучения затухает быстрее, и модель извлекает уроки в основном из более ранних мини-пакетов. Если LearnRateDecay близко к 0, то темп обучения затухает медленнее, и модель продолжает извлекать уроки из большего количества мини-пакетов. Для получения дополнительной информации смотрите Стохастический Решатель.

Эта опция поддерживает стохастический решатель только ('savb').

Пример: 'LearnRateDecay',0.75

Параметры экрана

свернуть все

Данные о валидации, чтобы контролировать сходимость оптимизации, заданную как пара, разделенная запятой, состоящая из 'ValidationData' и объекта bagOfWords, объекта bagOfNgrams или разреженной матрицы подсчетов слов. Если данные о валидации являются матрицей, то данные должны иметь ту же ориентацию и то же количество слов как входные документы.

Уровень многословия, заданный как пара, разделенная запятой, состоящая из 'Verbose' и одно из следующего:

  • 0 – Не отображайте многословный вывод.

  • 1 – Отобразите информацию о прогрессе.

Пример: 'Verbose',0

Выходные аргументы

свернуть все

Выведите модель LDA, возвращенную как объект ldaModel.

Больше о

свернуть все

Скрытое выделение Дирихле

Модель скрытого выделения Дирихле (LDA) является моделью тематики документа, которая обнаруживает базовые темы в наборе документов и выводит вероятности слова в темах. LDA моделирует набор документов D как смеси темы θ1,,θD, по темам K, охарактеризованным векторами вероятностей слова φ1,,φK. Модель принимает что смеси темы θ1,,θD, и темы φ1,,φK следуйте за распределением Дирихле с параметрами концентрации α и β соответственно.

Смеси темы θ1,,θD векторы вероятности длины K, где K является количеством тем. Запись θdi вероятность темы i, появляющийся в d th документ. Смеси темы соответствуют строкам свойства DocumentTopicProbabilities объекта ldaModel.

Темы φ1,,φK векторы вероятности длины V, где V является количеством слов в словаре. Запись φiv соответствует вероятности v th слово словаря, появляющегося в i th тема. Темы φ1,,φK соответствуйте столбцам свойства TopicWordProbabilities объекта ldaModel.

Учитывая темы φ1,,φK и предшествующий Дирихле α на смесях темы LDA принимает следующий порождающий процесс для документа:

  1. Выберите смесь темы θ~Дирихле(α). Случайная переменная θ вектор вероятности длины K, где K является количеством тем.

  2. Для каждого слова в документе:

    1. Выберите список тем z~Категориальный(θ). z случайной переменной является целым числом от 1 до K, где K является количеством тем.

    2. Выберите слово w~Категориальный(φz). w случайной переменной является целым числом от 1 до V, где V является количеством слов в словаре и представляет соответствующее слово в словаре.

При этом порождающем процессе, совместном распределении документа со словами w1,,wN, со смесью темы θ, и с индексами темы z1,,zN дают

p(θ,z,w|α,φ)=p(θ|α)n=1Np(zn|θ)p(wn|zn,φ),

где N является количеством слов в документе. Подведение итогов совместного распределения по z и затем интеграция θ приводит к предельному распределению документа w:

p(w|α,φ)=θp(θ|α)n=1Nznp(zn|θ)p(wn|zn,φ)dθ.

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

Распределение Дирихле

Распределение Дирихле является непрерывным обобщением распределения многочлена. Учитывая количество категорий K2, и параметр концентрации α, где α вектор положительных реалов длины K, функцией плотности вероятности распределения Дирихле дают

p(θα)=1B(α)i=1Kθiαi1,

где B обозначает многомерную Бета-функцию, данную

B(α)=i=1KΓ(αi)Γ(i=1Kαi).

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

Стохастический решатель

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

Для мини-пакетного t решатель устанавливает темп обучения на η(t)=1/(1+t)κ, где κ затухание темпа обучения.

Функция использует затухание темпа обучения, чтобы обновить Φ, матрица вероятностей слова на тему, путем установки

Φ(t)=(1η(t))Φ(t1)+η(t)Φ(t*),

где Φ(t*) матрица, усвоенная из мини-пакетного t, и Φ(t1) матрица, усвоенная из мини-пакетов 1 через t-1.

Прежде чем изучение начинается (когда t = 0), функция инициализирует начальные вероятности слова на тему со случайными значениями.

Вопросы совместимости

развернуть все

Поведение изменяется в R2018b

Ссылки

[1] Foulds, Джеймс, Леви Бойлес, Кристофер Дюбуа, Padhraic Smyth и Макс Веллинг. "Стохастический свернутый вариационный Байесов вывод для скрытого выделения Дирихле". В Продолжениях 19-й международной конференции ACM SIGKDD по вопросам открытия Знаний и анализа данных, стр 446–454. ACM, 2013.

[2] Хоффман, Мэтью Д., Дэвид М. Блеи, Чон Ван и Джон Пэйсли. "Стохастический вариационный вывод". Журнал Исследования Машинного обучения 14, № 1 (2013): 1303–1347.

[3] Гриффитс, Томас Л. и Марк Стеиверс. "Находя научные темы". Продолжения Национальной академии наук 101, нет. suppl 1 (2004): 5228–5235.

[4] Асунсьон, Артур, Макс Веллинг, Padhraic Smyth и Yee Whye Teh. "При сглаживании и выводе для моделей темы". В Продолжениях Двадцать пятой Конференции по Неуверенности в Искусственном интеллекте, стр 27–34. Нажатие AUAI, 2009.

[5] Teh, Ии В., Дэвид Ньюман и Макс Веллинг. "Свернутый вариационный Байесов алгоритм вывода для скрытого выделения Дирихле". В Усовершенствованиях в нейронных системах обработки информации, стр 1353–1360. 2007.

Введенный в R2017b

Для просмотра документации необходимо авторизоваться на сайте