主要内容

fitlda

拟合潜狄利克雷分配(LDA)模型

描述

潜狄利克雷分配模型(latent Dirichlet allocation, LDA)是一种主题模型,它发现文档集合中的潜在主题,并推断主题中的单词概率。如果模型使用n-grams袋模型拟合,那么软件将n-grams视为单独的单词。

例子

mdl= fitlda (numTopics拟合LDA模型numTopics将主题转换为单词袋或n-grams袋模型

例子

mdl= fitlda (计数numTopics将LDA模型拟合到由频率计数矩阵表示的文档中。

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

例子

全部折叠

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

rng (“默认”

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

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

使用创建单词袋模型bagOfWords

bag = bagOfWords(文档)
带有属性的单词:[154x3092 double]词汇:["最公平的" "生物" "欲望"…NumWords: 3092 NumDocuments: 154

拟合四个主题的LDA模型。

numTopics = 4;mdl = fitlda(包,numTopics)
初始主题分配在0.213222秒内采样。===================================================================================== | 迭代每个相对| | |时间培训|主题| | | | | |迭代变化困惑浓度浓度| | | | | |(秒)日志(L) | | |迭代  | ===================================================================================== | 0 | 0.49 | 1.000 | 1.215 e + 03 | | 0 | | 1 | 0.02 | 1.0482 e-02 e + 03 | 1.128 | 1.000 | 0 | | 2 | 0.02 | 1.7190 e 03 e + 03 | 1.115 | 1.000 | 0 | | 3 | 0.021.118 e + 03 | 1.000 | 4.3796 e-04 | | 0 | | 4 | 0.01 | 9.4193 e-04 e + 03 | 1.111 | 1.000 | 0 | | 5 | 0.01 | 3.7079 e-04 e + 03 | 1.108 | 1.000 | 0 | | 6 | 0.01 | 9.5777 e-05 e + 03 | 1.107 | 1.000 | 0  | =====================================================================================
mdl = ldaModel与属性:NumTopics: 4 WordConcentration: 1 TopicConcentration: 1 corpustopicprobability: [0.2500 0.2500 0.2500 0.2500 0.2500] documenttopicprobability: [154x4 double] topicwordprobability: [3092x4 double]词汇:[“最公平的”“生物”…FitInfo: [1x1 struct]

使用词汇云来可视化主题。

数字topicIdx = 1:4 subplot(2,2,topicIdx) wordcloud(mdl,topicIdx);标题(主题:“+ topicIdx)结束

图中包含类型为wordcloud的对象。类型wordcloud的图表有标题Topic: 1。类型wordcloud的图表有标题Topic: 2。类型wordcloud的图表有标题Topic: 3。类型wordcloud的图表有标题Topic: 4。

将LDA模型拟合到由字数矩阵表示的文档集合中。

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

rng (“默认”

加载示例数据。sonnetsCounts.mat包含一个字数矩阵和相应的莎士比亚十四行诗的预处理版本的词汇量。的值计数(i, j)对应于的次数j词汇表中的单词出现在文档。

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

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

numTopics = 7;mdl = fitlda(计数,numTopics,“详细”, 0);

使用堆叠柱状图可视化多个主题混合。可视化前三个输入文档的主题组合。

topicmixture = transform(mdl,counts(1:3,:));图barh (topicMixtures,“堆叠”xlim([0 1])“主题混合”)包含(“主题概率”) ylabel (“文档”)传说(“主题”+字符串(1:numTopics),“位置”“northeastoutside”

图中包含一个轴对象。标题为Topic mixture的axes对象包含7个类型为bar的对象。这些对象代表主题1、主题2、主题3、主题4、主题5、主题6、主题7。

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

rng (“默认”

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

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

使用创建单词袋模型bagOfWords

bag = bagOfWords(文档)
带有属性的单词:[154x3092 double]词汇:["最公平的" "生物" "欲望"…NumWords: 3092 NumDocuments: 154

拟合20个主题的LDA模型。

numTopics = 20;mdl = fitlda(包,numTopics)
初始主题分配在0.035863秒内采样。===================================================================================== | 迭代每个相对| | |时间培训|主题| | | | | |迭代变化困惑浓度浓度| | | | | |(秒)日志(L) | | |迭代  | ===================================================================================== | 0 | 0.02 | 5.000 | 1.159 e + 03 | | 0 | | 1 | 0.08 | 5.4884 e-02 e + 02 | 8.028 | 5.000 | 0 | | 2 | 0.06 | 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.05 | 3.4662 e 03 e + 02 | 7.430 | 5.000 | 0 | | 5 | 0.05 | 2.9259 e 03 e + 02 | 7.288 | 5.000 | 0 | | 6 | 0.06 | 6.4180 e-05 e + 02 | 7.291 | 5.000 | 0  | =====================================================================================
mdl = ldaModel与属性:NumTopics: 20 WordConcentration: 1 TopicConcentration: 5 corpustopicprobability:[0.0500 0.0500 0.0500 0.0500 0.0500…[中文]概率:[3092x20 double]词汇:["最公平的" "生物"…FitInfo: [1x1 struct]

预测一组新文档的主要主题。

newDocuments = tokenizedDocument([“名字有什么关系?”玫瑰不管叫什么名字都一样芬芳。”“如果音乐是爱情的食粮,那就继续演奏吧。”]);topicIdx = predict(mdl,newDocuments)
topicIdx =2×119日8

使用词云将预测的主题可视化。

图subplot(1,2,1) wordcloud(mdl,topicIdx(1));标题(“主题”+ topicIdx(1)) subplot(1,2,2) wordcloud(mdl,topicIdx(2));标题(“主题”+ topicIdx (2))

图中包含类型为wordcloud的对象。wordcloud类型的图表的标题是Topic 19。wordcloud类型的图表标题为Topic 8。

输入参数

全部折叠

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

主题数,指定为正整数。有关显示如何选择主题数量的示例,请参见为LDA模型选择主题数量

例子:200

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

名称-值参数

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

例子:“规划求解”、“真空断路”指定使用近似变分贝叶斯作为求解器。
解算器选项

全部折叠

用于优化的求解器,指定为逗号分隔的对,由“规划求解”和以下其中之一:

随机解算器

  • “savb”-使用随机近似变分贝叶斯[1][2].这个求解器最适合大型数据集,可以在更少的数据通道中拟合出一个良好的模型。

批处理解决

  • 研究生院理事会的-使用折叠吉布斯抽样[3].这个求解器可以在花费更长的运行时间的代价下更加精确。的重新开始功能不支持配备CGS的模型。金宝app

  • “真空断路”-使用近似变分贝叶斯[4].这种求解器通常比折叠吉布斯采样和折叠变分贝叶斯运行得更快,但精度可能较低。

  • “cvb0”-使用折叠变分贝叶斯,零阶[4][5].这个求解器可以比近似变分贝叶斯更准确,但代价是需要更长的运行时间。

有关显示如何比较求解器的示例,请参见比较LDA求解器

例子:“规划求解”、“savb”

对数似然的相对容差,指定为由逗号分隔的对组成“LogLikelihoodTolerance”一个正标量。当达到此公差时,优化终止。

例子:“LogLikelihoodTolerance”,0.001

选项来拟合主题浓度,指定为由逗号分隔的对组成“FitTopicConcentration”,要么真正的

函数拟合狄利克雷先验 α α 0 p 1 p 2 p K 关于话题的混合,其中 α 0 题目是否集中和 p 1 ... p K 是总和为1的语料库主题概率。

例子:“FitTopicProbabilities”,假的

数据类型:逻辑

选项来拟合主题浓度,指定为由逗号分隔的对组成“FitTopicConcentration”,要么真正的

用于批量求解研究生院理事会的“真空断路”,“cvb0”,默认为FitTopicConcentration真正的.对于随机解算器“savb”,默认为

函数拟合狄利克雷先验 α α 0 p 1 p 2 p K 关于话题的混合,其中 α 0 题目是否集中和 p 1 ... p K 是总和为1的语料库主题概率。

例子:“FitTopicConcentration”,假的

数据类型:逻辑

主题浓度的初始估计,指定为由逗号分隔的对组成“InitialTopicConcentration”一个非负标量。该函数将每个主题的浓度设置为TopicConcentration / NumTopics.有关更多信息,请参见潜狄利克雷分配

例子:“InitialTopicConcentration”,25岁

主题顺序,指定为以下之一:

  • “initial-fit-probability”-根据输入文档集的语料库主题概率对主题进行排序CorpusTopicProbabilities属性)。

  • “无序”—不要对主题进行排序。

字的浓度,指定为由逗号分隔的对组成“WordConcentration”一个非负标量。该软件将主题上的狄利克雷先验(每个主题的单词概率)设置为具有该值的对称狄利克雷分布参数WordConcentration / numWords,在那里numWords输入文档的词汇表大小。有关更多信息,请参见潜狄利克雷分配

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

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

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

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

请注意

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

批量求解器选项

全部折叠

最大迭代次数,指定为由逗号分隔的对组成的“IterationLimit”一个正整数。

此选项仅支持批处理求解器金宝app(研究生院理事会的“真空断路”,或“cvb0”).

例子:“IterationLimit”,200年

随机求解器选项

全部折叠

通过数据的最大次数,指定为由逗号分隔的对组成“DataPassLimit”一个正整数。

如果你指定“DataPassLimit”但不是“MiniBatchLimit”,则为默认值“MiniBatchLimit”将被忽略。如果同时指定“DataPassLimit”而且“MiniBatchLimit”,然后fitlda使用导致处理最少观测值的参数。

此选项仅支持随机(金宝app“savb”)解决。

例子:“DataPassLimit”,2

最小批处理通过的最大数量,指定为逗号分隔的对,由“MiniBatchLimit”一个正整数。

如果你指定“MiniBatchLimit”但不是“DataPassLimit”,然后fitlda忽略的默认值“DataPassLimit”.如果同时指定“MiniBatchLimit”而且“DataPassLimit”,然后fitlda使用导致处理最少观测值的参数。默认值为装天花板(numDocuments / MiniBatchSize),在那里numDocuments是输入文档的数量。

此选项仅支持随机(金宝app“savb”)解决。

例子:“MiniBatchLimit”,200年

小批量大小,指定为由逗号分隔的对组成“MiniBatchLimit”一个正整数。功能过程MiniBatchSize每个迭代中的文档。

此选项仅支持随机(金宝app“savb”)解决。

例子:“MiniBatchSize”,512年

学习率衰减,指定为逗号分隔的对“LearnRateDecay”一个小于等于1的正标量。

对于mini-batcht时,该函数设置学习速率为 η t 1 / 1 + t κ ,在那里 κ 就是学习率衰减。

如果LearnRateDecay趋近于1,则学习率衰减更快,模型主要从早期的迷你批中学习。如果LearnRateDecay趋近于0,则学习率衰减较慢,模型继续从更多的小批量中学习。有关更多信息,请参见随机解算器

此选项仅支持随机求解器(金宝app“savb”).

例子:“LearnRateDecay”,0.75

显示选项

全部折叠

用于监视优化收敛的验证数据,指定为由逗号分隔的对组成“ValidationData”和一个bagOfWords对象,bagOfNgrams对象,或字数的稀疏矩阵。如果验证数据是一个矩阵,那么数据必须具有与输入文档相同的方向和相同的字数。

迭代次数中模型验证的频率,指定为由逗号分隔的对组成“ValidationFrequency”一个正整数。

默认值取决于用于拟合模型的求解器。对于随机求解器,默认值是10。对于其他解算器,默认值为1。

详细级别,指定为逗号分隔的对,由“详细”和以下其中之一:

  • 0 -不显示详细输出。

  • 1 -显示进度信息。

例子:“详细”,0

输出参数

全部折叠

输出LDA模型,返回为ldaModel对象。

更多关于

全部折叠

潜狄利克雷分配

一个潜在狄利克雷分配LDA模型是一种文档主题模型,它发现文档集合中的潜在主题,并推断主题中的单词概率。的集合进行LDA建模D文档作为主题混合 θ 1 ... θ D ,在K以词概率向量为特征的主题 φ 1 ... φ K .该模型假设主题混合 θ 1 ... θ D ,以及主题 φ 1 ... φ K 浓度参数遵循狄利克雷分布 α 而且 β 分别。

主题混合 θ 1 ... θ D 概率向量是长度吗K,在那里K是主题的数量。条目 θ d 是主题的概率吗出现在d文档。的行对应的主题混合DocumentTopicProbabilities的属性ldaModel对象。

的话题 φ 1 ... φ K 概率向量是长度吗V,在那里V是词汇表中的单词数。条目 φ v 对应于的概率v中出现的词汇主题。的话题 φ 1 ... φ K 的列对应TopicWordProbabilities的属性ldaModel对象。

考虑到这些话题 φ 1 ... φ K 狄利克雷先验 α 对于主题混合物,LDA假设文档的生成过程如下:

  1. 对主题混合进行抽样 θ 狄利克雷 α .随机变量 θ 概率向量是长度吗K,在那里K是主题的数量。

  2. 对于文档中的每个单词:

    1. 对主题索引进行抽样 z 分类 θ .随机变量z是从1到1的整数吗K,在那里K是主题的数量。

    2. 选取一个单词 w 分类 φ z .随机变量w是从1到1的整数吗V,在那里V是词汇表中的单词数,并表示词汇表中对应的单词。

在这个生成过程中,文件与文字的联合分发 w 1 ... w N ,主题混合 θ ,并带有主题索引 z 1 ... z N 是由

p θ z w | α φ p θ | α n 1 N p z n | θ p w n | z n φ

在哪里N是文档中的字数。对联合分布求和z然后对其积分 θ 生成文档的边际分布w

p w | α φ θ p θ | α n 1 N z n p z n | θ p w n | z n φ d θ

下面的图表说明了LDA模型作为一个概率图形模型。阴影节点为观测变量,无阴影节点为潜在变量,无轮廓节点为模型参数。箭头突出了随机变量之间的依赖关系,而板块表示重复的节点。

狄利克雷分布

狄利克雷分布是多项式分布的连续推广。给定类别的数量 K 2 ,浓度参数 α ,在那里 α 向量的长度是正的实数吗K,狄利克雷分布的概率密度函数为

p θ α 1 B α 1 K θ α 1

在哪里B为多元Beta函数

B α 1 K Γ α Γ 1 K α

狄利克雷分布的一个特例是对称狄利克雷分布.对称狄利克雷分布由浓度参数表征 α ,其中的所有元素 α 都是一样的。

随机解算器

随机求解器以小批量处理文档。它使用从每个迷你批量计算的概率的加权和,以及所有以前的迷你批量的概率来更新每个主题的单词概率。

对于mini-batcht时,求解器设置学习率为 η t 1 / 1 + t κ ,在那里 κ 就是学习率衰减。

该函数使用学习率衰减来更新 Φ ,每个主题的单词概率矩阵,通过设置

Φ t 1 η t Φ t 1 + η t Φ t

在哪里 Φ t 矩阵是从mini-batch中学到的吗t, Φ t 1 矩阵是从小批量1到小批量学习的吗t1。

在学习开始之前(当t= 0),函数初始化每个主题的初始单词概率 Φ 0 随机值。

兼容性的考虑

全部展开

R2018b的行为发生了变化

参考文献

Foulds, James, Levi Boyles, Christopher DuBois, padhaic Smyth和Max Welling。潜在狄利克雷分配的随机崩溃变分贝叶斯推理在第19届ACM SIGKDD知识发现和数据挖掘国际会议论文集第446-454页。ACM, 2013年。

Hoffman, Matthew D, David M. Blei, Chong Wang和John Paisley。"随机变分推理"机器学习研究杂志14日,没有。1(2013): 1303-1347。

[3]格里菲斯,托马斯·L.和马克·史提弗斯。“寻找科学话题。”美国国家科学院院刊101年,没有。增刊1(2004):5228-5235。

[4]亚松森、亚瑟、马克斯·韦林、帕德瑞克·史密斯和尔怀德。“主题模型的平滑和推断。”在第二十五届人工智能不确定性会议论文集, 27-34页。AUAI出版社,2009年。

Teh, Yee W., David Newman和Max Welling。“潜在狄利克雷分配的折叠变分贝叶斯推理算法。”在神经信息处理系统的进展,第1353-1360页。2007.

在R2017b中引入