主要内容

选择LDA模型的主题数

这个例子展示了如何为潜在的Dirichlet分配(LDA)模型确定适当数量的主题。

要确定适当数量的主题,您可以将LDA模型的拟合优度与不同数量的主题进行比较。您可以通过计算一组文档的复杂度来评估LDA模型的拟合优度。复杂度表示模型对一组文档的描述程度。较低的复杂度表示非常适合。

提取和预处理文本数据

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

文件名=“factoryReports.csv”; 数据=可读性(文件名,“文本类型”,“字符串”);textData = data.Description;

使用函数标记和预处理文本数据preprocessText在本例的最后列出。

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

随机留出10%的文件进行验证。

numDocuments =元素个数(文件);本量利= cvpartition (numDocuments,“坚持”,0.1); 文件应变=文件(cvp.培训);文件验证=文件(cvp.测试);

从培训文档中创建词汇袋模型。删除总出现次数不超过两次的单词。删除任何不含文字的文档。

bag=bagOfWords(documentsTrain);bag=删除常用词(bag,2);bag=删除空文档(bag);

选择主题的数量

我们的目标是选择一系列主题,与其他数量的主题相比,这些主题可以最大程度地减少困惑。这不是唯一的考虑因素:适合更多主题的模型可能需要更长的时间才能收敛。要查看折衷的效果,请计算拟合优度和拟合时间。如果最佳主题数量较高,则y您可能希望选择一个较低的值以加快拟合过程。

为主题数量的一系列值拟合一些LDA模型。比较测试文件中各模型的拟合时间和复杂度。困惑是这个问题的第二个输出logp函数。要获得第二个输出而不将第一个输出赋值给任何东西,请使用~象征拟合时间是最短的时间连续启动上次迭代的值。此值位于历史结构FitInfoLDA模型的属性。

为了更快的适应,指定“规划求解”成为“savb”。若要抑制详细输出,请设置“冗长”0.这可能需要几分钟来运行。

numTopicsRange = [5 10 15 20 40];对于i = 1: numTopics (numTopicsRange) numTopics = numTopicsRange(i);mdl = fitlda(袋、numTopics、...“规划求解”,“savb”,...“冗长”,0);[~,validationComplexity(i)]=logp(mdl,documentsValidation);timePassed(i)=mdl.FitInfo.History.TimesRunStart(end);终止

显示绘图中每个主题数量的困惑和经过的时间。在左轴上绘制困惑,在右轴上绘制经过的时间。

图yyaxis左边绘图(numTopicsRange、ValidationComplexity、,“+ -”) ylabel (“验证困惑”) yyaxis正当绘图(numTopicsRange、TIMEASED、,“o-”) ylabel (“时间运行(s)”)传说([“验证困惑”“时间运行(s)”],“位置”,“东南”)包含(“主题”)

该图表明,拟合一个包含10-20个主题的模型可能是一个不错的选择。与具有不同主题数的模型相比,复杂度较低。使用该解算器,这么多主题的运行时间也是合理的。使用不同的解算器,您可能会发现增加主题数可以获得更好的拟合,但拟合效果不理想模型需要更长的时间才能收敛。

例子预处理功能

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

  1. 使用将文本数据转换为小写降低

  2. 使用tokenizedDocument

  3. 删除标点符号使用erasePunctuation

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

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

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

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

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

另见

|||||||||||||

相关的话题