В этом примере показано, как визуализировать вероятности темы документов с помощью модели темы скрытого выделения Дирихле (LDA).
Модель скрытого выделения Дирихле (LDA) является моделью темы, которая обнаруживает базовые темы в наборе документов и выводит вероятности слова в темах. Можно использовать модель LDA, чтобы преобразовать документы в вектор из вероятностей темы, также известных как смесь темы. Можно визуализировать темы LDA с помощью сложенных столбчатых диаграмм.
Загрузите модель LDA factoryReportsLDAModel
который обучен с помощью набора данных отчетов фабрики, детализирующих различные события отказа. Для примера, показывающего, как подбирать модель LDA к набору текстовых данных, смотрите, Анализируют текстовые Данные Используя Модели Темы.
load factoryReportsLDAModel
mdl
mdl = 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