主要内容

使用主题模型分析文本数据

这个例子展示了如何使用Latent Dirichlet Allocation (LDA)主题模型来分析文本数据。

LDA (Latent Dirichlet Allocation)模型是一种主题模型,它可以发现一组文档中的潜在主题,并推断出主题中的单词概率。

加载和提取文本数据

加载示例数据。该文件factoryReports.csv包含工厂报告,包括每个事件的文本描述和分类标签。

数据= readtable (“factoryReports.csv”TextType =“字符串”);头(数据)
ans =8×5表类别描述紧急解决成本  _____________________________________________________________________ ____________________ ________ ____________________ _____ " 项目是偶尔陷入扫描仪卷。”“机械故障”“中等”“调整机”45“装配活塞发出巨大的咔嗒声和撞击声。”“机械故障”“介质”“重新调整机器”35“启动时电源切断。”“电子故障”“高”“全更换”16200“组装中油炸电容器。”"电子故障" "高" "更换部件" 352 "混频器使保险丝跳闸。"“电子故障”“低”“加入观察名单”“55”管道爆裂在施工剂喷洒冷却剂。"泄漏" "高" "更换元件" 371 "混频器保险丝烧断。"“电子故障”“低”“更换部件”441“东西继续从皮带上掉下来。”“机械故障”“低”“重新调整机器

从字段中提取文本数据描述

textData = data.Description;textData (1:10)
ans =10×1的字符串“物品偶尔会卡在扫描器的卷轴里。”“装配活塞发出巨大的格格声和撞击声。”“当启动电站时,电力会被切断。”“组装车间的油炸电容器。”“搅拌机把保险丝弄断了。”“爆裂管中施工剂正在喷洒冷却剂。”"搅拌器保险丝烧断了"“事情继续从传送带上掉下来。”“从传送带上掉下来的东西。”扫描仪的卷筒是分开的,很快就会开始弯曲。

准备分析的文本数据

创建一个对文本数据进行标记和预处理的函数,以便将其用于分析。这个函数preprocessText,列于预处理功能示例部分,按顺序执行以下步骤:

  1. 使用tokenizedDocument

  2. 让单词使用normalizeWords

  3. 删除标点符号使用erasePunctuation

  4. 删除使用的停止词列表(如“and”,“of”和“the”)removeStopWords

  5. 删除两个字符或少于两个字符的单词removeShortWords

  6. 删除使用15个或更多字符的单词removeLongWords

方法准备用于分析的文本数据preprocessText函数。

文件= preprocessText (textData);文档(1:5)
ans = 5×1 tokenizedDocument: 6令牌:项目偶尔被卡扫描仪线轴7令牌:响亮的咔嗒咔嗒声来装配活塞4令牌:切断电源启动工厂3令牌:炸电容装配者3令牌:混合器跳闸保险丝

从标记化的文档创建一个单词袋模型。

袋= bagOfWords(文档)
bag = bagOfWords with properties: Counts: [480×338 double]词汇:[1×338 string] NumWords: 338 NumDocuments: 480

将总共出现次数不超过两次的单词从单词包模型中删除。从words包模型中删除任何不包含单词的文档。

袋= removeInfrequentWords(袋,2);袋= removeEmptyDocuments(袋)
bag = bagOfWords with properties: Counts: [480×158 double]词汇:[1×158 string] NumWords: 158 NumDocuments: 480

符合LDA模型

用7个主题适合LDA模型。有关显示如何选择主题数量的示例,请参见选择LDA模型的主题数.要抑制详细输出,请设置详细的选项为0。为了重现性,使用rng函数与“默认”选择。

rng (“默认”) numTopics = 7;mdl = fitlda(袋、numTopics、Verbose = 0);

如果你有一个大的数据集,那么随机近似变分贝叶斯求解器通常更适合,因为它可以在更少的数据传递中适合一个好的模型。的默认求解器fitlda(折叠吉布斯抽样)可以更精确,但需要更长的运行时间。为使用随机近似变分贝叶斯,设置解算器选项“savb”.有关展示如何比较LDA求解器的示例,请参见比较LDA解决者

使用词语云将话题可视化

您可以使用单词云查看每个主题中概率最高的单词。使用词语云将主题形象化。

图t = tiledlayout(“流”);标题(t)“LDA的话题”i = 1:numTopics nexttile wordcloud(mdl,i);标题(“主题”+ i)结束

查看文档中主题的混合

使用与训练数据相同的预处理函数,为一组以前未见过的文档创建一个标记化文档数组。

str = [“冷却剂在装配厂下面汇集。”"Sorter在启动时炸掉保险丝。"“装配工发出了非常响亮的咔嗒咔嗒声。”];newDocuments = preprocessText (str);

使用变换函数将文档转换为主题概率向量。注意,对于非常短的文档,主题混合物可能不是文档内容的强表示。

newDocuments topicMixtures =变换(mdl);

在条形图中绘制第一个文档的文档主题概率。要对主题进行标注,请使用对应主题的前三个单词。

i = 1:numTopics top = topkwords(mdl,3,i);topWords (i) =加入(顶部。词,”、“);结束图酒吧(topicMixtures(1:))包含(“主题”) xticklabels (topWords);ylabel (“概率”)标题(“文档主题概率”

使用堆叠条形图可视化多个主题的混合。可视化文档的主题混合物。

图barh (topicMixtures,“堆叠”) xlim([0 1])“主题混合”)包含(“主题概率”) ylabel (“文档”)传说(topWords...位置=“southoutside”...NumColumns = 2)

预处理功能

这个函数preprocessText,按顺序执行下列步骤:

  1. 使用tokenizedDocument

  2. 让单词使用normalizeWords

  3. 删除标点符号使用erasePunctuation

  4. 删除使用的停止词列表(如“and”,“of”和“the”)removeStopWords

  5. 删除两个字符或少于两个字符的单词removeShortWords

  6. 删除使用15个或更多字符的单词removeLongWords

函数文件= preprocessText (textData)标记文本。文件= tokenizedDocument (textData);使单词形象化。= addPartOfSpeechDetails文件(文档);文件= = normalizeWords(文档、风格“引理”);%擦掉标点符号。= erasePunctuation文件(文档);删除一个停止单词列表。= removeStopWords文件(文档);删除少于2个字符的单词,以及大于等于15个字符的单词%字符。文件= removeShortWords(文件,2);= removeLongWords文档(文档、15);结束

另请参阅

|||||||||

相关的话题