主要内容

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

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

潜在Dirichlet分配(LDA)模型是一种主题模型,它发现文档集合中的潜在主题并推断主题中的单词概率。

加载和提取文本数据

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

数据=可读(“factoryReports.csv”,文本类型=“字符串”);总目(数据)
ans=8×5表UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU“机械故障”“介质”“重新调整机器”“45”“机械故障”“中等”“重新调整机器”“35”“启动设备时电源中断”“电子故障”“高”“完全更换”16200“装配机中的油炸电容器”“电子故障”“高”“更换部件”“352”混合器使保险丝跳闸。”“电子故障”“低”“添加到观察列表”“55”“施工剂中的爆裂管正在喷射冷却剂”“泄漏”“高”“更换部件”“371”“混合器中的保险丝熔断”“电子故障”“低”“更换部件”“441”“皮带继续脱落”“机械故障”“低”“重新调整机器”38

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

textData=data.Description;textData(1:10)
ans=10×1串“项目偶尔会卡在扫描仪线轴上。”“装配机活塞发出巨大的卡嗒卡嗒声和砰砰声。”“启动设备时电源中断。”“装配机中的电容器烧坏了。”“混合器跳闸了保险丝。”“施工剂中的爆裂管正在喷射冷却剂。”“混合器中的保险丝熔断。”“东西继续从传送带上滚下来。”“从传送带上掉下来的东西。”“扫描仪卷轴分裂,很快就会开始弯曲。”

准备文本数据进行分析

创建一个函数,用于标记和预处理文本数据,以便用于分析预处理文本,列於预处理函数在示例的第节中,按顺序执行以下步骤:

  1. 使用标记化文档.

  2. 用英语把单词语法化正常化森林.

  3. 使用删除标点符号删除标点符号.

  4. 使用删除停止词列表(如“and”、“of”和“the”)移除单词.

  5. 使用删除包含2个或更少字符的单词除去短文.

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

准备文本数据,以便使用预处理文本作用

文档=预处理文本(textData);文档(1:5)
ans=5×1标记文档:6标记:项目偶尔卡住扫描仪滑阀7标记:巨大的卡嗒卡嗒声传来装配机活塞4标记:切断电源启动设备3标记:油炸电容器装配机3标记:混合器跳闸保险丝

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

bag=bagOfWords(文件)
bag=bagOfWords,属性:Counts:[480×338 double]词汇:[1×338字符串]NumWords:338 NumDocuments:480

从文字袋模型中删除总共出现不超过两次的文字。从文字袋模型中删除任何不包含文字的文档。

bag=删除常用词(bag,2);bag=删除空文档(bag)
bag=bagOfWords,属性:Counts:[480×158 double]词汇:[1×158字符串]NumWords:158 NumDocuments:480

拟合LDA模型

使LDA模型适合7个主题。有关如何选择主题数量的示例,请参阅选择LDA模型的主题数. 要抑制详细输出,请设置冗长的选项设置为0。对于再现性,使用rng“默认值”选项

rng(“默认值”)numTopics=7;mdl=fitlda(包,numTopics,详细=0);

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

使用词云可视化主题

您可以使用词云查看每个主题中概率最高的词。使用词云可视化主题。

图t=平铺布局(“流动”);标题(t,“LDA主题”)对于i=1:numTopics Nextile wordcloud(mdl,i);头衔(“主题”+(一)终止

查看文档中主题的混合

使用与培训数据相同的预处理功能,为一组以前未看到的文档创建标记化文档数组。

str=[“冷却液在装配机下方聚集。”“分拣机在启动时熔断保险丝。”“装配工发出了一些非常响亮的卡嗒卡嗒声。”];新文档=预处理文本(str);

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

topicMixtures=转换(mdl,新文档);

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

对于i=1:numTopics top=topkwords(mdl,3,i);topWords(i)=join(top.Word,", ");终止图形栏(TopicMixers(1,:))xlabel(“主题”)Xticklabel(主题词);ylabel(“概率”)头衔(“文档主题概率”)

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

图barh(顶面混合物,“堆叠”)xlim([0 1])标题(“主题混合”)xlabel(“话题概率”)伊拉贝尔(“文件”)图例(主题词,...位置=“南外”,...NumColumns=2)

预处理函数

功能预处理文本,按顺序执行以下步骤:

  1. 使用标记化文档.

  2. 用英语把单词语法化正常化森林.

  3. 使用删除标点符号删除标点符号.

  4. 使用删除停止词列表(如“and”、“of”和“the”)移除单词.

  5. 使用删除包含2个或更少字符的单词除去短文.

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

作用文档=预处理文本(文本数据)%标记文本。文档=标记化文档(textData);%把这些词用柠檬语法化。documents=addPartOfSpeechDetails(documents);documents=normalizeWords(documents,Style=“引理”);%删除标点符号。文件=标点符号(文件);%删除停止词列表。文件=删除文字(文件);%删除包含2个或更少字符的单词,以及包含15个或更多字符的单词%人物。documents=removeShortWords(documents,2);documents=removeLongWords(documents,15);终止

另见

|||||||||

相关话题