拟合潜狄利克雷分配(LDA)模型
潜狄利克雷分配模型(latent Dirichlet allocation, LDA)是一种主题模型,它发现文档集合中的潜在主题,并推断主题中的单词概率。如果模型使用n-grams袋模型拟合,那么软件将n-grams视为单独的单词。
若要重现本例中的结果,请设置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)结束
将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”)
若要重现本例中的结果,请设置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))
袋
- - - - - -输入模型bagOfWords
对象|bagOfNgrams
对象输入单词袋或n-grams袋模型,指定为bagOfWords
对象或bagOfNgrams
对象。如果袋
是一个bagOfNgrams
对象,则该函数将每个n-gram视为单个单词。
numTopics
- - - - - -选题数量主题数,指定为正整数。有关显示如何选择主题数量的示例,请参见为LDA模型选择主题数量.
例子:200
计数
- - - - - -词频统计单词的频率计数,指定为一个非负整数矩阵。如果你指定“DocumentsIn”
是“行”
,则值计数(i, j)
对应于的次数j词汇表中的单词出现在我文档。否则,值计数(i, j)
对应于的次数我词汇表中的单词出现在j文档。
的可选逗号分隔对名称,值
参数。的名字
参数名称和价值
对应的值。的名字
必须出现在引号内。您可以以任意顺序指定多个名称和值对参数Name1, Value1,…,的家
.
“规划求解”、“真空断路”
指定使用近似变分贝叶斯作为求解器。
解算器
- - - - - -优化求解器研究生院理事会的
(默认)|“savb”
|“真空断路”
|“cvb0”
LogLikelihoodTolerance
- - - - - -对数似然的相对容差0.0001
(默认)|积极的标量对数似然的相对容差,指定为由逗号分隔的对组成“LogLikelihoodTolerance”
一个正标量。当达到此公差时,优化终止。
例子:“LogLikelihoodTolerance”,0.001
FitTopicProbabilities
- - - - - -适合语料库主题概率的选项真正的
(默认)|假
选项来拟合主题浓度,指定为由逗号分隔的对组成“FitTopicConcentration”
,要么真正的
或假
.
函数拟合狄利克雷先验 关于话题的混合,其中 题目是否集中和 是总和为1的语料库主题概率。
例子:“FitTopicProbabilities”,假的
数据类型:逻辑
FitTopicConcentration
- - - - - -适合主题浓度的选项真正的
|假
选项来拟合主题浓度,指定为由逗号分隔的对组成“FitTopicConcentration”
,要么真正的
或假
.
用于批量求解研究生院理事会的
,“真空断路”
,“cvb0”
,默认为FitTopicConcentration
是真正的
.对于随机解算器“savb”
,默认为假
.
函数拟合狄利克雷先验 关于话题的混合,其中 题目是否集中和 是总和为1的语料库主题概率。
例子:“FitTopicConcentration”,假的
数据类型:逻辑
InitialTopicConcentration
- - - - - -初步估计的主题浓度numTopics / 4
(默认)|负的标量主题浓度的初始估计,指定为由逗号分隔的对组成“InitialTopicConcentration”
一个非负标量。该函数将每个主题的浓度设置为TopicConcentration / NumTopics
.有关更多信息,请参见潜狄利克雷分配.
例子:“InitialTopicConcentration”,25岁
TopicOrder
- - - - - -主题的顺序“initial-fit-probability”
(默认)|“无序”
主题顺序,指定为以下之一:
“initial-fit-probability”
-根据输入文档集的语料库主题概率对主题进行排序CorpusTopicProbabilities
属性)。
“无序”
—不要对主题进行排序。
WordConcentration
- - - - - -词集中1
(默认)|负的标量字的浓度,指定为由逗号分隔的对组成“WordConcentration”
一个非负标量。该软件将主题上的狄利克雷先验(每个主题的单词概率)设置为具有该值的对称狄利克雷分布参数WordConcentration / numWords
,在那里numWords
输入文档的词汇表大小。有关更多信息,请参见潜狄利克雷分配.
DocumentsIn
- - - - - -文件的朝向“行”
(默认)|“列”
文档在字数矩阵中的方向,指定为逗号分隔的对,由“DocumentsIn”
和以下其中之一:
“行”
-输入是一个字数矩阵,每行对应文档。
“列”
-输入是字数转置矩阵,列对应文档。
此选项仅适用于将输入文档指定为字数矩阵的情况。
请注意
如果您定位您的字数矩阵,使文档对应于列和指定“DocumentsIn”、“列”
,那么优化执行时间可能会显著减少。
IterationLimit
- - - - - -最大迭代次数One hundred.
(默认)|正整数最大迭代次数,指定为由逗号分隔的对组成的“IterationLimit”
一个正整数。
此选项仅支持批处理求解器金宝app(研究生院理事会的
,“真空断路”
,或“cvb0”
).
例子:“IterationLimit”,200年
DataPassLimit
- - - - - -通过数据的最大次数通过数据的最大次数,指定为由逗号分隔的对组成“DataPassLimit”
一个正整数。
如果你指定“DataPassLimit”
但不是“MiniBatchLimit”
,则为默认值“MiniBatchLimit”
将被忽略。如果同时指定“DataPassLimit”
而且“MiniBatchLimit”
,然后fitlda
使用导致处理最少观测值的参数。
此选项仅支持随机(金宝app“savb”
)解决。
例子:“DataPassLimit”,2
MiniBatchLimit
- - - - - -最小批处理通过的最大数量最小批处理通过的最大数量,指定为逗号分隔的对,由“MiniBatchLimit”
一个正整数。
如果你指定“MiniBatchLimit”
但不是“DataPassLimit”
,然后fitlda
忽略的默认值“DataPassLimit”
.如果同时指定“MiniBatchLimit”
而且“DataPassLimit”
,然后fitlda
使用导致处理最少观测值的参数。默认值为装天花板(numDocuments / MiniBatchSize)
,在那里numDocuments
是输入文档的数量。
此选项仅支持随机(金宝app“savb”
)解决。
例子:“MiniBatchLimit”,200年
MiniBatchSize
- - - - - -Mini-batch大小小批量大小,指定为由逗号分隔的对组成“MiniBatchLimit”
一个正整数。功能过程MiniBatchSize
每个迭代中的文档。
此选项仅支持随机(金宝app“savb”
)解决。
例子:“MiniBatchSize”,512年
LearnRateDecay
- - - - - -学习率衰减学习率衰减,指定为逗号分隔的对“LearnRateDecay”
一个小于等于1的正标量。
对于mini-batcht时,该函数设置学习速率为 ,在那里 就是学习率衰减。
如果LearnRateDecay
趋近于1,则学习率衰减更快,模型主要从早期的迷你批中学习。如果LearnRateDecay
趋近于0,则学习率衰减较慢,模型继续从更多的小批量中学习。有关更多信息,请参见随机解算器.
此选项仅支持随机求解器(金宝app“savb”
).
例子:“LearnRateDecay”,0.75
ValidationData
- - - - - -验证数据[]
(默认)|bagOfWords
对象|bagOfNgrams
对象|字数稀疏矩阵用于监视优化收敛的验证数据,指定为由逗号分隔的对组成“ValidationData”
和一个bagOfWords
对象,bagOfNgrams
对象,或字数的稀疏矩阵。如果验证数据是一个矩阵,那么数据必须具有与输入文档相同的方向和相同的字数。
ValidationFrequency
- - - - - -模型验证频率迭代次数中模型验证的频率,指定为由逗号分隔的对组成“ValidationFrequency”
一个正整数。
默认值取决于用于拟合模型的求解器。对于随机求解器,默认值是10。对于其他解算器,默认值为1。
详细的
- - - - - -冗长的水平详细级别,指定为逗号分隔的对,由“详细”
和以下其中之一:
0 -不显示详细输出。
1 -显示进度信息。
例子:“详细”,0
一个潜在狄利克雷分配LDA模型是一种文档主题模型,它发现文档集合中的潜在主题,并推断主题中的单词概率。的集合进行LDA建模D文档作为主题混合 ,在K以词概率向量为特征的主题 .该模型假设主题混合 ,以及主题 浓度参数遵循狄利克雷分布 而且 分别。
主题混合
概率向量是长度吗K,在那里K是主题的数量。条目
是主题的概率吗我出现在d文档。的行对应的主题混合DocumentTopicProbabilities
的属性ldaModel
对象。
的话题
概率向量是长度吗V,在那里V是词汇表中的单词数。条目
对应于的概率v中出现的词汇我主题。的话题
的列对应TopicWordProbabilities
的属性ldaModel
对象。
考虑到这些话题 狄利克雷先验 对于主题混合物,LDA假设文档的生成过程如下:
对主题混合进行抽样 .随机变量 概率向量是长度吗K,在那里K是主题的数量。
对于文档中的每个单词:
对主题索引进行抽样 .随机变量z是从1到1的整数吗K,在那里K是主题的数量。
选取一个单词 .随机变量w是从1到1的整数吗V,在那里V是词汇表中的单词数,并表示词汇表中对应的单词。
在这个生成过程中,文件与文字的联合分发 ,主题混合 ,并带有主题索引 是由
在哪里N是文档中的字数。对联合分布求和z然后对其积分 生成文档的边际分布w:
下面的图表说明了LDA模型作为一个概率图形模型。阴影节点为观测变量,无阴影节点为潜在变量,无轮廓节点为模型参数。箭头突出了随机变量之间的依赖关系,而板块表示重复的节点。
的狄利克雷分布是多项式分布的连续推广。给定类别的数量 ,浓度参数 ,在那里 向量的长度是正的实数吗K,狄利克雷分布的概率密度函数为
在哪里B为多元Beta函数
狄利克雷分布的一个特例是对称狄利克雷分布.对称狄利克雷分布由浓度参数表征 ,其中的所有元素 都是一样的。
随机求解器以小批量处理文档。它使用从每个迷你批量计算的概率的加权和,以及所有以前的迷你批量的概率来更新每个主题的单词概率。
对于mini-batcht时,求解器设置学习率为 ,在那里 就是学习率衰减。
该函数使用学习率衰减来更新 ,每个主题的单词概率矩阵,通过设置
在哪里 矩阵是从mini-batch中学到的吗t, 矩阵是从小批量1到小批量学习的吗t1。
在学习开始之前(当t= 0),函数初始化每个主题的初始单词概率 随机值。
fitlda
各种话题R2018b的行为发生了变化
从R2018b开始,fitlda
,默认情况下,将主题按输入文档集的主题概率降序排序。这种行为使我们更容易找到概率最高的主题。
在以前的版本中,fitlda
不改变主题顺序。要重新生成行为,请设置“TopicOrder”
选项“无序”
.
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.
Sie haben eine geänderte版本dieses Beispiels。Möchten Sie dieses Beispiel mit Ihren Änderungen öffnen?
你的身体和身体之间的联系MATLAB-Befehl
Führen Sie den Befehl durch Eingabe in das MATLAB-Befehlsfenster aus。web浏览器unterstützen keine MATLAB-Befehle。
您也可以从以下列表中选择一个网站:
选择中国站点(中文或英文)以获得最佳站点性能。其他MathWorks国家站点没有针对您所在位置的访问进行优化。