ldaModel

Модель Latent Dirichlet allocation (LDA)

Описание

Модель скрытого выделения Дирихле (LDA) является моделью темы, которая обнаруживает базовые темы в наборе документов и выводит вероятности слова в темах. Если модель была подходящим использованием мешка n модели граммов, то программное обеспечение обрабатывает N-граммы как отдельные слова.

Создание

Создайте модель LDA с помощью функции fitlda.

Свойства

развернуть все

Количество тем в модели LDA, заданной как положительное целое число.

Концентрация темы, заданная как положительная скалярная величина. Функция устанавливает концентрацию на тему к TopicConcentration/NumTopics. Для получения дополнительной информации смотрите Скрытое Выделение Дирихле.

Концентрация Word, заданная как неотрицательный скаляр. Программное обеспечение устанавливает концентрацию на слово к WordConcentration/numWords, где numWords является размером словаря входных документов. Для получения дополнительной информации смотрите Скрытое Выделение Дирихле.

Вероятности темы входного набора документа, заданного как вектор. Корпусные вероятности темы модели LDA являются вероятностями наблюдения, что каждая тема в целом наборе данных раньше соответствовала модели LDA. CorpusTopicProbabilities является 1 K вектором, где K является количеством тем. k th запись CorpusTopicProbabilities соответствует вероятности наблюдения темы k.

Вероятности темы на входной документ, заданный как матрица. Вероятности тематики документа модели LDA являются вероятностями наблюдения, что каждая тема в каждом документе раньше соответствовала модели LDA. DocumentTopicProbabilities является D-by-K матрица, где D является количеством документов, используемых, чтобы соответствовать модели LDA, и K является количеством тем. (d,k) th запись DocumentTopicProbabilities соответствует вероятности наблюдения темы k в документе d.

Если любой, темы имеют нулевую вероятность (CorpusTopicProbabilities содержит нули), то соответствующие столбцы DocumentTopicProbabilities и TopicWordProbabilities являются нулями.

Порядок строк в DocumentTopicProbabilities соответствует порядку документов в данных тренировки.

Вероятности Word на тему, заданную как матрица. Вероятности слова темы модели LDA являются вероятностями наблюдения каждого слова в каждой теме модели LDA. TopicWordProbabilities является V-by-K матрица, где V является количеством слов в Vocabulary, и K является количеством тем. (v,k) th запись TopicWordProbabilities соответствует вероятности наблюдения слова v в теме k.

Если любой, темы имеют нулевую вероятность (CorpusTopicProbabilities содержит нули), то соответствующие столбцы DocumentTopicProbabilities и TopicWordProbabilities являются нулями.

Порядок строк в TopicWordProbabilities соответствует порядку слов в Vocabulary.

Порядок темы, заданный как одно из следующего:

  • 'initial-fit-probability' – Сортировка тем корпусными вероятностями темы начальной образцовой подгонки. Эти вероятности являются свойством CorpusTopicProbabilities начального объекта ldaModel, возвращенного fitlda. Функция resume не переупорядочивает темы получившихся объектов ldaModel.

  • 'unordered' – Не заказывайте темы.

Информация зарегистрирована при подборе кривой модели LDA, заданной как struct со следующими полями:

  • TerminationCode – Состояние оптимизации на выход

    • 0 – Предел итерации достигнут.

    • 1 – Допуск на удовлетворенной логарифмической вероятности.

  • TerminationStatus – Объяснение возвращенного кода завершения

  • 'NumIterations' Количество итераций выполняется

  • NegativeLogLikelihood – Отрицательная логарифмическая вероятность для данных передала fitlda

  • Perplexity – Недоумение для данных передало fitlda

  • Solver – Имя решателя используется

  • History – Struct, содержащий историю оптимизации

  • StochasticInfo – Информация содержащего Struct для стохастических решателей

Типы данных: struct

Список слов в модели, заданной как вектор строки.

Типы данных: 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.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')

Загрузите данные в качестве примера. Файл 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.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))

Больше о

развернуть все

Введенный в R2017b