最近在做基於LDA(Latent Dirichlet Allocation)的文本分類處理,開始學習和接觸了LDA,因為代碼採用的是Java,所以我選擇的LDA開源工具是JGibbLDA,這個是LDA的Java版本實現,下載地址為:http://jgibblda.sourceforge.net/ ,當前最新版本為v1.0。同時對應的C++版本為GibbsLDA,下載地址為:http://gibbslda.sourceforge.net/。
感謝Phantom(byr ID)在學習和使用過程中對我的指導和協助。
首先下載並解壓,解壓後檔案目錄如下所示:
bin存放的是編譯後的class檔案,lib中放args4j-2.0.6.jar,models中存放已經產生好的主題模型樣本,src存放那個源檔案。我在使用時把jar檔案放於工程中,另外直接把src下的jgibblda包複製於項目中。 1.輸入檔案格式
輸入檔案的格式形如下圖所示:
其中第一行表述訓練語料文檔的數目,之後每一行是一個文檔,每一行的內容是文檔中的詞語。 2.輸出檔案
輸出檔案主要有<model_name>.others、<model_name>.phi、<model_name>.theta、<model_name>.tassign、<model_name>.twords,另外還有一個wordmap.txt檔案。其中<model_name>根據採樣迭代次數來指定,如model-00800,最後一次採樣名稱命名為model-final。
.others檔案儲存體LDA模型參數,如alpha、beta等。
.phi檔案儲存體詞語-主題分布,每一行是一個主題,列內容為詞語。
.theta檔案主題文檔分布,每一行是一個文檔,列內容是主題機率。
.tassign檔案是訓練預料中單詞的主題指定(歸屬),每一行是一個語料文檔。 3.使用方式
JGibbLDA可以通過命令列或者代碼調用運行。
3.1.命令列調用簡介
初次使用訓練模型
[java] view plain copy $ java [-mx512M] -cp bin:lib/args4j-2.0.6.jar jgibblda.LDA -est [-alpha <double>] [-beta <double>] [-ntopics <int>] [-niters <int>] [-savestep <int>] [-twords <int>] –dir <string> -dfile <string>
-est 從訓練語料中評估出LDA模型
-alpha LDA模型中的alpha數值,預設為50/K(K是主題數目)
-beta LDA模型中的beta數值,預設是0.1
-ntopics 主題數目,預設值是100
-niters GIbbs採樣的迭代數目,預設值為2000
-savestep 指定開始儲存LDA模型的迭代次數
-dir 訓練語料目錄
-dfile 訓練語料檔案名稱
此處需要指出的是dfile最好寫輸入語料檔案名稱,而dir指定語料檔案所在的目錄,訓練過程中產生的模型檔案會預設存放在dir下面。例如語料的絕對路徑為/usr/Java/models/newDoc.dat,可以設定為dir=/usr/Java/models,而dfile=newDoc.dat,這樣訓練過程中的模型檔案會預設存放在/usr/Java/models下面。
在原有模型上繼續迭代
[java] view plain copy $ java [-mx512M]-cp bin:lib/args4j-2.0.6.jar jgibblda.LDA -estc -dir <string> -model <string> [-niters <int>] [-savestep <int>] [-twords <int>]
具體參數的含義可以在官網上找到,這裡不一一介紹了。
根據現有LDA模型,預測新語料
[java] view plain copy $ java [-mx512M] -cp bin:lib/args4j-2.0.6.jar jgibblda.LDA -inf -dir <string> -model <string> [-niters <int>] [-twords <int>] -dfile <string>
3.2代碼調用
初次訓練,產生模型
[java] view plain copy