Подходящая модель скрытого выделения Дирихле (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.107614 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.04 | 1.0482e-02 | 1.128e+03 | 1.000 | 0 | | 2 | 0.01 | 1.7190e-03 | 1.115e+03 | 1.000 | 0 | | 3 | 0.02 | 4.3796e-04 | 1.118e+03 | 1.000 | 0 | | 4 | 0.02 | 9.4193e-04 | 1.111e+03 | 1.000 | 0 | | 5 | 0.02 | 3.7079e-04 | 1.108e+03 | 1.000 | 0 | | 6 | 0.02 | 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.172684 seconds. ===================================================================================== | Iteration | Time per | Relative | Training | Topic | Topic | | | iteration | change in | perplexity | concentration | concentration | | | (seconds) | log(L) | | | iterations | ===================================================================================== | 0 | 0.18 | | 1.159e+03 | 5.000 | 0 | | 1 | 0.10 | 5.4884e-02 | 8.028e+02 | 5.000 | 0 | | 2 | 0.06 | 4.7400e-03 | 7.778e+02 | 5.000 | 0 | | 3 | 0.09 | 3.4597e-03 | 7.602e+02 | 5.000 | 0 | | 4 | 0.07 | 3.4662e-03 | 7.430e+02 | 5.000 | 0 | | 5 | 0.08 | 2.9259e-03 | 7.288e+02 | 5.000 | 0 | | 6 | 0.05 | 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
— Модель InputbagOfWords
возразите | bagOfNgrams
объектВведите сумку слов или мешок n модели граммов, заданной как bagOfWords
возразите или bagOfNgrams
объект. Если bag
bagOfNgrams
объект, затем функция обрабатывает N-граммы как отдельные слова.
numTopics
— Количество темКоличество тем, заданных как положительное целое число. Для примера, показывающего, как выбрать количество тем, смотрите, Выбирают Number of Topics for LDA Model.
Пример: 200
counts
— Подсчет частот словПодсчет частот слов, заданных как матрица неотрицательных целых чисел. Если вы задаете 'DocumentsIn'
быть 'rows'
, затем значение counts(i,j)
соответствует числу раз, j th слово словаря появляется в i th документ. В противном случае, значение counts(i,j)
соответствует числу раз, i th слово словаря появляется в j th документ.
Задайте дополнительные разделенные запятой пары 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'
— Относительный допуск на логарифмической правдоподобности
(значение по умолчанию) | положительная скалярная величинаОтносительный допуск на логарифмической правдоподобности, заданной как разделенная запятой пара, состоящая из 'LogLikelihoodTolerance'
и положительная скалярная величина. Оптимизация завершает работу, когда этот допуск достигнут.
Пример: 'LogLikelihoodTolerance',0.001
'FitTopicProbabilities'
— Опция для подходящих корпусных вероятностей темыtrue
(значение по умолчанию) | false
Опция для подходящей концентрации темы, заданной как разделенная запятой пара, состоящая из 'FitTopicConcentration'
и любой true
или false
.
Функция соответствует предшествующему Дирихле на смесях темы, где концентрация темы и корпусные вероятности темы, которые суммируют к 1.
Пример: 'FitTopicProbabilities',false
Типы данных: логический
'FitTopicConcentration'
— Опция для подходящей концентрации темыtrue
| false
Опция для подходящей концентрации темы, заданной как разделенная запятой пара, состоящая из 'FitTopicConcentration'
и любой true
или false
.
Для пакета решатели 'cgs'
, 'avb'
, и 'cvb0'
, значение по умолчанию для FitTopicConcentration
true
. Для стохастического решателя 'savb'
, значением по умолчанию является false
.
Функция соответствует предшествующему Дирихле на смесях темы, где концентрация темы и корпусные вероятности темы, которые суммируют к 1.
Пример: 'FitTopicConcentration',false
Типы данных: логический
'InitialTopicConcentration'
— Первоначальная оценка концентрации темыnumTopics/4
(значение по умолчанию) | неотрицательный скалярПервоначальная оценка концентрации темы, заданной как разделенная запятой пара, состоящая из 'InitialTopicConcentration'
и неотрицательный скаляр. Функция устанавливает концентрацию на тему к TopicConcentration/NumTopics
. Для получения дополнительной информации смотрите Скрытое Выделение Дирихле.
Пример: 'InitialTopicConcentration',25
'TopicOrder'
— Порядок темы'initial-fit-probability'
(значение по умолчанию) | 'unordered'
Порядок темы, заданный как одно из следующего:
'initial-fit-probability'
– Сортировка тем корпусными вероятностями темы входного набора документа (CorpusTopicProbabilities
свойство.
'unordered'
– Не сортируйте темы.
'WordConcentration'
— Концентрация Word
(значение по умолчанию) | неотрицательный скалярКонцентрация Word, заданная как разделенная запятой пара, состоящая из 'WordConcentration'
и неотрицательный скаляр. Программное обеспечение устанавливает Дирихле, предшествующий по темам (вероятности слова на тему) быть симметричным параметром распределения Дирихле со значением WordConcentration/numWords
, где numWords
размер словаря входных документов. Для получения дополнительной информации смотрите Скрытое Выделение Дирихле.
'DocumentsIn'
— Ориентация документов'rows'
(значение по умолчанию) | 'columns'
Ориентация документов в матрице для подсчета количества слов, заданной как разделенная запятой пара, состоящая из 'DocumentsIn'
и одно из следующего:
'rows'
– Вход является матрицей подсчетов слов со строками, соответствующими документам.
'columns'
– Вход является транспонированной матрицей подсчетов слов со столбцами, соответствующими документам.
Эта опция только применяется, если вы задаете входные документы как матрицу подсчетов слов.
Если вы ориентируете свою матрицу для подсчета количества слов так, чтобы документы соответствовали столбцам и задали 'DocumentsIn','columns'
, затем вы можете испытать значительное сокращение во время выполнения оптимизации.
'IterationLimit'
— Максимальное количество итераций
(значение по умолчанию) | положительное целое числоМаксимальное количество итераций, заданных как разделенная запятой пара, состоящая из '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 функция устанавливает темп обучения на , где затухание темпа обучения.
Если LearnRateDecay
близко к 1, затем темп обучения затухает быстрее, и модель извлекает уроки в основном из более ранних мини-пакетов. Если LearnRateDecay
близко к 0, затем темп обучения затухает медленнее, и модель продолжает извлекать уроки из большего количества мини-пакетов. Для получения дополнительной информации смотрите Стохастический Решатель.
Эта опция поддерживает стохастический решатель только ('savb'
).
Пример: 'LearnRateDecay',0.75
'ValidationData'
— Данные о валидации[]
(значение по умолчанию) | bagOfWords
возразите | bagOfNgrams
возразите | разреженная матрица подсчетов словДанные о валидации, чтобы контролировать сходимость оптимизации, заданную как разделенная запятой пара, состоящая из 'ValidationData'
и bagOfWords
объект, bagOfNgrams
объект или разреженная матрица подсчетов слов. Если данные о валидации являются матрицей, то данные должны иметь ту же ориентацию и то же количество слов как входные документы.
'Verbose'
— Уровень многословияУровень многословия, заданный как разделенная запятой пара, состоящая из 'Verbose'
и одно из следующего:
0 – Не отображайте многословный вывод.
1 – Отобразите информацию о прогрессе.
Пример: 'Verbose',0
mdl
— Модель Output LDAldaModel
объектВыведите модель LDA, возвращенную как ldaModel
объект.
Модель скрытого выделения Дирихле (LDA) является моделью тематики документа, которая обнаруживает базовые темы в наборе документов и выводит вероятности слова в темах. LDA моделирует набор документов D как смеси темы , по темам K, охарактеризованным векторами вероятностей слова . В модели принимается, что смеси темы , и темы следуйте за распределением Дирихле параметрами концентрации и соответственно.
Смеси темы векторы вероятности длины K, где K является количеством тем. Запись вероятность темы i, появляющийся в d th документ. Смеси темы соответствуют строкам DocumentTopicProbabilities
свойство ldaModel
объект.
Темы векторы вероятности длины V, где V является количеством слов в словаре. Запись соответствует вероятности v th слово словаря, появляющегося в i th тема. Темы соответствуйте столбцам TopicWordProbabilities
свойство ldaModel
объект.
Учитывая темы и предшествующий Дирихле на смесях темы LDA принимает следующий порождающий процесс для документа:
Произведите смесь темы . Случайная переменная вектор вероятности длины K, где K является количеством тем.
Для каждого слова в документе:
Произведите список тем . z случайной переменной является целым числом от 1 до K, где K является количеством тем.
Произведите слово . w случайной переменной является целым числом от 1 до V, где V является количеством слов в словаре и представляет соответствующее слово в словаре.
При этом порождающем процессе, совместном распределении документа со словами , со смесью темы , и с индексами темы дают
где N является количеством слов в документе. Подведение итогов совместного распределения по z и затем интеграция дает к предельному распределению документа w:
Следующая схема иллюстрирует модель LDA как вероятностную графическую модель. Теневые узлы являются наблюдаемыми переменными, незаштрихованные узлы являются скрытыми переменными, узлы без основ являются параметрами модели. Стрелы подсвечивают, что зависимости между случайными переменными и пластинами указывают на повторенные узлы.
Распределение Дирихле является непрерывным обобщением распределения многочлена. Учитывая количество категорий , и параметр концентрации , где вектор положительных реалов длины K, функцией плотности вероятности распределения Дирихле дают
где B обозначает многомерную Бета-функцию, данную
Особый случай распределения Дирихле является симметричным распределением Дирихле. Симметричное распределение Дирихле характеризуется параметром концентрации , где все элементы то же самое.
Стохастические документы процессов решателя в мини-пакетах. Это обновляет вероятности слова на тему с помощью взвешенной суммы вероятностей, вычисленных от каждого мини-пакета и вероятностей от всех предыдущих мини-пакетов.
Для мини-пакетного t решатель устанавливает темп обучения на , где затухание темпа обучения.
Функция использует затухание темпа обучения, чтобы обновиться , матрица вероятностей слова на тему, путем установки
где матрица, усвоенная из мини-пакетного t, и матрица, усвоенная из мини-пакетов 1 через t-1.
Прежде чем изучение начинается (когда t = 0), функция инициализирует начальные вероятности слова на тему со случайными значениями.
Поведение изменяется в R2018b
Начиная в R2018b, fitlda
, по умолчанию, сортирует темы в порядке убывания вероятностей темы входного набора документа. Это поведение облегчает находить темы с самыми высокими вероятностями.
В предыдущих версиях, fitlda
не изменяет порядок темы. Чтобы воспроизвести поведение, установите 'TopicOrder'
опция к 'unordered'
.
[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.
bagOfNgrams
| bagOfWords
| fitlsa
| ldaModel
| logp
| lsaModel
| predict
| resume
| topkwords
| transform
| wordcloud
У вас есть модифицированная версия этого примера. Вы хотите открыть этот пример со своими редактированиями?
1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.
2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.
3. Сохраняйте структуру оригинального текста - например, не разбивайте одно предложение на два.
4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.
5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.