主要内容

比较LDA解决者

这个例子展示了如何比较潜在狄利克雷分配解决(LDA)通过比较拟合优度和时间适应模型。

导入文本数据

导入一组抽象和分类标签从数学论文使用arXiv API。指定数量的记录导入使用importSize变量。

importSize = 50000;

创建一个URL查询记录集“数学”和元数据的前缀“arXiv”

url =“https://export.arxiv.org/oai2?verb=ListRecords”+“集=数学”+“&metadataPrefix = arXiv”;

提取抽象查询返回的文本和恢复令牌使用的URLparseArXivRecords函数附加到这个例子作为支持文件。金宝app访问这个文件,打开这个例子作为一个活的脚本。注意,arXiv API之间的速率是有限的,需要等待多个请求。

[textData, ~, resumptionToken] = parseArXivRecords (url);

迭代进口更多的记录,直到达到所需的金额,或没有记录。继续从你离开的地方,进口记录使用恢复令牌从以前的结果查询中的URL。遵守速度限制强加的arXiv API,添加一个20秒的延迟在每个查询使用暂停函数。

元素个数(textData) < importSize如果resumptionToken = =”“打破结束url =“https://export.arxiv.org/oai2?verb=ListRecords”+" &resumptionToken = "+ resumptionToken;暂停(20)[textDataNew、labelsNew resumptionToken] = parseArXivRecords (url);textData = [textData;textDataNew];结束

预处理文本数据

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

numDocuments =元素个数(textData);本量利= cvpartition (numDocuments,“坚持”,0.1);textDataTrain = textData(培训(cvp));textDataValidation = textData(测试(cvp));

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

documentsTrain = preprocessText (textDataTrain);documentsValidation = preprocessText (textDataValidation);

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

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

验证数据,创建一个bag-of-words模型的验证文件。你不需要删除任何单词从validaiton数据因为任何单词,不会出现在安装LDA模型自动忽略。

validationData = bagOfWords (documentsValidation);

适合和比较模型

LDA的解决者,适合一个模型与40个话题。区分解决当策划结果在同一轴上,指定不同的属性为每个解算器。

numTopics = 40;解决= [“研究生院理事会”“真空断路”“cvb0”“savb”];lineSpecs = [“+ -”“* - - - - - -”“x -”“啊——”];

适合一个LDA模型用每个解算器。对于每个解算器,指定初始浓度1主题,每个数据来验证模型一次通过,和不符合主题集中参数。使用中的数据FitInfo属性的装备LDA模型,验证困惑和时间的阴谋。

随机解算器,默认情况下,使用mini-batch大小为1000每10迭代和验证模型。解算器,一旦每个数据通过验证模型,验证频率装天花板(numObservations / 1000),在那里numObservations在训练数据的文档的数量。对于其他解决方案,验证频率设置为1。

随机的迭代解算器不评估验证困惑,随机解算器报告FitInfo财产。绘制验证困惑、删除报道的nan值。

numObservations = bag.NumDocuments;图i = 1:元素个数(解决)解算器=解决(我);lineSpec = lineSpecs(我);如果解算器= =“savb”numIterationsPerDataPass =装天花板(numObservations / 1000);其他的numIterationsPerDataPass = 1;结束mdl = fitlda(袋、numTopics、“规划求解”解算器,“InitialTopicConcentration”,1“FitTopicConcentration”假的,“ValidationData”validationData,“ValidationFrequency”numIterationsPerDataPass,“详细”,0);历史= mdl.FitInfo.History;timeElapsed = history.TimeSinceStart;validationPerplexity = history.ValidationPerplexity;%去除nan。idx = isnan (validationPerplexity);timeElapsed (idx) = [];validationPerplexity (idx) = [];情节(timeElapsed validationPerplexity lineSpec)结束持有包含(“时间运行(s)”)ylabel (“验证困惑”)ylim([0正])传说(解决)

随机解算器,只有一个数据点。这是因为这个解算器通过输入数据一次。指定更多的数据,使用“DataPassLimit”选择。批处理解决(“研究生院理事会”,“真空断路”,“cvb0”),指定用于符合模型的迭代次数,使用“IterationLimit”选择。

较低的验证困惑提出了一个更好的选择。通常,解决“savb”“研究生院理事会”快速收敛的一个不错的选择。的解算器“cvb0”可能收敛到一个更好的选择,但它可能需要更长的时间收敛。

FitInfo财产,fitlda函数估计验证困惑从文档中概率的最大似然估计每个文档主题概率。这通常是更快的计算,但是可以比其他方法不准确。另外,计算验证使用的困惑logp函数。这个函数计算更精确值但可以运行的时间较长。为一个例子,演示如何使用计算困惑logp,请参阅从字数计算文档Log-Probabilities矩阵

预处理功能

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

  1. 在标记文本使用tokenizedDocument

  2. Lemmatize使用的话normalizeWords

  3. 删除标点符号使用erasePunctuation

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

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

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

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

另请参阅

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

相关的话题