exponenta event banner

предсказать

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

Описание

пример

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

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

пример

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.

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

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

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

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

Примечание

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

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

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

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

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

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

свернуть все

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

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

Представлен в R2017b