exponenta event banner

fitlda

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

Описание

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

пример

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.077325 seconds.
=====================================================================================
| Iteration  |  Time per  |  Relative  |  Training  |     Topic     |     Topic     |
|            | iteration  | change in  | perplexity | concentration | concentration |
|            | (seconds)  |   log(L)   |            |               |   iterations  |
=====================================================================================
|          0 |       0.36 |            |  1.215e+03 |         1.000 |             0 |
|          1 |       0.01 | 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.01 | 9.4193e-04 |  1.111e+03 |         1.000 |             0 |
|          5 |       0.01 | 3.7079e-04 |  1.108e+03 |         1.000 |             0 |
|          6 |       0.01 | 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

Figure contains objects of type wordcloud. The chart of type wordcloud has title Topic: 1. The chart of type wordcloud has title Topic: 2. The chart of type wordcloud has title Topic: 3. The chart of type wordcloud has title Topic: 4.

Поместите модель LDA в коллекцию документов, представленных матрицей подсчета слов.

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

rng('default')

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

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')

Figure contains an axes. The axes with title Topic Mixtures contains 7 objects of type bar. These objects represent Topic 1, Topic 2, Topic 3, Topic 4, Topic 5, Topic 6, Topic 7.

Чтобы воспроизвести результаты в этом примере, установите 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.029643 seconds.
=====================================================================================
| Iteration  |  Time per  |  Relative  |  Training  |     Topic     |     Topic     |
|            | iteration  | change in  | perplexity | concentration | concentration |
|            | (seconds)  |   log(L)   |            |               |   iterations  |
=====================================================================================
|          0 |       0.39 |            |  1.159e+03 |         5.000 |             0 |
|          1 |       0.13 | 5.4884e-02 |  8.028e+02 |         5.000 |             0 |
|          2 |       0.11 | 4.7400e-03 |  7.778e+02 |         5.000 |             0 |
|          3 |       0.11 | 3.4597e-03 |  7.602e+02 |         5.000 |             0 |
|          4 |       0.14 | 3.4662e-03 |  7.430e+02 |         5.000 |             0 |
|          5 |       0.11 | 2.9259e-03 |  7.288e+02 |         5.000 |             0 |
|          6 |       0.14 | 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))

Figure contains objects of type wordcloud. The chart of type wordcloud has title Topic 19. The chart of type wordcloud has title Topic 8.

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

свернуть все

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

Число разделов, указанное как положительное целое число. Пример выбора количества разделов см. в разделе Выбор количества разделов для модели LDA.

Пример: 200

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

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

Укажите дополнительные пары, разделенные запятыми Name,Value аргументы. 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'

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

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

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

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

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

Типы данных: logical

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

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

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

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

Типы данных: logical

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

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

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

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

  • 'unordered' - Не сортировать темы.

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

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

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

  • '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 объект, a bagOfNgrams объект или разреженная матрица подсчета слов. Если данные проверки являются матрицей, то они должны иметь ту же ориентацию и то же количество слов, что и входные документы.

Частота проверки модели в количестве итераций, указанная как пара, разделенная запятыми, состоящая из 'ValidationFrequency' и положительное целое число.

Значение по умолчанию зависит от решателя, используемого для подгонки модели. Для стохастического решателя значением по умолчанию является 10. Для других решателей значением по умолчанию является 1.

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

  • 0 - не отображать подробные выходные данные.

  • 1 - Отображение информации о ходе выполнения.

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

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

свернуть все

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

Подробнее

свернуть все

Латентное распределение Дирихле

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

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

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

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

  1. Возьмем образец тематической смеси, ((α)). Случайная величина start- вектор вероятности длины K, где K - число тем.

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

    1. Пример индекса тематики z ~ Категориальный (start). Случайная величина z - целое число от 1 до K, где K - число тем.

    2. Пример слова w ~ Категориальный (фз). Случайная величина w - целое число от 1 до V, где V - количество слов в лексике, и представляет соответствующее слово в лексике.

При этом генеративном процессе совместное распределение документа со словами w1,...,wN, с тематической смесью, и с тематическими индексами z1,...,zN задается

p (start, z, w 'α, start) = p (start' α) ∏n=1Np (zn'

где N - количество слов в документе. Суммирование совместного распределения по оси z, а затем интегрирование по оси, дает предельное распределение документа w:

p (w 'α, start) =∫θp (λ' α) ∏n=1N∑znp (zn '

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

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

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

p (θ ∣α) =1B (α) ∏i=1K ​θiαi−1,

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

B (α) =∏i=1K​Γ​ (αi) Γ (∑i=1K​αi).

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

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

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

Для мини-пакета t решатель устанавливает скорость обучения, равную (t) = 1/( 1 + t )

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

Φ (t) = (1−η (т)) Φ (t−1) + η (t) Φ (t*),

где (t *) - матрица, извлеченная из мини-партии t, а (t − 1) - матрица, извлеченная из мини-партий 1 -t-1.

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

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

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

В R2018b изменилось поведение

Ссылки

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

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

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

[4] Асунсьон, Артур, Макс Веллинг, Падхраик Смит и Йи Уи Те. «О сглаживании и выводе для тематических моделей». В материалах двадцать пятой Конференции по неопределенности в искусственном интеллекте, стр. 27-34. AUAI Press, 2009.

[5] Те, Йи У., Дэвид Ньюман и Макс Веллинг. «Свернутый алгоритм вариационного байесовского вывода для скрытого распределения Дирихле». In Advances in neural information processing systems, pp. 1353-1360. 2007.

Представлен в R2017b