Подходящая модель скрытого выделения Дирихле (LDA)
Модель скрытого выделения Дирихле (LDA) является моделью темы, которая обнаруживает базовые темы в наборе документов и выводит вероятности слова в темах. Если модель была подходящим использованием мешка n модели граммов, то программное обеспечение обрабатывает N-граммы как отдельные слова.
mdl = fitlda(bag,numTopics)
mdl = fitlda(counts,numTopics)
mdl = fitlda(___,Name,Value)
задает дополнительные опции с помощью одного или нескольких аргументов пары "имя-значение".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))
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
должен появиться в кавычках. Вы можете задать несколько аргументов в виде пар имен и значений в любом порядке, например: 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
(значение по умолчанию) | положительная скалярная величинаОтносительный допуск на логарифмической вероятности, заданной как пара, разделенная запятой, состоящая из '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'
— Концентрация Word1
(значение по умолчанию) | неотрицательный скалярКонцентрация Word, заданная как пара, разделенная запятой, состоящая из 'WordConcentration'
и неотрицательного скаляра. Программное обеспечение устанавливает Дирихле, предшествующий по темам (вероятности слова на тему) быть симметричным параметром распределения Дирихле со значением WordConcentration/numWords
, где numWords
является размером словаря входных документов. Для получения дополнительной информации смотрите Скрытое Выделение Дирихле.
'DocumentsIn'
— Ориентация документов'rows'
(значение по умолчанию) | 'columns'
Ориентация документов в матрице для подсчета количества слов, заданной как пара, разделенная запятой, состоящая из 'DocumentsIn'
и одно из следующего:
'Строки'
Вход является матрицей подсчетов слов со строками, соответствующими документам.
'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 функция устанавливает темп обучения на , где затухание темпа обучения.
Если 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. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.