matlab topictool

来源:互联网 发布:乐视for mac客户端 编辑:程序博客网 时间:2024/06/04 19:27

最近在研究主题模型中的LDA算法,找到了matlab中的topictool工具箱,网上查到的资料很少,学起来有点困难,现将学习记录与此,希望有共同研究目的的朋友一起讨论,大家一起学习。

持续更新中,未完待续。。


topictool 下载地址:

http://psiexp.ss.uci.edu/research/programs_data/toolbox.htm#Matlab_Functions

>>help topictool



GibbsSamplerLDA

[ WP,DP,Z ] = GibbsSamplerLDA( WS,DS,T,N,ALPHA,BETA,SEED,OUTPUT )

WS(k),WS的最大值为W:词汇量的大小

DS(k),DS的最大值为D:文档数

WS(k) and DS(k) contain the word and document indices for the kth token.


T;话题数


首先输出稀疏矩阵WP,大小:W*T,WP(i,j):词i分配给话题j的次数,词和话题的关系,或者说是概率分布。

第二个输出矩阵DP,大小:D*T,DP(i,j):文档d中的一个单词分配给话题j的次数,文档和话题的关系。

第三个输出Z,话题


[ WP,DP,Z ] = GibbsSamplerLDA( WS,DS,T,N,ALPHA,BETA,SEED,OUTPUT )运行吉布斯抽样,初始状态ZIN?

ZIN(k) 第k次?


WS,DS:双精度

N:吉布斯抽样迭代次数

α和β是狄利克雷先验的主题分布(θ)和topic-word分别分布(φ)的超参数。

seed集:随机数生成器的种子

output:采样器决定了屏幕输出

0:不提供输出

1:只显示迭代次数

2:显示所有输出


时间与话题数和迭代次数线性相关;内存需要与文档和话题数线性相关。


一个好的迭代次数的设置依赖于话题数量和问题复杂度。大多数问题,设置为500~2000.

适当的α和β值的数值取决于主题和词汇表中词的数量。对于大多数应用程序,通过设置α= 50 / T和β= 200 / W可以获得好的结果。


采样器使用自己的随机数生成器,设置这个功能的种子不会影响Matlab函数的随机数种子。


给出文档-主题、主题-词的频次?

Function WriteTopics

[ S ] = WriteTopics( WP , BETA , WO )

把每个主题中最有可能的词或作者,写到一个字符串单元数组(概率?)。

WO:是一个字符串,WO(i)表示第i个实体(单词或作者)。(词汇表?)


[ S ] = WriteTopics( WP , BETA , WO , K , E , M , FILENAME )

把每个主题中最有可能K个词或作者,写到包含M列的文档FILENAME中。

E是S中话题列表的阈值。?只列出不超过累积概率的实体。

WriteTopics( WP , BETA , WO , K , E , M , FILENAME )只给出最可能的k个实体,不给出字符串数组(概率?)

WriteTopics( WP , BETA , WO )使用默认值k = 5,E = 1


只给出主题-词的概率分布?

Function VisualizeTopics

在二维地图可视化主题。

visualizetopics( DP,ALPHA,S,VIZMODE ):使用S中的话题字符串和文档-话题计数矩阵DP。这些计数转化成文档-每个主题的概率分布。对于每一个主题对,使用对称的Kullback-Leibler距离计算文件之间的分布。

经典的多维尺度是用来在二维地图可视化所有成对的话题距离。


VIZMODE可以设置为“horizontal”或“vertical”,来决定显示主题的方式。

代码:

D = size( DP , 1 );//size(A,1)返回矩阵A的行数
T = size( DP , 2 );//size(A,2)返回矩阵A的列数

sumdp = full( sum( DP , 2 )) + ALPHA * T;//sum(x,2)表示矩阵x的横向相加,求每行的和,结果是列向量。

docdist = zeros( D , D );//生成D*D的零矩阵,文档之间KL距离
for i1=1:D
    dp1 = ( DP( i1, : ) + ALPHA ) / sumdp( i1 );//DP( i1 , : )第i1行
    
    for i2=i1+1:D
        dp2 = ( DP( i2 , : ) + ALPHA ) / sumdp( i2 );第i2行
        
        % calculate KL distances both ways       
        KL1 = sum( dp1 .* log2( dp1 ./ dp2 ));    
        KL2 = sum( dp2 .* log2( dp2 ./ dp1 )); 
        
        docdist( i1,i2 ) = (KL1+KL2)/2;
        docdist( i2,i1 ) = (KL1+KL2)/2;
    end
end

可以只用该算法的前半部分,即计算KL距离?

测试:

 [ WP,DP,Z ] = GibbsSamplerLDA( WS,DS,T,N,ALPHA,BETA,SEED,OUTPUT )

 [ WP,DP,Z ] = GibbsSamplerLDA( WS , DS , 2 , 50 , 2 , 0.5 , 3 , 2 );


>> load('D:\Program Files\MATLAB\R2012a\testdata\documents.mat')

>> load('D:\Program Files\MATLAB\R2012a\testdata\documentsoutput.mat')

>> KL
>> docdist


Imports text file with word-document counts into matlab format

[ WS , DS ] = importworddoccounts( filename )

word-document counts,生成词和文件的索引WS、DS。

file包含三列:文档索引,词索引,单词计数

Example 1 of running basic topic model (LDA)



0 0
原创粉丝点击