predict

Прогнозирование основных тем LDA документов

Описание

пример

topicIdx = predict(ldaMdl,documents) возвращает индексы темы LDA с наибольшими вероятностями для documents на основе модели LDA ldaMdl.

topicIdx = predict(ldaMdl,bag) возвращает индексы темы LDA с наибольшими вероятностями для документов, представленных моделью bag-of-words или bag-of-n-gams.

пример

topicIdx = predict(ldaMdl,counts) возвращает индексы темы LDA с наибольшими вероятностями для документов, представленных матрицей отсчётов слов.

пример

[topicIdx,score] = predict(___) также возвращает матрицу апостериорных вероятностей score.

пример

___ = 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))

Figure contains objects of type wordcloud. The chart of type wordcloud has title Topic 19. The chart of type wordcloud has title Topic 8.

Загрузите данные примера. 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")

Figure contains an axes. The axes with title LDA Topic Prediction Scores contains an object of type bar.

Входные параметры

свернуть все

Входная модель LDA, заданная как ldaModel объект.

Входные документы, заданные как tokenizedDocument массив, строковые массивы слов или массив ячеек из векторов символов. Если documents является tokenizedDocumentТогда это должно быть вектором-столбцом. Если documents - строковые массивы или массив ячеек векторов символов, тогда это должна быть строка слов одного документа.

Совет

Чтобы убедиться, что функция не отбрасывает полезную информацию, необходимо предварительно обработать входные документы с помощью тех же шагов, используемых для предварительной обработки документов, используемых для обучения модели.

Входная модель мешка слов или мешка n-граммов, заданная как bagOfWords объект или bagOfNgrams объект. Если bag является bagOfNgrams объект, затем функция обрабатывает каждый n-грамм как одно слово.

Счетчики частот слов, заданные как матрица неотрицательных целых чисел. Если вы задаете 'DocumentsIn' чтобы быть 'rows', затем значение counts(i,j) соответствует количеству раз, когда j-е слово словаря появляется во i-м документе. В противном случае значение counts(i,j) соответствует количеству раз, когда i-е слово словаря появляется во j-м документе.

Аргументы в виде пар имя-значение

Задайте необязательные разделенные разделенными запятой парами Name,Value аргументы. Name - имя аргумента и Value - соответствующее значение. Name должны находиться внутри кавычек. Можно задать несколько аргументов в виде пар имен и значений в любом порядке Name1,Value1,...,NameN,ValueN.

Пример: 'IterationLimit',200 задает предел итерации 200.

Ориентация документов в матрице count слов, заданная как разделенная разделенными запятой парами, состоящая из 'DocumentsIn' и одно из следующих:

  • 'rows' - Вход является матрицей счетчиков слов со строками, соответствующими документам.

  • 'columns' - Вход является транспонированной матрицей счетчиков слов со столбцами, соответствующими документам.

Эта опция применяется только в том случае, если документы входа заданы как матрица счетчиков слов.

Примечание

Если вы ориентируете матрицу count слов так, чтобы документы соответствовали столбцам и задавали 'DocumentsIn','columns', тогда вы можете испытать значительное сокращение времени оптимизации-выполнения.

Максимальное количество итераций, заданное как разделенная разделенными запятой парами, состоящая из 'IterationLimit' и положительное целое число.

Пример: 'IterationLimit',200

Относительная погрешность по логарифмической правдоподобности, заданный как разделенная разделенными запятой парами, состоящая из 'LogLikelihoodTolerance' и положительная скалярная величина. Оптимизация заканчивается, когда достигается этот допуск.

Пример: 'LogLikelihoodTolerance',0.001

Выходные аргументы

свернуть все

Предсказанные индексы темы, возвращенные как вектор числовых индексов.

Предсказанные вероятности темы, возвращенные как D-by- K матрица, где D количество входа документов и K количество тем в модели LDA. score(i,j) вероятность того, что тема j появляется в документе i. Каждая строка score суммы в единицу.

Введенный в R2017b