主要内容

为LDA模型选择的主题

这个例子展示了如何决定一个合适的主题为潜在狄利克雷分配(LDA)模型。

决定一个合适的主题,您可以比较LDA模型的拟合优度符合不同数字的话题。你可以评估一个LDA模型的拟合优度计算伸出的一组文件的困惑。困惑表明模型描述的一组文件。较低的困惑提出了一个更好的选择。

提取和文本数据进行预处理

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

文件名=“factoryReports.csv”;data = readtable(文件名,“TextType”,“字符串”);textData = data.Description;

使用函数标记和文本数据进行预处理preprocessText年底上市这个例子。

文件= preprocessText (textData);文档(1:5)
ans = 5×1 tokenizedDocument: 6令牌:项目偶尔卡住扫描仪线轴7令牌:大声喋喋不休的爆炸声音来汇编活塞4令牌:减少力量开始工厂3令牌:炒电容器汇编3令牌:搅拌机旅行保险丝

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

numDocuments =元素个数(文件);本量利= cvpartition (numDocuments,“坚持”,0.1);documentsTrain =文档(cvp.training);documentsValidation =文档(cvp.test);

从培训文档创建一个bag-of-words模型。删除的话,不会出现超过两倍。删除任何包含没有单词的文档。

袋= bagOfWords (documentsTrain);袋= removeInfrequentWords(袋,2);袋= removeEmptyDocuments(袋);

选择的主题

选择的目标是最小化困惑的话题比其他数字的话题。这并不是唯一的考虑:模型符合大量的主题可能需要更长的时间来收敛。权衡的影响,计算拟合优度和合适的时间。如果主题的最优数量很高,那么你可能想要选择一个较低的价值,加快装配过程。

适合一些LDA模型范围的值的数量的话题。比较每个模型的拟合时间和困惑在伸出的一组测试文档。困惑是第二个输出logp函数。获得第二个输出没有分配第一个输出,使用~的象征。合适的时间TimeSinceStart价值在过去的迭代。这个值是历史结构体的FitInfoLDA模型的属性。

更快的适应,指定“规划求解”“savb”。抑制详细输出,集“详细”0。这可能需要几分钟。

numTopicsRange = (5 10 15 20 40);i = 1:元素个数(numTopicsRange) numTopics = numTopicsRange(我);mdl = fitlda(袋、numTopics、“规划求解”,“savb”,“详细”,0);(~ validationPerplexity (i)] = logp (mdl documentsValidation);timeElapsed (i) = mdl.FitInfo.History.TimeSinceStart(结束);结束

展示主题的困惑和运行时间为每个号码在一个阴谋。图左边的困惑轴和右边的时间轴。

图yyaxis情节(numTopicsRange validationPerplexity,“+ -”)ylabel (“验证困惑”)yyaxis正确的情节(numTopicsRange timeElapsed,“啊——”)ylabel (“时间运行(s)”)传说([“验证困惑”“时间运行(s)”),“位置”,“东南”)包含(“主题”)

情节表明拟合模型与10 - 20主题可能是一个不错的选择。困惑低比模型与不同数量的话题。解算器,花费的时间这么多话题也是合理的。与不同的解决者,你可能会发现,增加主题的数量会导致一个更好的适合,但拟合模型需要更长的时间来收敛。

例子预处理功能

这个函数preprocessText在订单执行以下步骤:

  1. 将文本数据转换为小写较低的

  2. 在标记文本使用tokenizedDocument

  3. 删除标点符号使用erasePunctuation

  4. 删除列表的停止词(如“和”,“的”,和“的”)removeStopWords

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

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

  7. Lemmatize使用的话normalizeWords

函数文件= preprocessText (textData)%将文本数据转换为小写。cleanTextData =低(textData);%在标记文本。文件= tokenizedDocument (cleanTextData);%擦掉标点符号。= erasePunctuation文件(文档);%去除停止词的列表。= removeStopWords文件(文档);% 2或更少的字符删除单词,单词和15或更高%字符。文件= removeShortWords(文件,2);= removeLongWords文档(文档、15);% Lemmatize的话。= addPartOfSpeechDetails文件(文档);文档= normalizeWords(文档,“风格”,“引理”);结束

另请参阅

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

相关的话题