Прогнозирование основных тем LDA документов
___ = predict(___,
задает дополнительные опции, используя один или несколько аргументы пары "имя-значение".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 с 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))
Загрузите данные примера. sonnetsCounts.mat
содержит матрицу отсчётов слов и соответствующий словарь предварительно обработанных версий сонетов Шекспира.
load sonnetsCounts.mat
size(counts)
ans = 1×2
154 3092
Подгонка модели LDA с 20 темами. Чтобы воспроизвести результаты в этом примере, установите rng
на 'default'
.
rng('default')
numTopics = 20;
mdl = fitlda(counts,numTopics)
Initial topic assignments sampled in 0.051343 seconds. ===================================================================================== | Iteration | Time per | Relative | Training | Topic | Topic | | | iteration | change in | perplexity | concentration | concentration | | | (seconds) | log(L) | | | iterations | ===================================================================================== | 0 | 0.09 | | 1.159e+03 | 5.000 | 0 | | 1 | 0.14 | 5.4884e-02 | 8.028e+02 | 5.000 | 0 | | 2 | 0.22 | 4.7400e-03 | 7.778e+02 | 5.000 | 0 | | 3 | 0.13 | 3.4597e-03 | 7.602e+02 | 5.000 | 0 | | 4 | 0.14 | 3.4662e-03 | 7.430e+02 | 5.000 | 0 | | 5 | 0.14 | 2.9259e-03 | 7.288e+02 | 5.000 | 0 | | 6 | 0.12 | 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]
Спрогнозируйте верхние темы для первых 5 документов в counts
.
topicIdx = predict(mdl,counts(1:5,:))
topicIdx = 5×1
3
15
19
3
14
Чтобы воспроизвести результаты в этом примере, установите 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 темами. Чтобы подавить подробный выход, установите 'Verbose'
в 0.
numTopics = 20;
mdl = fitlda(bag,numTopics,'Verbose',0);
Спрогнозируйте верхние темы для нового документа. Задайте предел итерации 200.
newDocument = tokenizedDocument("what's in a name? a rose by any other name would smell as sweet."); iterationLimit = 200; [topicIdx,scores] = predict(mdl,newDocument, ... 'IterationLimit',iterationLimit)
topicIdx = 19
scores = 1×20
0.0250 0.0250 0.0250 0.0250 0.1250 0.0250 0.0250 0.0250 0.0250 0.0730 0.0250 0.0250 0.0770 0.0250 0.0250 0.0250 0.0250 0.0250 0.2250 0.1250
Просмотрите счета предсказания на столбчатой диаграмме.
figure bar(scores) title("LDA Topic Prediction Scores") xlabel("Topic Index") ylabel("Score")
ldaMdl
- Входная модель LDAldaModel
объектВходная модель LDA, заданная как ldaModel
объект.
documents
- Входные документыtokenizedDocument
массив | строковые массивы слов | массив ячеек из векторов символовВходные документы, заданные как tokenizedDocument
массив, строковые массивы слов или массив ячеек из векторов символов. Если documents
является tokenizedDocument
Тогда это должно быть вектором-столбцом. Если documents
- строковые массивы или массив ячеек векторов символов, тогда это должна быть строка слов одного документа.
Совет
Чтобы убедиться, что функция не отбрасывает полезную информацию, необходимо предварительно обработать входные документы с помощью тех же шагов, используемых для предварительной обработки документов, используемых для обучения модели.
bag
- Входная модельbagOfWords
| объекта bagOfNgrams
объектВходная модель мешка слов или мешка n-граммов, заданная как bagOfWords
объект или bagOfNgrams
объект. Если bag
является bagOfNgrams
объект, затем функция обрабатывает каждый n-грамм как одно слово.
counts
- Частотные счетчики словСчетчики частот слов, заданные как матрица неотрицательных целых чисел. Если вы задаете 'DocumentsIn'
чтобы быть 'rows'
, затем значение counts(i,j)
соответствует количеству раз, когда j-е слово словаря появляется во i-м документе. В противном случае значение counts(i,j)
соответствует количеству раз, когда i-е слово словаря появляется во j-м документе.
Задайте необязательные разделенные разделенными запятой парами Name,Value
аргументы. Name
- имя аргумента и Value
- соответствующее значение. Name
должны находиться внутри кавычек. Можно задать несколько аргументов в виде пар имен и значений в любом порядке Name1,Value1,...,NameN,ValueN
.
'IterationLimit',200
задает предел итерации 200.'DocumentsIn'
- Ориентация документов'rows'
(по умолчанию) | 'columns'
Ориентация документов в матрице count слов, заданная как разделенная разделенными запятой парами, состоящая из 'DocumentsIn'
и одно из следующих:
'rows'
- Вход является матрицей счетчиков слов со строками, соответствующими документам.
'columns'
- Вход является транспонированной матрицей счетчиков слов со столбцами, соответствующими документам.
Эта опция применяется только в том случае, если документы входа заданы как матрица счетчиков слов.
Примечание
Если вы ориентируете матрицу count слов так, чтобы документы соответствовали столбцам и задавали 'DocumentsIn','columns'
, тогда вы можете испытать значительное сокращение времени оптимизации-выполнения.
'IterationLimit'
- Максимальное количество итераций100
(по умолчанию) | положительное целое числоМаксимальное количество итераций, заданное как разделенная разделенными запятой парами, состоящая из 'IterationLimit'
и положительное целое число.
Пример: 'IterationLimit',200
'LogLikelihoodTolerance'
- Относительная погрешность по логарифмической правдоподобности0.0001
(по умолчанию) | положительная скалярная величинаОтносительная погрешность по логарифмической правдоподобности, заданный как разделенная разделенными запятой парами, состоящая из 'LogLikelihoodTolerance'
и положительная скалярная величина. Оптимизация заканчивается, когда достигается этот допуск.
Пример: 'LogLikelihoodTolerance',0.001
topicIdx
- Прогнозируемые индексы темПредсказанные индексы темы, возвращенные как вектор числовых индексов.
score
- Предсказанные вероятности темыПредсказанные вероятности темы, возвращенные как D
-by- K
матрица, где D
количество входа документов и K
количество тем в модели LDA. score(i,j)
вероятность того, что тема j
появляется в документе i
. Каждая строка score
суммы в единицу.
У вас есть измененная версия этого примера. Вы хотите открыть этот пример с вашими правками?
1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.
2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.
3. Сохраняйте структуру оригинального текста - например, не разбивайте одно предложение на два.
4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.
5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.