主要内容

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

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

Latent Dirichlet Allocation (LDA)模型是一种主题模型,它发现文档集合中的底层主题,并推断主题中的单词概率。

加载和提取文本数据

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

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

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

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

准备文本数据进行分析

创建一个函数,用于标记和预处理文本数据,以便用于分析。这个函数preprocessText,按顺序执行以下步骤:

  1. 使用标记文本tokenizedDocument.

  2. 使使用的词义化正常化森林.

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

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

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

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

使用预处理函数preprocessText准备文本数据。

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

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

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

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

袋= removeInfrequentWords(袋,2);袋= removeEmptyDocuments(袋)
bag = bagOfWords with properties: Counts: [480×162 double

拟合LDA模型

拟合7个主题的LDA模型。有关如何选择主题数量的示例,请参见选择LDA模型的主题数。若要抑制详细输出,请设置“详细”为0。

numTopics=7;mdl=fitlda(袋,numTopics,“详细”, 0);

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

使用词云可视化主题

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

图;对于topicIdx = 1:4 subplot(2,2,topicIdx) wordcloud(mdl,topicIdx);标题(“主题”+ topicIdx)终止

查看文档中主题的混合

使用变换将文档转换为主题概率向量。

newDocument=标记化文档(“冷却剂在分拣机下面汇集。”);newDocument topicMixture =变换(mdl);图酒吧(topicMixture)包含(“主题指数”) ylabel (“概率”)标题(“文档主题概率”)

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

图topicMixtures=转换(mdl,文档(1:5));barh(主题混合词(1:5,:),“堆叠”) xlim([0 1]) title(“主题混合”)包含(“话题概率”) ylabel (“文档”)传奇(“主题”+字符串(1:numTopics),“位置”,“东北外”)

预处理功能

这个函数preprocessText,依次执行以下步骤:

  1. 使用标记文本tokenizedDocument.

  2. 使使用的词义化正常化森林.

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

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

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

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

函数文件= preprocessText (textData)标记文本。文件= tokenizedDocument (textData);%把这些词用柠檬语法化。= addPartOfSpeechDetails文件(文档);文档= normalizeWords(文档,“风格”,“引理”);%擦掉标点符号。= erasePunctuation文件(文档);%删除停止词列表。文件=删除文字(文件);%删除2个或更少的单词,以及15个或更大的单词%字符。文件= removeShortWords(文件,2);= removeLongWords文档(文档、15);终止

另见

|||||||||

相关的话题