Подгонка скрытой модели распределения Дирихле (LDA)
Скрытая модель распределения Дирихле (LDA) - это модель темы, которая обнаруживает основные темы в коллекции документов и выводит вероятности слов в темах. Если модель была подогнана с использованием модели мешка n-грамм, то программное обеспечение рассматривает n-грамм как отдельные слова.
указывает дополнительные параметры, использующие один или несколько аргументов пары имя-значение.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

Поместите модель 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')

Чтобы воспроизвести результаты в этом примере, установите 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))

bag - Входная модельbagOfWords объект | bagOfNgrams объектВходная модель сумки слов или сумки n граммов, указанная как bagOfWords объект или bagOfNgrams объект. Если bag является bagOfNgrams объект, то функция рассматривает каждый n-грамм как одно слово.
numTopics - Количество темЧисло разделов, указанное как положительное целое число. Пример выбора количества разделов см. в разделе Выбор количества разделов для модели LDA.
Пример: 200
counts - Число частот словЧисло частот слов, указанное как матрица неотрицательных целых чисел. При указании 'DocumentsIn' быть 'rows', то значение counts(i,j) соответствует числу раз, когда j-е слово словаря появляется в i-ом документе. В противном случае значение counts(i,j) соответствует числу раз, когда i-е слово словаря появляется в j-ом документе.
Укажите дополнительные пары, разделенные запятыми Name,Value аргументы. Name является именем аргумента и Value - соответствующее значение. Name должен отображаться внутри кавычек. Можно указать несколько аргументов пары имен и значений в любом порядке как Name1,Value1,...,NameN,ValueN.
'Solver','avb' определяет использование аппроксимации вариационного Байеса в качестве решателя.'Solver' - Решатель для оптимизации'cgs' (по умолчанию) | 'savb' | 'avb' | 'cvb0'Решатель для оптимизации, указанный как разделенная запятыми пара, состоящая из 'Solver' и одно из следующих:
Стохастический решатель
Решатели партий
'cgs' - Использовать свернутую выборку Гиббса [3]. Этот решатель может быть более точным за счет увеличения времени работы. resume функция не поддерживает модели, оснащенные CGS.
'avb' - Используйте примерный вариационный Байес [4]. Этот решатель обычно работает быстрее, чем свернутая выборка Гиббса и свернутая вариационная Байес, но может быть менее точным.
'cvb0' - использовать свернутый вариационный байес, нулевой порядок [4]
. Этот решатель может быть более точным, чем [5]приблизительный вариационный Байес, за счет увеличения времени работы.
Пример сравнения решателей см. в разделе Сравнение решателей LDA.
Пример: 'Solver','savb'
'LogLikelihoodTolerance' - Относительный допуск по логарифмическому правдоподобию0.0001 (по умолчанию) | положительный скалярОтносительный допуск на log-правдоподобие, указанный как разделенная запятыми пара, состоящая из 'LogLikelihoodTolerance' и положительный скаляр. Оптимизация завершается при достижении этого допуска.
Пример: 'LogLikelihoodTolerance',0.001
'FitTopicProbabilities' - Возможность подбора вероятностей темы корпусаtrue (по умолчанию) | falseОпция для настройки концентрации темы, указанная как разделенная запятыми пара, состоящая из 'FitTopicConcentration' и либо true или false.
Функция соответствует предшествующему Дирихле p1p2⋯pK) на смесях темы, α0 - концентрация темы, p1,...,pK - вероятности темы корпуса, которые суммируются до 1.
Пример: 'FitTopicProbabilities',false
Типы данных: logical
'FitTopicConcentration' - Возможность подбора тематической концентрацииtrue | falseОпция для настройки концентрации темы, указанная как разделенная запятыми пара, состоящая из 'FitTopicConcentration' и либо true или false.
Для партии решатели 'cgs', 'avb', и 'cvb0', значение по умолчанию для FitTopicConcentration является true. Для стохастического решателя 'savb', значение по умолчанию - false.
Функция соответствует предшествующему Дирихле p1p2⋯pK) на смесях темы, α0 - концентрация темы, p1,...,pK - вероятности темы корпуса, которые суммируются до 1.
Пример: 'FitTopicConcentration',false
Типы данных: logical
'InitialTopicConcentration' - Первоначальная оценка концентрации темыnumTopics/4 (по умолчанию) | неотрицательный скалярНачальная оценка концентрации темы, указанная как пара, разделенная запятыми, состоящая из 'InitialTopicConcentration' и неотрицательный скаляр. Функция устанавливает концентрацию на тему как TopicConcentration/NumTopics. Дополнительные сведения см. в разделе Латентное распределение дирихле.
Пример: 'InitialTopicConcentration',25
'TopicOrder' - Тематический заказ'initial-fit-probability' (по умолчанию) | 'unordered'Порядок тематики, указанный как одно из следующих:
'initial-fit-probability' - Сортировать темы по вероятностям темы корпуса набора входных документов ( CorpusTopicProbabilities свойство).
'unordered' - Не сортировать темы.
'WordConcentration' - Концентрация слов1 (по умолчанию) | неотрицательный скалярКонцентрация слов, указанная как разделенная запятыми пара, состоящая из 'WordConcentration' и неотрицательный скаляр. Программное обеспечение устанавливает предшествующий Дирихле по темам (слово вероятности на тему) в качестве симметричного параметра распределения Дирихле со значением WordConcentration/numWords, где numWords - словарный размер входных документов. Дополнительные сведения см. в разделе Латентное распределение дирихле.
'DocumentsIn' - Ориентация документов'rows' (по умолчанию) | 'columns'Ориентация документов в матрице подсчета слов, определяемая как разделенная запятыми пара, состоящая из 'DocumentsIn' и одно из следующих:
'rows' - Ввод представляет собой матрицу подсчета слов со строками, соответствующими документам.
'columns' - Ввод представляет собой транспонированную матрицу подсчета слов со столбцами, соответствующими документам.
Этот параметр применяется только в том случае, если входные документы указаны в виде матрицы счетчиков слов.
Примечание
Если сориентировать матрицу подсчета слов так, чтобы документы соответствовали столбцам, и указать 'DocumentsIn','columns', то вы можете испытать значительное сокращение времени оптимизации-выполнения.
'IterationLimit' - Максимальное число итераций100 (по умолчанию) | положительное целое числоМаксимальное количество итераций, указанное как пара, разделенная запятыми, состоящая из 'IterationLimit' и положительное целое число.
Этот параметр поддерживает только решатели пакетов ('cgs', 'avb', или 'cvb0').
Пример: 'IterationLimit',200
'DataPassLimit' - Максимальное количество проходов через данныеМаксимальное количество проходов через данные, указанное как разделенная запятыми пара, состоящая из 'DataPassLimit' и положительное целое число.
При указании 'DataPassLimit' но не 'MiniBatchLimit', то значение по умолчанию 'MiniBatchLimit' игнорируется. При указании обоих 'DataPassLimit' и 'MiniBatchLimit', то fitlda использует аргумент, который приводит к обработке наименьшего количества наблюдений.
Этот параметр поддерживает только стохастический ('savb') решатель.
Пример: 'DataPassLimit',2
'MiniBatchLimit' - Максимальное количество проходов мини-партииМаксимальное количество проходов мини-пакета, указанное как пара, разделенная запятыми, состоящая из 'MiniBatchLimit' и положительное целое число.
При указании 'MiniBatchLimit' но не 'DataPassLimit', то fitlda игнорирует значение по умолчанию 'DataPassLimit'. При указании обоих 'MiniBatchLimit' и 'DataPassLimit', то fitlda использует аргумент, который приводит к обработке наименьшего количества наблюдений. Значение по умолчанию: ceil(numDocuments/MiniBatchSize), где numDocuments - количество входных документов.
Этот параметр поддерживает только стохастический ('savb') решатель.
Пример: 'MiniBatchLimit',200
'MiniBatchSize' - Размер мини-партииРазмер мини-партии, указанный как разделенная запятыми пара, состоящая из 'MiniBatchLimit' и положительное целое число. Функциональные процессы MiniBatchSize документов в каждой итерации.
Этот параметр поддерживает только стохастический ('savb') решатель.
Пример: 'MiniBatchSize',512
'LearnRateDecay' - Снижение уровня обученияРаспад скорости обучения, указанный как пара, разделенная запятыми 'LearnRateDecay' и положительный скаляр, меньший или равный 1.
Для мини-пакета t функция устанавливает скорость обучения, которая равняется (+ t), где
Если LearnRateDecay близок к 1, затем скорость обучения замедляется быстрее, и модель учится в основном на более ранних мини-пакетах. Если LearnRateDecay близок к 0, затем скорость обучения замедляется, и модель продолжает учиться на большем количестве мини-пакетов. Дополнительные сведения см. в разделе Стохастический решатель.
Эта опция поддерживает только стохастический решатель ('savb').
Пример: 'LearnRateDecay',0.75
'ValidationData' - Данные проверки[] (по умолчанию) | bagOfWords объект | bagOfNgrams object | разреженная матрица счетчиков словДанные проверки для мониторинга сходимости оптимизации, указанные как пара, разделенная запятыми, состоящая из 'ValidationData' и bagOfWords объект, a bagOfNgrams объект или разреженная матрица подсчета слов. Если данные проверки являются матрицей, то они должны иметь ту же ориентацию и то же количество слов, что и входные документы.
'ValidationFrequency' - Периодичность проверки моделиЧастота проверки модели в количестве итераций, указанная как пара, разделенная запятыми, состоящая из 'ValidationFrequency' и положительное целое число.
Значение по умолчанию зависит от решателя, используемого для подгонки модели. Для стохастического решателя значением по умолчанию является 10. Для других решателей значением по умолчанию является 1.
'Verbose' - Уровень детализацииУровень детализации, указанный как разделенная запятыми пара, состоящая из 'Verbose' и одно из следующих:
0 - не отображать подробные выходные данные.
1 - Отображение информации о ходе выполнения.
Пример: 'Verbose',0
mdl - Выходная модель LDAldaModel объектВыходная модель LDA, возвращенная как ldaModel объект.
Скрытая модель распределения Дирихле (LDA) - это модель темы документа, которая обнаруживает основные темы в коллекции документов и выводит вероятности слов в темах. LDA моделирует совокупность D документов в качестве тематических смесей θ1,...,θD, по K темам, характеризующимся векторами вероятностей слов φ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 предполагает следующий генеративный процесс для документа:
Возьмем образец тематической смеси, (()). Случайная величина start- вектор вероятности длины K, где K - число тем.
Для каждого слова в документе:
Пример индекса тематики (start). Случайная величина z - целое число от 1 до K, где K - число тем.
Пример слова фз). Случайная величина w - целое число от 1 до V, где V - количество слов в лексике, и представляет соответствующее слово в лексике.
При этом генеративном процессе совместное распределение документа со словами w1,...,wN, с тематической и с тематическими z1,...,zN задается
'
где N - количество слов в документе. Суммирование совместного распределения по оси z, а затем интегрирование по , дает предельное распределение документа w:
'
Следующая диаграмма иллюстрирует модель LDA как вероятностную графическую модель. Закрашенные узлы - наблюдаемые переменные, неокрашенные - скрытые переменные, узлы без контуров - параметры модели. Стрелки выделяют зависимости между случайными величинами и табличками указывают повторяющиеся узлы.

Распределение Дирихле - непрерывное обобщение полиномиального распределения. Учитывая число категорий и параметр концентрации , где - вектор положительных реалов длины K, функция плотности вероятности распределения Дирихле задаётся
θiαi−1,
где B обозначает многомерную бета-функцию, заданную
∑i=1Kαi).
Частным случаем распределения Дирихле является симметричное распределение Дирихле. Симметричное распределение Дирихле характеризуется параметром концентрации , где все элементы одинаковы.
Стохастический решатель обрабатывает документы в мини-пакетах. Он обновляет вероятности слов по темам, используя взвешенную сумму вероятностей, вычисленных из каждого мини-пакета, и вероятностей из всех предыдущих мини-пакетов.
Для мини-пакета t решатель устанавливает скорость обучения, равную (+ t )
Функция использует распад темпа обучения, чтобы обновить , матрицу вероятностей слова за тему, устанавливая
(t) Φ (t*),
где (*) - матрица, извлеченная из мини-партии t, − 1) - матрица, извлеченная из мини-партий 1 -t-1.
Прежде чем начнется обучение (когда t = 0), функция инициализирует начальные вероятности слов по тематическому разделу (случайными значениями.
fitlda сортировка темВ R2018b изменилось поведение
Начиная с R2018b, fitldaпо умолчанию сортирует темы в порядке убывания вероятностей тем набора входных документов. Такое поведение облегчает поиск тем с самой высокой вероятностью.
В предыдущих версиях fitlda не изменяет порядок разделов. Чтобы воспроизвести поведение, установите 'TopicOrder' опция для 'unordered'.
[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.
bagOfNgrams | bagOfWords | fitlsa | ldaModel | logp | lsaModel | predict | resume | topkwords | transform | wordcloud
Имеется измененная версия этого примера. Открыть этот пример с помощью изменений?
1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.
2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.
3. Сохраняйте структуру оригинального текста - например, не разбивайте одно предложение на два.
4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.
5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.