В этом примере показано, как визуализировать вероятности темы документов с помощью модели темы скрытого выделения Дирихле (LDA).
Модель скрытого выделения Дирихле (LDA) является моделью темы, которая обнаруживает базовые темы в наборе документов и выводит вероятности слова в темах. Можно использовать модель LDA, чтобы преобразовать документы в вектор из вероятностей темы, также известных как смесь темы. Можно визуализировать темы LDA с помощью сложенных столбчатых диаграмм.
Загрузите модель LDA factoryReportsLDAModel который обучен с помощью набора данных отчетов фабрики, детализирующих различные события отказа. Для примера, показывающего, как подбирать модель LDA к набору текстовых данных, смотрите, Анализируют текстовые Данные Используя Модели Темы.
load factoryReportsLDAModel
mdlmdl =
ldaModel with properties:
NumTopics: 7
WordConcentration: 1
TopicConcentration: 0.5755
CorpusTopicProbabilities: [0.1587 0.1573 0.1551 0.1534 0.1340 ... ]
DocumentTopicProbabilities: [480x7 double]
TopicWordProbabilities: [158x7 double]
Vocabulary: ["item" "occasionally" "get" ... ]
TopicOrder: 'initial-fit-probability'
FitInfo: [1x1 struct]
Визуализируйте темы с помощью wordcloud функция.
numTopics = mdl.NumTopics; figure t = tiledlayout("flow"); title(t,"LDA Topics") for i = 1:numTopics nexttile wordcloud(mdl,i); title("Topic " + i) end

Создайте массив маркируемых документов для набора ранее невидимых документов с помощью той же функции предварительной обработки, используемой, подбирая модель.
Функциональный preprocessText, перечисленный в разделе Preprocessing Function примера, выполняет следующие шаги в порядке:
Маркируйте текст с помощью tokenizedDocument.
Lemmatize слова с помощью normalizeWords.
Сотрите пунктуацию с помощью erasePunctuation.
Удалите список слов остановки (такой как "и", и) использование removeStopWords.
Удалите слова с 2 или меньшим количеством символов с помощью removeShortWords.
Удалите слова с 15 или больше символами с помощью removeLongWords.
Подготовьте текстовые данные к анализу с помощью preprocessText функция.
str = [
"Coolant is pooling underneath assembler."
"Sorter blows fuses at start up."
"There are some very loud rattling sounds coming from the assembler."];
documents = preprocessText(str);Преобразуйте документы в векторы из вероятностей темы с помощью transform функция. Обратите внимание на то, что для очень коротких документов, смеси темы не могут быть сильным представлением содержимого документа.
topicMixtures = transform(mdl,documents);
Визуализируйте первую смесь темы в столбчатой диаграмме и пометьте панели с помощью лучших трех слов от каждой темы.
numTopics = mdl.NumTopics; for i = 1:numTopics top = topkwords(mdl,3,i); topWords(i) = join(top.Word,", "); end figure bar(categorical(topWords),topicMixtures(1,:)) xlabel("Topic") ylabel("Probability") title("Document Topic Probabilities")

Чтобы визуализировать пропорции тем в каждом документе или визуализировать несколько смесей темы, используют сложенную столбчатую диаграмму.
figure barh(topicMixtures,"stacked") title("Topic Mixtures") xlabel("Topic Probability") ylabel("Document") legend(topWords, ... Location="southoutside", ... NumColumns=2)

Области сложенной столбчатой диаграммы представляют пропорцию документа, принадлежащего соответствующей теме.
Функциональный preprocessText, выполняет следующие шаги в порядке:
Маркируйте текст с помощью tokenizedDocument.
Lemmatize слова с помощью normalizeWords.
Сотрите пунктуацию с помощью erasePunctuation.
Удалите список слов остановки (такой как "и", и) использование removeStopWords.
Удалите слова с 2 или меньшим количеством символов с помощью removeShortWords.
Удалите слова с 15 или больше символами с помощью removeLongWords.
function documents = preprocessText(textData) % Tokenize the text. documents = tokenizedDocument(textData); % Lemmatize the words. documents = addPartOfSpeechDetails(documents); documents = normalizeWords(documents,Style="lemma"); % Erase punctuation. documents = erasePunctuation(documents); % Remove a list of stop words. documents = removeStopWords(documents); % Remove words with 2 or fewer characters, and words with 15 or greater % characters. documents = removeShortWords(documents,2); documents = removeLongWords(documents,15); end
tokenizedDocument | fitlda | ldaModel | wordcloud