主要内容

logp

记录LDA模型的对数概率和拟合优度

描述

例子

logProb= logp (ldaMdl文档的对数概率文档在LDA模型下ldaMdl

例子

logProb= logp (ldaMdl计数返回由字数矩阵表示的文档的对数概率计数

logProb= logp (ldaMdl返回由单词袋或n-grams袋模型表示的文档的对数概率。

例子

logProbppl= logp(___返回由对数概率计算出的困惑度。

___= logp (___名称,值使用一个或多个名称-值对参数指定其他选项。

例子

全部折叠

若要重现本例中的结果,请设置rng“默认”

rng (“默认”

加载示例数据。该文件sonnetsPreprocessed.txt包含莎士比亚十四行诗的预处理版本。该文件每行包含一首十四行诗,用空格分隔单词。从中提取文本sonnetsPreprocessed.txt,以换行符将文本分割为文档,然后对文档进行标记。

文件名=“sonnetsPreprocessed.txt”;str = extractFileText(文件名);textData = split(str,换行符);documents = tokenizedDocument(textData);

使用创建单词袋模型bagOfWords

bag = bagOfWords(文档)
bag = bagOfWords with properties:计数:[15x3092 double]词汇:[1x3092 string] NumWords: 3092 NumDocuments: 154

拟合20个主题的LDA模型。若要抑制详细输出,请设置“详细”为0。

numTopics = 20;mdl = fitlda(包,numTopics,“详细”, 0);

计算训练文档的日志概率,并在直方图中显示它们。

logprobability = logp(mdl,documents);图直方图(logprobability)“日志概率”) ylabel (“频率”)标题(“文档Log-Probabilities”

图中包含一个轴。标题为Document log - probability的轴包含一个类型为直方图的对象。

找出log概率最低的三个文档。低对数概率可能表明该文档可能是一个异常值。

[~,idx] = sort(logprobability);idx (1:3)
ans =3×1146 19 65
文档(idx (1:3))
ans = 3 x1 tokenizedDocument: 76令牌:可怜的灵魂中心有罪的地球地球叛军力量数组为何你松遭受缺乏绘画外墙壁昂贵的同性恋为什么大量成本短期租赁你你衰落的豪宅花费蠕虫继承者过量吃了你的费用你发现最后的灵魂住在仆人的损失让松加重你商店购买条款你神圣的销售小时渣滓美联储丰富应当饲料死亡提要男人一旦死亡有死亡76令牌:吞噬时间,钝钝的狮子爪,大地吞噬自己甜美的后代,剔出锋利的牙齿,凶猛的老虎,下颚,燃烧长寿的凤凰,鲜血,制造快乐的季节,你的舰队,随你的便快,时间广阔的世界,消逝的甜蜜,禁止你犯下滔天罪行,雕刻你的时光,爱美丽的额头,不画线条,你的古色古香的笔,你的轨迹,不受玷污,让美丽的图案继位,你最糟糕的时光,尽管你错误的爱,将永远活在年轻73个标志:黄铜,石头,大地,无垠的海洋悲伤的死亡,力量,愤怒,美丽,保持着恳求,谁的行动更强大的花朵,夏天,蜂蜜,呼吸,抵御残酷的包围,严酷的日子,岩石,坚不可摧的坚固,大门,钢铁,坚强的时间,腐朽,可怕的冥想,悲哀,时代最好的珠宝,胸前藏着,强壮的手,紧握,快速的后退,破坏美丽,除非奇迹,黑色墨水,爱仍然闪耀

加载示例数据。sonnetsCounts.mat包含一个字数矩阵和相应的莎士比亚十四行诗的预处理版本的词汇量。

负载sonnetsCounts.mat大小(数量)
ans =1×2154 3092

拟合20个主题的LDA模型。

numTopics = 20;mdl = fitlda(计数,numTopics)
初始主题分配在0.130616秒内采样。===================================================================================== | 迭代每个相对| | |时间培训|主题| | | | | |迭代变化困惑浓度浓度| | | | | |(秒)日志(L) | | |迭代  | ===================================================================================== | 0 | 0.03 | 5.000 | 1.159 e + 03 | | 0 | | 1 | 0.03 | 5.4884 e-02 e + 02 | 8.028 | 5.000 | 0 | | 2 | 0.03 | 4.7400 e 03 e + 02 | 7.778 | 5.000 | 0 | | 3 | 0.057.602 e + 02 | 5.000 | 3.4597 e 03 | | 0 | | 4 | 0.04 | 3.4662 e 03 e + 02 | 7.430 | 5.000 | 0 | | 5 | 0.06 | 2.9259 e 03 e + 02 | 7.288 | 5.000 | 0 | | 6 | 0.05 | 6.4180 e-05 e + 02 | 7.291 | 5.000 | 0  | =====================================================================================
mdl = ldaModel with properties: NumTopics: 20 WordConcentration: 1 TopicConcentration: 5 corpustopicprobability: [1x20 double] documenttopicprobability: [154x20 double] topicwordprobability: [3092x20 double]词汇:[1x3092 string] TopicOrder: 'initial-fit-probability' FitInfo: [1x1 struct]

计算训练文档的日志概率。指定为每个文件绘制500个样本。

numSamples = 500;logprobability = logp(mdl,counts,...“NumSamples”, numSamples);

在直方图中显示文档对数概率。

图直方图(logprobability)“日志概率”) ylabel (“频率”)标题(“文档Log-Probabilities”

图中包含一个轴。标题为Document log - probability的轴包含一个类型为直方图的对象。

找出三个文档中log概率最低的索引。

[~,idx] = sort(logprobability);idx (1:3)
ans =3×1146 19 65

通过计算一个测试文档集的复杂度,比较两个LDA模型的拟合优度。

若要重现结果,请设置rng“默认”

rng (“默认”

加载示例数据。该文件sonnetsPreprocessed.txt包含莎士比亚十四行诗的预处理版本。该文件每行包含一首十四行诗,用空格分隔单词。从中提取文本sonnetsPreprocessed.txt,以换行符将文本分割为文档,然后对文档进行标记。

文件名=“sonnetsPreprocessed.txt”;str = extractFileText(文件名);textData = split(str,换行符);documents = tokenizedDocument(textData);

随机抽取10%的文档进行测试。

numDocuments = numel(文档);cvp = cvpartition(numDocuments,“坚持”, 0.1);documentsTrain = documents(cvp.training);documentsTest =文档(cvp.test);

根据培训文档创建单词袋模型。

bag = bagOfWords(documentsTrain)
bag = bagOfWords with properties:计数:[139x2909 double]词汇:[1x2909 string] NumWords: 2909 NumDocuments: 139

将包含20个主题的LDA模型拟合到单词袋模型中。若要抑制详细输出,请设置“详细”为0。

numTopics = 20;mdl1 = fitlda(包,numTopics,“详细”, 0);

查看关于模型拟合的信息。

mdl1。FitInfo
ans =带字段的结构:TerminationCode: 1 TerminationStatus:“满足对数可能性的相对容差。”NumIterations: 26 NegativeLogLikelihood: 5.6915e+04 Perplexity: 742.7118求解器:“cgs”历史:[1x1 struct]

计算保留测试集的复杂度。

[~,ppl1] = logp(mdl1,documentsTest)
Ppl1 = 781.6078

将一个包含40个主题的LDA模型拟合到单词袋模型中。

numTopics = 40;mdl2 = fitlda(包,numTopics,“详细”, 0);

查看关于模型拟合的信息。

mdl2。FitInfo
ans =带字段的结构:TerminationCode: 1 TerminationStatus:“满足对数可能性的相对容差。”NumIterations: 37 NegativeLogLikelihood: 5.4466e+04 Perplexity: 558.8685求解器:“cgs”历史:[1x1 struct]

计算保留测试集的复杂度。

[~,ppl2] = logp(mdl2,documentsTest)
Ppl2 = 808.6602

较低的困惑度表明,该模型可能更适合持有的测试数据。

输入参数

全部折叠

输入LDA模型,指定为ldaModel对象。

输入文档,指定为tokenizedDocument数组、单词的字符串数组或字符向量的单元格数组。如果文档不是tokenizedDocument数组,则它必须是表示单个文档的行向量,其中每个元素都是一个单词。若要指定多个文档,请使用tokenizedDocument数组中。

输入单词袋或n-grams袋模型,指定为bagOfWords对象或bagOfNgrams对象。如果是一个bagOfNgrams对象,则该函数将每个n-gram视为单个单词。

单词的频率计数,指定为一个非负整数矩阵。如果你指定“DocumentsIn”“行”,则值计数(i, j)对应于的次数j词汇表中的单词出现在文档。否则,值计数(i, j)对应于的次数词汇表中的单词出现在j文档。

名称-值对参数

的可选逗号分隔对名称,值参数。的名字参数名称和价值对应的值。的名字必须出现在引号内。您可以以任意顺序指定多个名称和值对参数Name1, Value1,…,的家

例子:“NumSamples”,500年指定为每个文档绘制500个示例

文档在字数矩阵中的方向,指定为逗号分隔的对,由“DocumentsIn”和以下其中之一:

  • “行”-输入是一个字数矩阵,每行对应文档。

  • “列”-输入是字数转置矩阵,列对应文档。

此选项仅适用于将输入文档指定为字数矩阵的情况。

请注意

如果您定位您的字数矩阵,使文档对应于列和指定“DocumentsIn”、“列”,那么优化执行时间可能会显著减少。

为每个文档绘制的样本数目,指定为逗号分隔的对,由“NumSamples”一个正整数。

例子:“NumSamples”,500年

输出参数

全部折叠

LDA模型下文档的对数概率,作为数字向量返回。

文档的复杂度由对数概率计算,返回为正标量。

算法

logp使用迭代pseudo-count方法载于

参考文献

沃拉赫、汉娜·M.、伊恩·穆雷、鲁斯兰·萨拉赫蒂诺夫和大卫·米诺。主题模型的评价方法。在第26届国际机器学习年会论文集,第1105-1112页。ACM, 2009年。哈佛大学

在R2017b中引入