为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
价值在过去的迭代。这个值是历史
结构体的FitInfo
LDA模型的属性。
更快的适应,指定“规划求解”
是“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
在订单执行以下步骤:
将文本数据转换为小写
较低的
。在标记文本使用
tokenizedDocument
。删除标点符号使用
erasePunctuation
。删除列表的停止词(如“和”,“的”,和“的”)
removeStopWords
。删除与2或更少的字符使用单词
removeShortWords
。删除与15个或更多字符使用单词
removeLongWords
。Lemmatize使用的话
normalizeWords
。
函数文件= preprocessText (textData)%将文本数据转换为小写。cleanTextData =低(textData);%在标记文本。文件= tokenizedDocument (cleanTextData);%擦掉标点符号。= erasePunctuation文件(文档);%去除停止词的列表。= removeStopWords文件(文档);% 2或更少的字符删除单词,单词和15或更高%字符。文件= removeShortWords(文件,2);= removeLongWords文档(文档、15);% Lemmatize的话。= addPartOfSpeechDetails文件(文档);文档= normalizeWords(文档,“风格”,“引理”);结束
另请参阅
tokenizedDocument
|bagOfWords
|removeStopWords
|logp
|bagOfWords
|fitlda
|ldaModel
|erasePunctuation
|removeShortWords
|removeLongWords
|normalizeWords
|addPartOfSpeechDetails
|removeInfrequentWords
|removeEmptyDocuments