В этом примере показано, как анализировать корреляции между темами в модели темы Скрытого выделения Дирихле (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]
Визуализируйте темы с помощью облаков слова.
numTopics = mdl.NumTopics; figure t = tiledlayout("flow"); title(t,"LDA Topics") for i = 1:numTopics nexttile wordcloud(mdl,i); title("Topic " + i) end
Вычислите корреляции между темами с помощью corrcoef
функция с вероятностями слова темы модели LDA, как введено.
correlation = corrcoef(mdl.TopicWordProbabilities);
Просмотрите корреляции в тепле, сопоставляют и помечают каждую тему ее лучшими тремя словами. Чтобы препятствовать тому, чтобы карта тепла подсветила тривиальные корреляции между темами каждый и оно, вычтите единичную матрицу из корреляций.
Для каждой темы найдите лучшие три слова.
numTopics = mdl.NumTopics; for i = 1:numTopics top = topkwords(mdl,3,i); topWords(i) = join(top.Word,", "); end
Постройте корреляции с помощью heatmap
функция.
figure heatmap(correlation - eye(numTopics), ... XDisplayLabels=topWords, ... YDisplayLabels=topWords) title("LDA Topic Correlations") xlabel("Topic") ylabel("Topic")
Для каждой темы найдите тему с самой сильной корреляцией и отобразите пары в таблице с соответствующим коэффициентом корреляции.
[topCorrelations,topCorrelatedTopics] = max(correlation - eye(numTopics)); tbl = table; tbl.TopicIndex = (1:numTopics)'; tbl.Topic = topWords'; tbl.TopCorrelatedTopicIndex = topCorrelatedTopics'; tbl.TopCorrelatedTopic = topWords(topCorrelatedTopics)'; tbl.CorrelationCoefficient = topCorrelations'
tbl=7×5 table
TopicIndex Topic TopCorrelatedTopicIndex TopCorrelatedTopic CorrelationCoefficient
__________ ______________________________ _______________________ ______________________________ ______________________
1 "mixer, sound, assembler" 5 "mixer, fuse, coolant" 0.34304
2 "scanner, agent, stuck" 4 "scanner, appear, spool" 0.34526
3 "sound, agent, hear" 1 "mixer, sound, assembler" 0.26909
4 "scanner, appear, spool" 2 "scanner, agent, stuck" 0.34526
5 "mixer, fuse, coolant" 1 "mixer, sound, assembler" 0.34304
6 "arm, robot, smoke" 1 "mixer, sound, assembler" 0.0042125
7 "software, sorter, controller" 7 "software, sorter, controller" 0
tokenizedDocument
| fitlda
| ldaModel
| wordcloud