Модель латентного распределения Дирихле (LDA)
Модель латентного распределения Дирихле (LDA) является тематической моделью, которая обнаруживает базовые темы в наборе документов и выводит вероятности слов в темах. Если модель подгонялась с помощью модели bag-of-n-gams, то программа рассматривает n-gams как отдельные слова.
Создайте модель LDA с помощью fitlda
функция.
NumTopics
- Количество темКоличество тем в модели LDA, заданное как положительное целое число.
TopicConcentration
- Тематическая концентрацияКонцентрация темы, заданная как положительная скалярная величина. Функция устанавливает концентрацию по темам равной TopicConcentration/NumTopics
. Для получения дополнительной информации смотрите Латентное распределение Дирихле.
WordConcentration
- Концентрация слов1
(по умолчанию) | неотрицательной скаляромКонцентрация слова, заданная как неотрицательный скаляр. Программное обеспечение устанавливает концентрацию каждого слова равной WordConcentration/numWords
, где numWords
- размер словаря входных документов. Для получения дополнительной информации смотрите Латентное распределение Дирихле.
CorpusTopicProbabilities
- Тематические вероятности набора входных документовТематические вероятности входа документов, заданные как вектор. Вероятности темы corpus модели LDA являются вероятностями наблюдения каждой темы во всем наборе данных, используемом для соответствия модели LDA. CorpusTopicProbabilities
вектор 1-by- K, где K - количество тем. k-я запись CorpusTopicProbabilities
соответствует вероятности наблюдения за k темы.
DocumentTopicProbabilities
- Вероятности по теме на входной документВероятности темы по входному документу, заданные как матрица. Вероятности темы документа модели LDA являются вероятностями наблюдения каждой темы в каждом документе, используемом для соответствия модели LDA. DocumentTopicProbabilities
- D матрица K, где D - количество документов, используемых для соответствия модели LDA, и K - количество тем. (d,k)-я запись DocumentTopicProbabilities
соответствует вероятности наблюдения за темой, k в d документа.
Если какие-либо темы имеют нулевую вероятность (CorpusTopicProbabilities
содержит нули), затем соответствующие столбцы DocumentTopicProbabilities
и TopicWordProbabilities
являются нулями.
Порядок строк в DocumentTopicProbabilities
соответствует порядку документов в обучающих данных.
TopicWordProbabilities
- Вероятности слов по темамВероятности слова по теме, заданные как матрица. Вероятности тематического слова модели LDA являются вероятностями наблюдения каждого слова в каждой теме модели LDA. TopicWordProbabilities
является V -by- K матрицей, где V - количество слов в Vocabulary
и K количество тем. (v,k)-я запись TopicWordProbabilities
соответствует вероятности наблюдения словесных v в тематических k.
Если какие-либо темы имеют нулевую вероятность (CorpusTopicProbabilities
содержит нули), затем соответствующие столбцы DocumentTopicProbabilities
и TopicWordProbabilities
являются нулями.
Порядок строк в TopicWordProbabilities
соответствует порядку слов в Vocabulary
.
TopicOrder
- Порядок темы'initial-fit-probability'
(по умолчанию) | 'unordered'
Порядок темы, заданный как один из следующих:
'initial-fit-probability'
- Сортировка темы по вероятностям темы corpus начальной подгонки модели. Эти вероятности являются CorpusTopicProbabilities
свойство начальной ldaModel
объект, возвращенный fitlda
. resume
функция не переупорядочивает темы полученной ldaModel
объекты.
'unordered'
- Не заказывайте темы.
FitInfo
- Информация, записанная при подборе модели LDAИнформация, записанная при подборе модели LDA, задается как struct со следующими полями:
TerminationCode
- Состояние оптимизации при выходе
0 - Достигнут предел итерации.
1 - Допуск логарифмической логарифмической правдоподобности.
TerminationStatus
- Объяснение возвращенного кода окончания
NumIterations
- Количество выполненных итераций
NegativeLogLikelihood
- Отрицательная логарифмическая правдоподобность передачи данных в fitlda
Perplexity
- Недоумение для данных, переданных fitlda
Solver
- Имя используемого решателя
History
- Struct, содержащая историю оптимизации
StochasticInfo
- Информация о хранении struct для стохастических решателей
Типы данных: struct
Vocabulary
- Список слов в моделиСписок слов в модели, заданный как строковый вектор.
Типы данных: string
logp | Логарифмические вероятности и качество подгонки модели LDA |
predict | Прогнозирование основных тем LDA документов |
resume | Возобновите подгонку модели LDA |
topkwords | Самые важные слова в модели мешка слов или теме LDA |
transform | Преобразуйте документы в низкомерное пространство |
wordcloud | Создайте график облака слов из текста, модели мешка слов, модели мешка n-граммов или модели LDA |
Чтобы воспроизвести результаты в этом примере, установите 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')
Загрузите данные примера. Файл sonnetsPreprocessed.txt
содержит предварительно обработанные версии сонетов Шекспира. Файл содержит по одному сонету на линию со словами, разделенными пространством. Извлеките текст из sonnetsPreprocessed.txt
разделите текст на документы в символах новой строки, а затем пометьте его токеном.
filename = "sonnetsPreprocessed.txt";
str = extractFileText(filename);
textData = split(str,newline);
documents = tokenizedDocument(textData);
Создайте модель мешка слов с помощью bagOfWords
.
bag = bagOfWords(documents);
Подгонка модели LDA с 20 темами. Чтобы подавить подробный выход, установите 'Verbose'
в 0.
numTopics = 20;
mdl = fitlda(bag,numTopics,'Verbose',0);
Найдите 20 лучших слов первой темы.
k = 20; topicIdx = 1; tbl = topkwords(mdl,k,topicIdx)
tbl=20×2 table
Word Score
________ _________
"eyes" 0.11155
"beauty" 0.05777
"hath" 0.055778
"still" 0.049801
"true" 0.043825
"mine" 0.033865
"find" 0.031873
"black" 0.025897
"look" 0.023905
"tis" 0.023905
"kind" 0.021913
"seen" 0.021913
"found" 0.017929
"sin" 0.015937
"three" 0.013945
"golden" 0.0099608
⋮
Найдите 20 лучших слов первой темы и используйте обратное среднее масштабирование в счетах.
tbl = topkwords(mdl,k,topicIdx,'Scaling','inversemean')
tbl=20×2 table
Word Score
________ ________
"eyes" 1.2718
"beauty" 0.59022
"hath" 0.5692
"still" 0.50269
"true" 0.43719
"mine" 0.32764
"find" 0.32544
"black" 0.25931
"tis" 0.23755
"look" 0.22519
"kind" 0.21594
"seen" 0.21594
"found" 0.17326
"sin" 0.15223
"three" 0.13143
"golden" 0.090698
⋮
Создайте облако слов, используя масштабированные счета в качестве данных о размере.
figure wordcloud(tbl.Word,tbl.Score);
Получите вероятности темы документа (также известные как смеси тем) документов, используемых для соответствия модели LDA.
Чтобы воспроизвести результаты, установите 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);
Подгонка модели LDA с 20 темами. Чтобы подавить подробный выход, установите 'Verbose'
в 0.
numTopics = 20;
mdl = fitlda(bag,numTopics,'Verbose',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]
Просмотрите тематические вероятности первого документа в обучающих данных.
topicMixtures = mdl.DocumentTopicProbabilities; figure bar(topicMixtures(1,:)) title("Document 1 Topic Probabilities") xlabel("Topic Index") ylabel("Probability")
Чтобы воспроизвести результаты в этом примере, установите 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))
Модель латентного распределения Дирихле (LDA) является моделью темы документа, которая обнаруживает базовые темы в наборе документов и выводит вероятности слов в темах. LDA моделирует набор D документов как тематические смеси , над K темами, характеризующимися векторами вероятностей слова . Модель принимает, что тематические смеси , и темы следуйте распределению Дирихле с параметрами концентрации и соответственно.
Тематические смеси являются векторами вероятностей длины K, где K - количество тем. Вход - вероятность появления i темы в d-м документе. Тематические смеси соответствуют строкам DocumentTopicProbabilities
свойство ldaModel
объект.
Темы являются векторами вероятностей длины V, где V - количество слов в словаре. Вход соответствует вероятности появления v-го слова словаря в i-й теме. Темы соответствуют столбцам TopicWordProbabilities
свойство ldaModel
объект.
Учитывая темы и Дирихлет априорный что касается тематических смесей, то LDA предполагает следующий генеративный процесс для документа:
Образец тематической смеси . Случайная переменная является вектором вероятностей длины K, где K - количество тем.
Для каждого слова в документе:
Пример индекса темы . z случайной переменной является целым числом от 1 до K, где K - количество тем.
Пример слова . Случайная переменная w является целым числом от 1 до V, где V - количество слов в словаре, и представляет соответствующее слово в словаре.
В рамках этого генеративного процесса совместное распределение документа со словами , с тематической смесью , и с индексами тем дается
где N - количество слов в документе. Суммирование распределения соединений по z и последующая интеграция приводит к маргинальному распределению документа w:
Следующая схема иллюстрирует модель LDA как вероятностную графическую модель. Затененные узлы являются наблюдаемыми переменными, незаштрихованные узлы являются скрытыми переменными, узлы без контуров являются параметрами модели. Стрелы подсвечивают зависимости между случайными переменными, а пластины указывают на повторные узлы.
Распределение Дирихле является непрерывным обобщением полиномиального распределения. Учитывая количество категорий , и параметр концентрации , где является вектором положительных реалов длины K, функция плотности вероятностей распределения Дирихле задается как
где B обозначает многомерную бета-функцию, заданную как
Частным случаем распределения Дирихле является симметричное распределение Дирихле. Симметричное распределение Дирихле характеризуется параметром концентрации , где все элементы те же самые.
bagOfWords
| fitlda
| logp
| lsaModel
| predict
| resume
| topkwords
| transform
| wordcloud
У вас есть измененная версия этого примера. Вы хотите открыть этот пример с вашими правками?
1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.
2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.
3. Сохраняйте структуру оригинального текста - например, не разбивайте одно предложение на два.
4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.
5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.